1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.car.users; 18 19 import android.app.ActivityManager; 20 import android.app.IActivityManager; 21 import android.content.Context; 22 import android.os.Handler; 23 import android.os.Process; 24 import android.os.UserHandle; 25 import android.os.UserManager; 26 27 import com.android.systemui.CoreStartable; 28 import com.android.systemui.InitController; 29 import com.android.systemui.car.CarServiceProvider; 30 import com.android.systemui.dagger.SysUISingleton; 31 import com.android.systemui.dagger.qualifiers.Background; 32 import com.android.systemui.dump.DumpManager; 33 import com.android.systemui.settings.DisplayTracker; 34 import com.android.systemui.settings.UserContentResolverProvider; 35 import com.android.systemui.settings.UserContextProvider; 36 import com.android.systemui.settings.UserFileManager; 37 import com.android.systemui.settings.UserFileManagerImpl; 38 import com.android.systemui.settings.UserTracker; 39 40 import dagger.Binds; 41 import dagger.Module; 42 import dagger.Provides; 43 import dagger.multibindings.ClassKey; 44 import dagger.multibindings.IntoMap; 45 46 /** 47 * Car-specific dagger Module for classes found within the com.android.systemui.settings package. 48 */ 49 @Module 50 public abstract class CarMultiUserUtilsModule { 51 @Binds 52 @SysUISingleton bindUserContextProvider(UserTracker tracker)53 abstract UserContextProvider bindUserContextProvider(UserTracker tracker); 54 55 @Binds 56 @SysUISingleton bindUserContentResolverProvider( UserTracker tracker)57 abstract UserContentResolverProvider bindUserContentResolverProvider( 58 UserTracker tracker); 59 60 @SysUISingleton 61 @Provides provideUserTracker( Context context, UserManager userManager, IActivityManager iActivityManager, DumpManager dumpManager, @Background Handler handler, CarServiceProvider carServiceProvider, InitController initController )62 static UserTracker provideUserTracker( 63 Context context, 64 UserManager userManager, 65 IActivityManager iActivityManager, 66 DumpManager dumpManager, 67 @Background Handler handler, 68 CarServiceProvider carServiceProvider, 69 InitController initController 70 ) { 71 if (CarSystemUIUserUtil.isMUPANDSystemUI()) { 72 CarMUPANDUserTrackerImpl mupandTracker = new CarMUPANDUserTrackerImpl(context, 73 userManager, iActivityManager, dumpManager, handler, carServiceProvider, 74 initController); 75 mupandTracker.initialize(ActivityManager.getCurrentUser()); 76 return mupandTracker; 77 } 78 UserHandle processUser = Process.myUserHandle(); 79 boolean isSecondaryUserSystemUI = 80 CarSystemUIUserUtil.isSecondaryMUMDSystemUI(); 81 int startingUser = isSecondaryUserSystemUI 82 ? processUser.getIdentifier() 83 : ActivityManager.getCurrentUser(); 84 CarUserTrackerImpl tracker = new CarUserTrackerImpl(context, userManager, iActivityManager, 85 dumpManager, handler, isSecondaryUserSystemUI); 86 tracker.initialize(startingUser); 87 return tracker; 88 } 89 90 @SysUISingleton 91 @Provides provideDisplayTracker( Context context, UserTracker userTracker, CarServiceProvider carServiceProvider, @Background Handler handler )92 static DisplayTracker provideDisplayTracker( 93 Context context, 94 UserTracker userTracker, 95 CarServiceProvider carServiceProvider, 96 @Background Handler handler 97 ) { 98 return new CarDisplayTrackerImpl(context, userTracker, carServiceProvider, handler); 99 } 100 101 @Binds 102 @IntoMap 103 @ClassKey(UserFileManagerImpl.class) bindUserFileManagerCoreStartable(UserFileManagerImpl sysui)104 abstract CoreStartable bindUserFileManagerCoreStartable(UserFileManagerImpl sysui); 105 106 @Binds bindUserFileManager(UserFileManagerImpl impl)107 abstract UserFileManager bindUserFileManager(UserFileManagerImpl impl); 108 109 110 } 111