Merge "Remove contents of DependencyProvider." into tm-dev
This commit is contained in:
@@ -28,6 +28,8 @@ import android.view.Display;
|
|||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class to control {@link MagnificationModeSwitch}. It shows the button UI with following
|
* A class to control {@link MagnificationModeSwitch}. It shows the button UI with following
|
||||||
* conditions:
|
* conditions:
|
||||||
@@ -44,6 +46,7 @@ public class ModeSwitchesController implements SwitchListener {
|
|||||||
private final DisplayIdIndexSupplier<MagnificationModeSwitch> mSwitchSupplier;
|
private final DisplayIdIndexSupplier<MagnificationModeSwitch> mSwitchSupplier;
|
||||||
private SwitchListener mSwitchListenerDelegate;
|
private SwitchListener mSwitchListenerDelegate;
|
||||||
|
|
||||||
|
@Inject
|
||||||
public ModeSwitchesController(Context context) {
|
public ModeSwitchesController(Context context) {
|
||||||
mSwitchSupplier = new SwitchSupplier(context,
|
mSwitchSupplier = new SwitchSupplier(context,
|
||||||
context.getSystemService(DisplayManager.class), this::onSwitch);
|
context.getSystemService(DisplayManager.class), this::onSwitch);
|
||||||
|
|||||||
@@ -31,10 +31,13 @@ import android.util.SparseArray
|
|||||||
import com.android.internal.annotations.VisibleForTesting
|
import com.android.internal.annotations.VisibleForTesting
|
||||||
import com.android.systemui.Dumpable
|
import com.android.systemui.Dumpable
|
||||||
import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger
|
import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger
|
||||||
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
|
import com.android.systemui.dagger.qualifiers.Background
|
||||||
import com.android.systemui.dump.DumpManager
|
import com.android.systemui.dump.DumpManager
|
||||||
import com.android.systemui.settings.UserTracker
|
import com.android.systemui.settings.UserTracker
|
||||||
import java.io.PrintWriter
|
import java.io.PrintWriter
|
||||||
import java.util.concurrent.Executor
|
import java.util.concurrent.Executor
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
data class ReceiverData(
|
data class ReceiverData(
|
||||||
val receiver: BroadcastReceiver,
|
val receiver: BroadcastReceiver,
|
||||||
@@ -63,14 +66,15 @@ private const val DEBUG = true
|
|||||||
* Broadcast handling may be asynchronous *without* calling goAsync(), as it's running within sysui
|
* Broadcast handling may be asynchronous *without* calling goAsync(), as it's running within sysui
|
||||||
* and doesn't need to worry about being killed.
|
* and doesn't need to worry about being killed.
|
||||||
*/
|
*/
|
||||||
open class BroadcastDispatcher @JvmOverloads constructor (
|
@SysUISingleton
|
||||||
|
open class BroadcastDispatcher @Inject constructor(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val bgLooper: Looper,
|
@Background private val bgLooper: Looper,
|
||||||
private val bgExecutor: Executor,
|
@Background private val bgExecutor: Executor,
|
||||||
private val dumpManager: DumpManager,
|
private val dumpManager: DumpManager,
|
||||||
private val logger: BroadcastDispatcherLogger,
|
private val logger: BroadcastDispatcherLogger,
|
||||||
private val userTracker: UserTracker,
|
private val userTracker: UserTracker,
|
||||||
private val removalPendingStore: PendingRemovalStore = PendingRemovalStore(logger)
|
private val removalPendingStore: PendingRemovalStore
|
||||||
) : Dumpable {
|
) : Dumpable {
|
||||||
|
|
||||||
// Only modify in BG thread
|
// Only modify in BG thread
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.broadcast;
|
||||||
|
|
||||||
|
import com.android.systemui.CoreStartable;
|
||||||
|
|
||||||
|
import dagger.Binds;
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.multibindings.ClassKey;
|
||||||
|
import dagger.multibindings.IntoMap;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Module
|
||||||
|
public abstract class BroadcastDispatcherModule {
|
||||||
|
/** Ensures BroadcastDispatcher is initialized. */
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@ClassKey(BroadcastDispatcherStartable.class)
|
||||||
|
abstract CoreStartable bindsBroadastDispatcherStartable(BroadcastDispatcherStartable s);
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.broadcast
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import com.android.systemui.CoreStartable
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class BroadcastDispatcherStartable @Inject constructor(
|
||||||
|
context: Context,
|
||||||
|
val broadcastDispatcher: BroadcastDispatcher
|
||||||
|
) : CoreStartable(context) {
|
||||||
|
|
||||||
|
override fun start() {
|
||||||
|
broadcastDispatcher.initialize()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ import com.android.systemui.Dumpable
|
|||||||
import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger
|
import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger
|
||||||
import com.android.systemui.util.indentIfPossible
|
import com.android.systemui.util.indentIfPossible
|
||||||
import java.io.PrintWriter
|
import java.io.PrintWriter
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store information about requests for unregistering receivers from [BroadcastDispatcher], before
|
* Store information about requests for unregistering receivers from [BroadcastDispatcher], before
|
||||||
@@ -15,7 +16,7 @@ import java.io.PrintWriter
|
|||||||
*
|
*
|
||||||
* This helps make unregistering a receiver a *sync* operation.
|
* This helps make unregistering a receiver a *sync* operation.
|
||||||
*/
|
*/
|
||||||
class PendingRemovalStore(
|
class PendingRemovalStore @Inject constructor(
|
||||||
private val logger: BroadcastDispatcherLogger
|
private val logger: BroadcastDispatcherLogger
|
||||||
) : Dumpable {
|
) : Dumpable {
|
||||||
@GuardedBy("pendingRemoval")
|
@GuardedBy("pendingRemoval")
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.dagger;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import com.android.internal.logging.MetricsLogger;
|
||||||
|
import com.android.internal.util.NotificationMessagingUtil;
|
||||||
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
|
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides items imported from com.android.internal.
|
||||||
|
*/
|
||||||
|
@Module
|
||||||
|
public class AndroidInternalsModule {
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@SysUISingleton
|
||||||
|
public LockPatternUtils provideLockPatternUtils(Context context) {
|
||||||
|
return new LockPatternUtils(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@SysUISingleton
|
||||||
|
public MetricsLogger provideMetricsLogger() {
|
||||||
|
return new MetricsLogger();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
public NotificationMessagingUtil provideNotificationMessagingUtil(Context context) {
|
||||||
|
return new NotificationMessagingUtil(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -16,279 +16,24 @@
|
|||||||
|
|
||||||
package com.android.systemui.dagger;
|
package com.android.systemui.dagger;
|
||||||
|
|
||||||
import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
|
import com.android.systemui.broadcast.BroadcastDispatcherModule;
|
||||||
|
import com.android.systemui.theme.ThemeModule;
|
||||||
import android.annotation.Nullable;
|
import com.android.systemui.util.leak.LeakModule;
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.app.INotificationManager;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.om.OverlayManager;
|
|
||||||
import android.hardware.display.AmbientDisplayConfiguration;
|
|
||||||
import android.hardware.display.ColorDisplayManager;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.HandlerThread;
|
|
||||||
import android.os.Looper;
|
|
||||||
import android.os.ServiceManager;
|
|
||||||
import android.os.UserHandle;
|
|
||||||
import android.view.Choreographer;
|
|
||||||
import android.view.IWindowManager;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
|
||||||
import com.android.internal.util.NotificationMessagingUtil;
|
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
|
||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
|
||||||
import com.android.keyguard.ViewMediatorCallback;
|
|
||||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
|
||||||
import com.android.systemui.Prefs;
|
|
||||||
import com.android.systemui.R;
|
|
||||||
import com.android.systemui.accessibility.AccessibilityButtonModeObserver;
|
|
||||||
import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver;
|
|
||||||
import com.android.systemui.accessibility.ModeSwitchesController;
|
|
||||||
import com.android.systemui.accessibility.floatingmenu.AccessibilityFloatingMenuController;
|
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
|
||||||
import com.android.systemui.broadcast.logging.BroadcastDispatcherLogger;
|
|
||||||
import com.android.systemui.dagger.qualifiers.Background;
|
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
|
||||||
import com.android.systemui.doze.AlwaysOnDisplayPolicy;
|
|
||||||
import com.android.systemui.dump.DumpManager;
|
|
||||||
import com.android.systemui.keyguard.KeyguardViewMediator;
|
|
||||||
import com.android.systemui.qs.ReduceBrightColorsController;
|
|
||||||
import com.android.systemui.settings.UserTracker;
|
|
||||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
|
||||||
import com.android.systemui.shared.system.DevicePolicyManagerWrapper;
|
|
||||||
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
|
||||||
import com.android.systemui.shared.system.WindowManagerWrapper;
|
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
|
||||||
import com.android.systemui.statusbar.phone.AutoHideController;
|
|
||||||
import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
|
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController;
|
|
||||||
import com.android.systemui.statusbar.policy.DataSaverController;
|
|
||||||
import com.android.systemui.theme.ThemeOverlayApplier;
|
|
||||||
import com.android.systemui.util.leak.LeakDetector;
|
|
||||||
import com.android.systemui.util.settings.SecureSettings;
|
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
|
|
||||||
import javax.inject.Named;
|
|
||||||
|
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides dependencies for the root component of sysui injection.
|
* @deprecated This module is going away. Don't put anything in here.
|
||||||
*
|
|
||||||
* Only SystemUI owned classes and instances should go in here. Other, framework-owned classes
|
|
||||||
* should go in {@link FrameworkServicesModule}.
|
|
||||||
*
|
|
||||||
* See SystemUI/docs/dagger.md
|
|
||||||
*/
|
*/
|
||||||
@Module(includes = {NightDisplayListenerModule.class})
|
@Deprecated
|
||||||
|
@Module(includes = {
|
||||||
|
AndroidInternalsModule.class,
|
||||||
|
BroadcastDispatcherModule.class,
|
||||||
|
LeakModule.class,
|
||||||
|
NightDisplayListenerModule.class,
|
||||||
|
SharedLibraryModule.class,
|
||||||
|
SettingsLibraryModule.class,
|
||||||
|
ThemeModule.class
|
||||||
|
})
|
||||||
public class DependencyProvider {
|
public class DependencyProvider {
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
@Named(TIME_TICK_HANDLER_NAME)
|
|
||||||
public Handler provideTimeTickHandler() {
|
|
||||||
HandlerThread thread = new HandlerThread("TimeTick");
|
|
||||||
thread.start();
|
|
||||||
return new Handler(thread.getLooper());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@Main
|
|
||||||
public SharedPreferences provideSharePreferences(Context context) {
|
|
||||||
return Prefs.get(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
public AmbientDisplayConfiguration provideAmbientDisplayConfiguration(Context context) {
|
|
||||||
return new AmbientDisplayConfiguration(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
public Handler provideHandler() {
|
|
||||||
return new Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public DataSaverController provideDataSaverController(NetworkController networkController) {
|
|
||||||
return networkController.getDataSaverController();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public INotificationManager provideINotificationManager() {
|
|
||||||
return INotificationManager.Stub.asInterface(
|
|
||||||
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public LayoutInflater providerLayoutInflater(Context context) {
|
|
||||||
return LayoutInflater.from(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public LeakDetector provideLeakDetector(DumpManager dumpManager) {
|
|
||||||
return LeakDetector.create(dumpManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("MissingPermission")
|
|
||||||
@SysUISingleton
|
|
||||||
@Provides
|
|
||||||
@Nullable
|
|
||||||
static LocalBluetoothManager provideLocalBluetoothController(Context context,
|
|
||||||
@Background Handler bgHandler) {
|
|
||||||
return LocalBluetoothManager.create(context, bgHandler, UserHandle.ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public MetricsLogger provideMetricsLogger() {
|
|
||||||
return new MetricsLogger();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@SysUISingleton
|
|
||||||
@Provides
|
|
||||||
static ThemeOverlayApplier provideThemeOverlayManager(Context context,
|
|
||||||
@Background Executor bgExecutor,
|
|
||||||
@Main Executor mainExecutor,
|
|
||||||
OverlayManager overlayManager,
|
|
||||||
DumpManager dumpManager) {
|
|
||||||
return new ThemeOverlayApplier(overlayManager, bgExecutor, mainExecutor,
|
|
||||||
context.getString(R.string.launcher_overlayable_package),
|
|
||||||
context.getString(R.string.themepicker_overlayable_package), dumpManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public AccessibilityFloatingMenuController provideAccessibilityFloatingMenuController(
|
|
||||||
Context context, AccessibilityButtonTargetsObserver accessibilityButtonTargetsObserver,
|
|
||||||
AccessibilityButtonModeObserver accessibilityButtonModeObserver,
|
|
||||||
KeyguardUpdateMonitor keyguardUpdateMonitor) {
|
|
||||||
return new AccessibilityFloatingMenuController(context, accessibilityButtonTargetsObserver,
|
|
||||||
accessibilityButtonModeObserver, keyguardUpdateMonitor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public ConfigurationController provideConfigurationController(Context context) {
|
|
||||||
return new ConfigurationControllerImpl(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@SysUISingleton
|
|
||||||
@Provides
|
|
||||||
public AutoHideController provideAutoHideController(Context context,
|
|
||||||
@Main Handler mainHandler, IWindowManager iWindowManager) {
|
|
||||||
return new AutoHideController(context, mainHandler, iWindowManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@SysUISingleton
|
|
||||||
@Provides
|
|
||||||
public ReduceBrightColorsController provideReduceBrightColorsListener(
|
|
||||||
@Background Handler bgHandler, UserTracker userTracker,
|
|
||||||
ColorDisplayManager colorDisplayManager, SecureSettings secureSettings) {
|
|
||||||
return new ReduceBrightColorsController(userTracker, bgHandler,
|
|
||||||
colorDisplayManager, secureSettings);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public ActivityManagerWrapper provideActivityManagerWrapper() {
|
|
||||||
return ActivityManagerWrapper.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public TaskStackChangeListeners provideTaskStackChangeListeners() {
|
|
||||||
return TaskStackChangeListeners.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Provides and initializes the {#link BroadcastDispatcher} for SystemUI */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public BroadcastDispatcher providesBroadcastDispatcher(
|
|
||||||
Context context,
|
|
||||||
@Background Looper backgroundLooper,
|
|
||||||
@Background Executor backgroundExecutor,
|
|
||||||
DumpManager dumpManager,
|
|
||||||
BroadcastDispatcherLogger logger,
|
|
||||||
UserTracker userTracker
|
|
||||||
) {
|
|
||||||
BroadcastDispatcher bD = new BroadcastDispatcher(context, backgroundLooper,
|
|
||||||
backgroundExecutor, dumpManager, logger, userTracker);
|
|
||||||
bD.initialize();
|
|
||||||
return bD;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public DevicePolicyManagerWrapper provideDevicePolicyManagerWrapper() {
|
|
||||||
return DevicePolicyManagerWrapper.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public LockPatternUtils provideLockPatternUtils(Context context) {
|
|
||||||
return new LockPatternUtils(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public AlwaysOnDisplayPolicy provideAlwaysOnDisplayPolicy(Context context) {
|
|
||||||
return new AlwaysOnDisplayPolicy(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/***/
|
|
||||||
@Provides
|
|
||||||
public NotificationMessagingUtil provideNotificationMessagingUtil(Context context) {
|
|
||||||
return new NotificationMessagingUtil(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
public ViewMediatorCallback providesViewMediatorCallback(KeyguardViewMediator viewMediator) {
|
|
||||||
return viewMediator.getViewMediatorCallback();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
public WindowManagerWrapper providesWindowManagerWrapper() {
|
|
||||||
return WindowManagerWrapper.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public Choreographer providesChoreographer() {
|
|
||||||
return Choreographer.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
@Provides
|
|
||||||
@SysUISingleton
|
|
||||||
public ModeSwitchesController providesModeSwitchesController(Context context) {
|
|
||||||
return new ModeSwitchesController(context);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import android.app.ActivityTaskManager;
|
|||||||
import android.app.AlarmManager;
|
import android.app.AlarmManager;
|
||||||
import android.app.IActivityManager;
|
import android.app.IActivityManager;
|
||||||
import android.app.IActivityTaskManager;
|
import android.app.IActivityTaskManager;
|
||||||
|
import android.app.INotificationManager;
|
||||||
import android.app.IWallpaperManager;
|
import android.app.IWallpaperManager;
|
||||||
import android.app.KeyguardManager;
|
import android.app.KeyguardManager;
|
||||||
import android.app.NotificationManager;
|
import android.app.NotificationManager;
|
||||||
@@ -35,6 +36,7 @@ import android.app.trust.TrustManager;
|
|||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.content.om.OverlayManager;
|
import android.content.om.OverlayManager;
|
||||||
import android.content.pm.IPackageManager;
|
import android.content.pm.IPackageManager;
|
||||||
import android.content.pm.LauncherApps;
|
import android.content.pm.LauncherApps;
|
||||||
@@ -44,6 +46,7 @@ import android.content.res.Resources;
|
|||||||
import android.hardware.SensorManager;
|
import android.hardware.SensorManager;
|
||||||
import android.hardware.SensorPrivacyManager;
|
import android.hardware.SensorPrivacyManager;
|
||||||
import android.hardware.devicestate.DeviceStateManager;
|
import android.hardware.devicestate.DeviceStateManager;
|
||||||
|
import android.hardware.display.AmbientDisplayConfiguration;
|
||||||
import android.hardware.display.ColorDisplayManager;
|
import android.hardware.display.ColorDisplayManager;
|
||||||
import android.hardware.display.DisplayManager;
|
import android.hardware.display.DisplayManager;
|
||||||
import android.hardware.face.FaceManager;
|
import android.hardware.face.FaceManager;
|
||||||
@@ -68,8 +71,10 @@ import android.telecom.TelecomManager;
|
|||||||
import android.telephony.CarrierConfigManager;
|
import android.telephony.CarrierConfigManager;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
import android.view.Choreographer;
|
||||||
import android.view.CrossWindowBlurListeners;
|
import android.view.CrossWindowBlurListeners;
|
||||||
import android.view.IWindowManager;
|
import android.view.IWindowManager;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
import android.view.ViewConfiguration;
|
import android.view.ViewConfiguration;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.WindowManagerGlobal;
|
import android.view.WindowManagerGlobal;
|
||||||
@@ -82,6 +87,7 @@ import com.android.internal.appwidget.IAppWidgetService;
|
|||||||
import com.android.internal.jank.InteractionJankMonitor;
|
import com.android.internal.jank.InteractionJankMonitor;
|
||||||
import com.android.internal.statusbar.IStatusBarService;
|
import com.android.internal.statusbar.IStatusBarService;
|
||||||
import com.android.internal.util.LatencyTracker;
|
import com.android.internal.util.LatencyTracker;
|
||||||
|
import com.android.systemui.Prefs;
|
||||||
import com.android.systemui.dagger.qualifiers.DisplayId;
|
import com.android.systemui.dagger.qualifiers.DisplayId;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.shared.system.PackageManagerWrapper;
|
import com.android.systemui.shared.system.PackageManagerWrapper;
|
||||||
@@ -116,6 +122,12 @@ public class FrameworkServicesModule {
|
|||||||
return context.getSystemService(AlarmManager.class);
|
return context.getSystemService(AlarmManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
public AmbientDisplayConfiguration provideAmbientDisplayConfiguration(Context context) {
|
||||||
|
return new AmbientDisplayConfiguration(context);
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
static AudioManager provideAudioManager(Context context) {
|
static AudioManager provideAudioManager(Context context) {
|
||||||
@@ -128,6 +140,13 @@ public class FrameworkServicesModule {
|
|||||||
return context.getSystemService(CaptioningManager.class);
|
return context.getSystemService(CaptioningManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
public Choreographer providesChoreographer() {
|
||||||
|
return Choreographer.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
static ColorDisplayManager provideColorDisplayManager(Context context) {
|
static ColorDisplayManager provideColorDisplayManager(Context context) {
|
||||||
@@ -293,6 +312,13 @@ public class FrameworkServicesModule {
|
|||||||
return context.getSystemService(LauncherApps.class);
|
return context.getSystemService(LauncherApps.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
public LayoutInflater providerLayoutInflater(Context context) {
|
||||||
|
return LayoutInflater.from(context);
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
static MediaRouter2Manager provideMediaRouter2Manager(Context context) {
|
static MediaRouter2Manager provideMediaRouter2Manager(Context context) {
|
||||||
return MediaRouter2Manager.getInstance(context);
|
return MediaRouter2Manager.getInstance(context);
|
||||||
@@ -315,6 +341,14 @@ public class FrameworkServicesModule {
|
|||||||
return context.getSystemService(NotificationManager.class);
|
return context.getSystemService(NotificationManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
public INotificationManager provideINotificationManager() {
|
||||||
|
return INotificationManager.Stub.asInterface(
|
||||||
|
ServiceManager.getService(Context.NOTIFICATION_SERVICE));
|
||||||
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
static PackageManager providePackageManager(Context context) {
|
static PackageManager providePackageManager(Context context) {
|
||||||
@@ -334,6 +368,13 @@ public class FrameworkServicesModule {
|
|||||||
return context.getSystemService(PowerManager.class);
|
return context.getSystemService(PowerManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@Main
|
||||||
|
public SharedPreferences provideSharePreferences(Context context) {
|
||||||
|
return Prefs.get(context);
|
||||||
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.dagger;
|
||||||
|
|
||||||
|
import android.annotation.Nullable;
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.UserHandle;
|
||||||
|
|
||||||
|
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||||
|
import com.android.systemui.dagger.qualifiers.Background;
|
||||||
|
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Module
|
||||||
|
public class SettingsLibraryModule {
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@SuppressLint("MissingPermission")
|
||||||
|
@SysUISingleton
|
||||||
|
@Provides
|
||||||
|
@Nullable
|
||||||
|
static LocalBluetoothManager provideLocalBluetoothController(Context context,
|
||||||
|
@Background Handler bgHandler) {
|
||||||
|
return LocalBluetoothManager.create(context, bgHandler, UserHandle.ALL);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.dagger;
|
||||||
|
|
||||||
|
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||||
|
import com.android.systemui.shared.system.DevicePolicyManagerWrapper;
|
||||||
|
import com.android.systemui.shared.system.TaskStackChangeListeners;
|
||||||
|
import com.android.systemui.shared.system.WindowManagerWrapper;
|
||||||
|
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Module
|
||||||
|
public class SharedLibraryModule {
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@SysUISingleton
|
||||||
|
public ActivityManagerWrapper provideActivityManagerWrapper() {
|
||||||
|
return ActivityManagerWrapper.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@SysUISingleton
|
||||||
|
public DevicePolicyManagerWrapper provideDevicePolicyManagerWrapper() {
|
||||||
|
return DevicePolicyManagerWrapper.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@SysUISingleton
|
||||||
|
public TaskStackChangeListeners provideTaskStackChangeListeners() {
|
||||||
|
return TaskStackChangeListeners.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
public WindowManagerWrapper providesWindowManagerWrapper() {
|
||||||
|
return WindowManagerWrapper.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -29,11 +29,15 @@ import android.util.KeyValueListParser;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class to store the policy for AOD, which comes from
|
* Class to store the policy for AOD, which comes from
|
||||||
* {@link android.provider.Settings.Global}
|
* {@link android.provider.Settings.Global}
|
||||||
*/
|
*/
|
||||||
|
@SysUISingleton
|
||||||
public class AlwaysOnDisplayPolicy {
|
public class AlwaysOnDisplayPolicy {
|
||||||
public static final String TAG = "AlwaysOnDisplayPolicy";
|
public static final String TAG = "AlwaysOnDisplayPolicy";
|
||||||
|
|
||||||
@@ -130,6 +134,7 @@ public class AlwaysOnDisplayPolicy {
|
|||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private SettingsObserver mSettingsObserver;
|
private SettingsObserver mSettingsObserver;
|
||||||
|
|
||||||
|
@Inject
|
||||||
public AlwaysOnDisplayPolicy(Context context) {
|
public AlwaysOnDisplayPolicy(Context context) {
|
||||||
context = context.getApplicationContext();
|
context = context.getApplicationContext();
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.android.internal.widget.LockPatternUtils;
|
|||||||
import com.android.keyguard.KeyguardDisplayManager;
|
import com.android.keyguard.KeyguardDisplayManager;
|
||||||
import com.android.keyguard.KeyguardUpdateMonitor;
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
import com.android.keyguard.KeyguardViewController;
|
import com.android.keyguard.KeyguardViewController;
|
||||||
|
import com.android.keyguard.ViewMediatorCallback;
|
||||||
import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
|
import com.android.keyguard.dagger.KeyguardQsUserSwitchComponent;
|
||||||
import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
|
import com.android.keyguard.dagger.KeyguardStatusBarViewComponent;
|
||||||
import com.android.keyguard.dagger.KeyguardStatusViewComponent;
|
import com.android.keyguard.dagger.KeyguardStatusViewComponent;
|
||||||
@@ -127,4 +128,10 @@ public class KeyguardModule {
|
|||||||
notificationShadeWindowController,
|
notificationShadeWindowController,
|
||||||
activityLaunchAnimator);
|
activityLaunchAnimator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
public ViewMediatorCallback providesViewMediatorCallback(KeyguardViewMediator viewMediator) {
|
||||||
|
return viewMediator.getViewMediatorCallback();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import android.provider.Settings;
|
|||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.dagger.qualifiers.Background;
|
import com.android.systemui.dagger.qualifiers.Background;
|
||||||
import com.android.systemui.settings.UserTracker;
|
import com.android.systemui.settings.UserTracker;
|
||||||
import com.android.systemui.statusbar.policy.CallbackController;
|
import com.android.systemui.statusbar.policy.CallbackController;
|
||||||
@@ -38,6 +39,7 @@ import javax.inject.Inject;
|
|||||||
/**
|
/**
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
|
@SysUISingleton
|
||||||
public class ReduceBrightColorsController implements
|
public class ReduceBrightColorsController implements
|
||||||
CallbackController<ReduceBrightColorsController.Listener> {
|
CallbackController<ReduceBrightColorsController.Listener> {
|
||||||
private final ColorDisplayManager mManager;
|
private final ColorDisplayManager mManager;
|
||||||
|
|||||||
@@ -23,12 +23,14 @@ import android.util.Log;
|
|||||||
import android.view.IWindowManager;
|
import android.view.IWindowManager;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
import com.android.systemui.dagger.qualifiers.Main;
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
import com.android.systemui.statusbar.AutoHideUiElement;
|
import com.android.systemui.statusbar.AutoHideUiElement;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/** A controller to control all auto-hide things. Also see {@link AutoHideUiElement}. */
|
/** A controller to control all auto-hide things. Also see {@link AutoHideUiElement}. */
|
||||||
|
@SysUISingleton
|
||||||
public class AutoHideController {
|
public class AutoHideController {
|
||||||
private static final String TAG = "AutoHideController";
|
private static final String TAG = "AutoHideController";
|
||||||
private static final long AUTO_HIDE_TIMEOUT_MS = 2250;
|
private static final long AUTO_HIDE_TIMEOUT_MS = 2250;
|
||||||
|
|||||||
@@ -20,11 +20,14 @@ import android.content.res.Configuration
|
|||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
import android.os.LocaleList
|
import android.os.LocaleList
|
||||||
import android.view.View.LAYOUT_DIRECTION_RTL
|
import android.view.View.LAYOUT_DIRECTION_RTL
|
||||||
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import com.android.systemui.statusbar.policy.ConfigurationController
|
import com.android.systemui.statusbar.policy.ConfigurationController
|
||||||
|
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
class ConfigurationControllerImpl(context: Context) : ConfigurationController {
|
@SysUISingleton
|
||||||
|
class ConfigurationControllerImpl @Inject constructor(context: Context) : ConfigurationController {
|
||||||
|
|
||||||
private val listeners: MutableList<ConfigurationController.ConfigurationListener> = ArrayList()
|
private val listeners: MutableList<ConfigurationController.ConfigurationListener> = ArrayList()
|
||||||
private val lastConfig = Configuration()
|
private val lastConfig = Configuration()
|
||||||
|
|||||||
@@ -29,10 +29,13 @@ import com.android.systemui.statusbar.connectivity.AccessPointController;
|
|||||||
import com.android.systemui.statusbar.connectivity.AccessPointControllerImpl;
|
import com.android.systemui.statusbar.connectivity.AccessPointControllerImpl;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkController;
|
import com.android.systemui.statusbar.connectivity.NetworkController;
|
||||||
import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
|
import com.android.systemui.statusbar.connectivity.NetworkControllerImpl;
|
||||||
|
import com.android.systemui.statusbar.phone.ConfigurationControllerImpl;
|
||||||
import com.android.systemui.statusbar.policy.BluetoothController;
|
import com.android.systemui.statusbar.policy.BluetoothController;
|
||||||
import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
|
import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
|
||||||
import com.android.systemui.statusbar.policy.CastController;
|
import com.android.systemui.statusbar.policy.CastController;
|
||||||
import com.android.systemui.statusbar.policy.CastControllerImpl;
|
import com.android.systemui.statusbar.policy.CastControllerImpl;
|
||||||
|
import com.android.systemui.statusbar.policy.ConfigurationController;
|
||||||
|
import com.android.systemui.statusbar.policy.DataSaverController;
|
||||||
import com.android.systemui.statusbar.policy.DeviceControlsController;
|
import com.android.systemui.statusbar.policy.DeviceControlsController;
|
||||||
import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl;
|
import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl;
|
||||||
import com.android.systemui.statusbar.policy.DevicePostureController;
|
import com.android.systemui.statusbar.policy.DevicePostureController;
|
||||||
@@ -83,6 +86,10 @@ public interface StatusBarPolicyModule {
|
|||||||
@Binds
|
@Binds
|
||||||
CastController provideCastController(CastControllerImpl controllerImpl);
|
CastController provideCastController(CastControllerImpl controllerImpl);
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Binds
|
||||||
|
ConfigurationController bindConfigurationController(ConfigurationControllerImpl impl);
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
@Binds
|
@Binds
|
||||||
ExtensionController provideExtensionController(ExtensionControllerImpl controllerImpl);
|
ExtensionController provideExtensionController(ExtensionControllerImpl controllerImpl);
|
||||||
@@ -182,4 +189,11 @@ public interface StatusBarPolicyModule {
|
|||||||
return resources.getStringArray(
|
return resources.getStringArray(
|
||||||
R.array.config_perDeviceStateRotationLockDefaults);
|
R.array.config_perDeviceStateRotationLockDefaults);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@SysUISingleton
|
||||||
|
static DataSaverController provideDataSaverController(NetworkController networkController) {
|
||||||
|
return networkController.getDataSaverController();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.theme;
|
||||||
|
|
||||||
|
import android.content.res.Resources;
|
||||||
|
|
||||||
|
import com.android.systemui.R;
|
||||||
|
import com.android.systemui.dagger.qualifiers.Main;
|
||||||
|
import com.android.systemui.util.concurrency.SysUIConcurrencyModule;
|
||||||
|
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Module(includes = {SysUIConcurrencyModule.class})
|
||||||
|
public class ThemeModule {
|
||||||
|
static final String LAUNCHER_PACKAGE = "theme_launcher_package";
|
||||||
|
static final String THEME_PICKER_PACKAGE = "theme_picker_package";
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@Named(LAUNCHER_PACKAGE)
|
||||||
|
static String provideLauncherPackage(@Main Resources resources) {
|
||||||
|
return resources.getString(R.string.launcher_overlayable_package);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@Named(THEME_PICKER_PACKAGE)
|
||||||
|
static String provideThemePickerPackage(@Main Resources resources) {
|
||||||
|
return resources.getString(R.string.themepicker_overlayable_package);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,6 +31,7 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
|
|
||||||
import com.android.systemui.Dumpable;
|
import com.android.systemui.Dumpable;
|
||||||
import com.android.systemui.dagger.SysUISingleton;
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
|
import com.android.systemui.dagger.qualifiers.Background;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
|
|
||||||
import com.google.android.collect.Lists;
|
import com.google.android.collect.Lists;
|
||||||
@@ -45,6 +46,9 @@ import java.util.Set;
|
|||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Responsible for orchestrating overlays, based on user preferences and other inputs from
|
* Responsible for orchestrating overlays, based on user preferences and other inputs from
|
||||||
* {@link ThemeOverlayController}.
|
* {@link ThemeOverlayController}.
|
||||||
@@ -134,17 +138,17 @@ public class ThemeOverlayApplier implements Dumpable {
|
|||||||
private final Map<String, String> mCategoryToTargetPackage = new ArrayMap<>();
|
private final Map<String, String> mCategoryToTargetPackage = new ArrayMap<>();
|
||||||
private final OverlayManager mOverlayManager;
|
private final OverlayManager mOverlayManager;
|
||||||
private final Executor mBgExecutor;
|
private final Executor mBgExecutor;
|
||||||
private final Executor mMainExecutor;
|
|
||||||
private final String mLauncherPackage;
|
private final String mLauncherPackage;
|
||||||
private final String mThemePickerPackage;
|
private final String mThemePickerPackage;
|
||||||
|
|
||||||
|
@Inject
|
||||||
public ThemeOverlayApplier(OverlayManager overlayManager,
|
public ThemeOverlayApplier(OverlayManager overlayManager,
|
||||||
Executor bgExecutor,
|
@Background Executor bgExecutor,
|
||||||
Executor mainExecutor,
|
@Named(ThemeModule.LAUNCHER_PACKAGE) String launcherPackage,
|
||||||
String launcherPackage, String themePickerPackage, DumpManager dumpManager) {
|
@Named(ThemeModule.THEME_PICKER_PACKAGE) String themePickerPackage,
|
||||||
|
DumpManager dumpManager) {
|
||||||
mOverlayManager = overlayManager;
|
mOverlayManager = overlayManager;
|
||||||
mBgExecutor = bgExecutor;
|
mBgExecutor = bgExecutor;
|
||||||
mMainExecutor = mainExecutor;
|
|
||||||
mLauncherPackage = launcherPackage;
|
mLauncherPackage = launcherPackage;
|
||||||
mThemePickerPackage = themePickerPackage;
|
mThemePickerPackage = themePickerPackage;
|
||||||
mTargetPackageToCategories.put(ANDROID_PACKAGE, Sets.newHashSet(
|
mTargetPackageToCategories.put(ANDROID_PACKAGE, Sets.newHashSet(
|
||||||
|
|||||||
@@ -63,6 +63,15 @@ public abstract class GlobalConcurrencyModule {
|
|||||||
return new Handler(mainLooper);
|
return new Handler(mainLooper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use @Main Handler.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@Provides
|
||||||
|
public static Handler provideHandler() {
|
||||||
|
return new Handler();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provide a Main-Thread Executor.
|
* Provide a Main-Thread Executor.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.systemui.util.concurrency;
|
package com.android.systemui.util.concurrency;
|
||||||
|
|
||||||
|
import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME;
|
||||||
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
@@ -28,6 +30,8 @@ import com.android.systemui.dagger.qualifiers.Main;
|
|||||||
|
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
|
|
||||||
@@ -162,4 +166,14 @@ public abstract class SysUIConcurrencyModule {
|
|||||||
@Background DelayableExecutor executor) {
|
@Background DelayableExecutor executor) {
|
||||||
return new MessageRouterImpl(executor);
|
return new MessageRouterImpl(executor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Provides
|
||||||
|
@SysUISingleton
|
||||||
|
@Named(TIME_TICK_HANDLER_NAME)
|
||||||
|
public static Handler provideTimeTickHandler() {
|
||||||
|
HandlerThread thread = new HandlerThread("TimeTick");
|
||||||
|
thread.start();
|
||||||
|
return new Handler(thread.getLooper());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
package com.android.systemui.util.leak;
|
package com.android.systemui.util.leak;
|
||||||
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.util.IndentingPrintWriter;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.internal.util.IndentingPrintWriter;
|
|
||||||
import com.android.systemui.Dumpable;
|
import com.android.systemui.Dumpable;
|
||||||
import com.android.systemui.dump.DumpManager;
|
import com.android.systemui.dump.DumpManager;
|
||||||
|
|
||||||
@@ -133,17 +133,4 @@ public class LeakDetector implements Dumpable {
|
|||||||
pw.decreaseIndent();
|
pw.decreaseIndent();
|
||||||
pw.println();
|
pw.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LeakDetector create(DumpManager dumpManager) {
|
|
||||||
if (ENABLED) {
|
|
||||||
TrackedCollections collections = new TrackedCollections();
|
|
||||||
return new LeakDetector(
|
|
||||||
collections,
|
|
||||||
new TrackedGarbage(collections),
|
|
||||||
new TrackedObjects(collections),
|
|
||||||
dumpManager);
|
|
||||||
} else {
|
|
||||||
return new LeakDetector(null, null, null, dumpManager);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.util.leak;
|
||||||
|
|
||||||
|
import com.android.systemui.dagger.SysUISingleton;
|
||||||
|
import com.android.systemui.dump.DumpManager;
|
||||||
|
import com.android.systemui.util.Compile;
|
||||||
|
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
@Module
|
||||||
|
public class LeakModule {
|
||||||
|
@Provides
|
||||||
|
@SysUISingleton
|
||||||
|
LeakDetector providesLeakDetector(DumpManager dumpManager, TrackedCollections collections) {
|
||||||
|
if (Compile.IS_DEBUG) {
|
||||||
|
return new LeakDetector(
|
||||||
|
collections,
|
||||||
|
new TrackedGarbage(collections),
|
||||||
|
new TrackedObjects(collections),
|
||||||
|
dumpManager);
|
||||||
|
} else {
|
||||||
|
return new LeakDetector(null, null, null, dumpManager);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,6 +24,8 @@ import java.util.Collection;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tracks the size of collections.
|
* Tracks the size of collections.
|
||||||
*/
|
*/
|
||||||
@@ -34,6 +36,10 @@ public class TrackedCollections {
|
|||||||
private final WeakIdentityHashMap<Collection<?>, CollectionState> mCollections
|
private final WeakIdentityHashMap<Collection<?>, CollectionState> mCollections
|
||||||
= new WeakIdentityHashMap<>();
|
= new WeakIdentityHashMap<>();
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
TrackedCollections() {
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see LeakDetector#trackCollection(Collection, String)
|
* @see LeakDetector#trackCollection(Collection, String)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -37,7 +37,8 @@ class FakeBroadcastDispatcher(
|
|||||||
dumpManager: DumpManager,
|
dumpManager: DumpManager,
|
||||||
logger: BroadcastDispatcherLogger,
|
logger: BroadcastDispatcherLogger,
|
||||||
userTracker: UserTracker
|
userTracker: UserTracker
|
||||||
) : BroadcastDispatcher(context, looper, executor, dumpManager, logger, userTracker) {
|
) : BroadcastDispatcher(
|
||||||
|
context, looper, executor, dumpManager, logger, userTracker, PendingRemovalStore(logger)) {
|
||||||
|
|
||||||
private val registeredReceivers = ArraySet<BroadcastReceiver>()
|
private val registeredReceivers = ArraySet<BroadcastReceiver>()
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
|
|||||||
public void setup() throws Exception {
|
public void setup() throws Exception {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mManager = new ThemeOverlayApplier(mOverlayManager,
|
mManager = new ThemeOverlayApplier(mOverlayManager,
|
||||||
MoreExecutors.directExecutor(), MoreExecutors.directExecutor(),
|
MoreExecutors.directExecutor(),
|
||||||
LAUNCHER_PACKAGE, THEMEPICKER_PACKAGE, mDumpManager) {
|
LAUNCHER_PACKAGE, THEMEPICKER_PACKAGE, mDumpManager) {
|
||||||
@Override
|
@Override
|
||||||
protected OverlayManagerTransaction.Builder getTransactionBuilder() {
|
protected OverlayManagerTransaction.Builder getTransactionBuilder() {
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ public class LeakDetectorTest extends SysuiTestCase {
|
|||||||
private Object mObject;
|
private Object mObject;
|
||||||
private Collection<?> mCollection;
|
private Collection<?> mCollection;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private CollectionWaiter trackObjectWith(Consumer<Object> tracker) {
|
private CollectionWaiter trackObjectWith(Consumer<Object> tracker) {
|
||||||
mObject = new Object();
|
mObject = new Object();
|
||||||
CollectionWaiter collectionWaiter = ReferenceTestUtils.createCollectionWaiter(mObject);
|
CollectionWaiter collectionWaiter = ReferenceTestUtils.createCollectionWaiter(mObject);
|
||||||
@@ -69,7 +71,9 @@ public class LeakDetectorTest extends SysuiTestCase {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() {
|
public void setup() {
|
||||||
mLeakDetector = LeakDetector.create(Mockito.mock(DumpManager.class));
|
TrackedCollections collections = new TrackedCollections();
|
||||||
|
mLeakDetector = new LeakDetector(collections, new TrackedGarbage(collections),
|
||||||
|
new TrackedObjects(collections), Mockito.mock(DumpManager.class));
|
||||||
|
|
||||||
// Note: Do not try to factor out object / collection waiter creation. The optimizer will
|
// Note: Do not try to factor out object / collection waiter creation. The optimizer will
|
||||||
// try and cache accesses to fields and thus create a GC root for the duration of the test
|
// try and cache accesses to fields and thus create a GC root for the duration of the test
|
||||||
|
|||||||
Reference in New Issue
Block a user