• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 static com.android.systemui.car.users.CarSystemUIUserUtil.isMUMDSystemUI;
20 
21 import android.app.ActivityManager;
22 import android.app.IActivityManager;
23 import android.content.Context;
24 import android.hardware.display.DisplayManager;
25 import android.os.Handler;
26 import android.os.Process;
27 import android.os.UserHandle;
28 import android.os.UserManager;
29 
30 import com.android.systemui.CoreStartable;
31 import com.android.systemui.InitController;
32 import com.android.systemui.car.CarServiceProvider;
33 import com.android.systemui.dagger.SysUISingleton;
34 import com.android.systemui.dagger.qualifiers.Application;
35 import com.android.systemui.dagger.qualifiers.Background;
36 import com.android.systemui.dump.DumpManager;
37 import com.android.systemui.flags.FeatureFlagsClassic;
38 import com.android.systemui.settings.DisplayTracker;
39 import com.android.systemui.settings.DisplayTrackerImpl;
40 import com.android.systemui.settings.UserContentResolverProvider;
41 import com.android.systemui.settings.UserContextProvider;
42 import com.android.systemui.settings.UserFileManager;
43 import com.android.systemui.settings.UserFileManagerImpl;
44 import com.android.systemui.settings.UserTracker;
45 
46 import dagger.Binds;
47 import dagger.Lazy;
48 import dagger.Module;
49 import dagger.Provides;
50 import dagger.multibindings.ClassKey;
51 import dagger.multibindings.IntoMap;
52 
53 import kotlinx.coroutines.CoroutineDispatcher;
54 import kotlinx.coroutines.CoroutineScope;
55 
56 import javax.inject.Provider;
57 
58 /**
59  * Car-specific dagger Module for classes found within the com.android.systemui.settings package.
60  */
61 @Module
62 public abstract class CarMultiUserUtilsModule {
63     @Binds
64     @SysUISingleton
bindUserContextProvider(UserTracker tracker)65     abstract UserContextProvider bindUserContextProvider(UserTracker tracker);
66 
67     @Binds
68     @SysUISingleton
bindUserContentResolverProvider( UserTracker tracker)69     abstract UserContentResolverProvider bindUserContentResolverProvider(
70             UserTracker tracker);
71 
72     @SysUISingleton
73     @Provides
provideUserTracker( Context context, Provider<FeatureFlagsClassic> featureFlagsProvider, UserManager userManager, IActivityManager iActivityManager, DumpManager dumpManager, @Application CoroutineScope appScope, @Background CoroutineDispatcher backgroundDispatcher, @Background Handler handler, CarServiceProvider carServiceProvider, InitController initController )74     static UserTracker provideUserTracker(
75             Context context,
76             Provider<FeatureFlagsClassic> featureFlagsProvider,
77             UserManager userManager,
78             IActivityManager iActivityManager,
79             DumpManager dumpManager,
80             @Application CoroutineScope appScope,
81             @Background CoroutineDispatcher backgroundDispatcher,
82             @Background Handler handler,
83             CarServiceProvider carServiceProvider,
84             InitController initController
85     ) {
86         if (CarSystemUIUserUtil.isMUPANDSystemUI()) {
87             CarMUPANDUserTrackerImpl mupandTracker = new CarMUPANDUserTrackerImpl(context,
88                     featureFlagsProvider, userManager, iActivityManager, dumpManager, appScope,
89                     backgroundDispatcher, handler, carServiceProvider, initController);
90             mupandTracker.initialize(ActivityManager.getCurrentUser());
91             return mupandTracker;
92         }
93         UserHandle processUser = Process.myUserHandle();
94         boolean isSecondaryUserSystemUI =
95                 CarSystemUIUserUtil.isSecondaryMUMDSystemUI();
96         int startingUser = isSecondaryUserSystemUI
97                 ? processUser.getIdentifier()
98                 : ActivityManager.getCurrentUser();
99         CarUserTrackerImpl tracker = new CarUserTrackerImpl(context, featureFlagsProvider,
100                 userManager, iActivityManager, dumpManager, appScope, backgroundDispatcher,
101                 handler, isSecondaryUserSystemUI);
102         tracker.initialize(startingUser);
103         return tracker;
104     }
105 
106     @SysUISingleton
107     @Provides
provideDisplayTracker( Lazy<DisplayTrackerImpl> defaultImpl, Context context, UserTracker userTracker, CarServiceProvider carServiceProvider, @Background Handler handler )108     static DisplayTracker provideDisplayTracker(
109             Lazy<DisplayTrackerImpl> defaultImpl,
110             Context context,
111             UserTracker userTracker,
112             CarServiceProvider carServiceProvider,
113             @Background Handler handler
114     ) {
115         if (!isMUMDSystemUI()) {
116             return defaultImpl.get();
117         }
118         return new CarMUMDDisplayTrackerImpl(context, userTracker, carServiceProvider, handler);
119     }
120 
121     @SysUISingleton
122     @Provides
provideDefaultDisplayTrackerImpl(DisplayManager displayManager, @Background Handler handler)123     static DisplayTrackerImpl provideDefaultDisplayTrackerImpl(DisplayManager displayManager,
124             @Background Handler handler) {
125         return new DisplayTrackerImpl(displayManager, handler);
126     }
127 
128     @Binds
129     @IntoMap
130     @ClassKey(UserFileManagerImpl.class)
bindUserFileManagerCoreStartable(UserFileManagerImpl sysui)131     abstract CoreStartable bindUserFileManagerCoreStartable(UserFileManagerImpl sysui);
132 
133     @Binds
bindUserFileManager(UserFileManagerImpl impl)134     abstract UserFileManager bindUserFileManager(UserFileManagerImpl impl);
135 
136     @Binds
137     @IntoMap
138     @ClassKey(CarProfileIconUpdater.class)
bindCarProfileIconUpdaterStartable(CarProfileIconUpdater iconUpdater)139     abstract CoreStartable bindCarProfileIconUpdaterStartable(CarProfileIconUpdater iconUpdater);
140 }
141