diff --git a/quickstep/res/values/config.xml b/quickstep/res/values/config.xml
index 7b678ec934..b442264d46 100644
--- a/quickstep/res/values/config.xml
+++ b/quickstep/res/values/config.xml
@@ -21,9 +21,7 @@
- com.android.launcher3/com.android.quickstep.interaction.GestureSandboxActivity
- com.android.quickstep.logging.StatsLogCompatManager
com.android.quickstep.QuickstepTestInformationHandler
- com.android.launcher3.appprediction.PredictionAppTracker
com.android.quickstep.QuickstepProcessInitializer
com.android.launcher3.secondarydisplay.SecondaryDisplayQuickstepDelegateImpl
com.android.launcher3.taskbar.TaskbarModelCallbacksFactory
diff --git a/quickstep/src/com/android/launcher3/dagger/Modules.kt b/quickstep/src/com/android/launcher3/dagger/Modules.kt
index 7b3504a7cd..2456534020 100644
--- a/quickstep/src/com/android/launcher3/dagger/Modules.kt
+++ b/quickstep/src/com/android/launcher3/dagger/Modules.kt
@@ -18,6 +18,7 @@ package com.android.launcher3.dagger
import com.android.launcher3.icons.LauncherIconProvider
import com.android.launcher3.icons.LauncherIconProviderImpl
+import com.android.launcher3.logging.StatsLogManager.StatsLogManagerFactory
import com.android.launcher3.uioverrides.QuickstepWidgetHolder.QuickstepWidgetHolderFactory
import com.android.launcher3.uioverrides.SystemApiWrapper
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapperImpl
@@ -28,6 +29,7 @@ import com.android.launcher3.util.window.RefreshRateTracker
import com.android.launcher3.util.window.WindowManagerProxy
import com.android.launcher3.widget.LauncherWidgetHolder.WidgetHolderFactory
import com.android.quickstep.InstantAppResolverImpl
+import com.android.quickstep.logging.StatsLogCompatManager.StatsLogCompatManagerFactory
import com.android.quickstep.util.ChoreographerFrameRateTracker
import com.android.quickstep.util.GestureExclusionManager
import com.android.quickstep.util.SystemWindowManagerProxy
@@ -44,6 +46,11 @@ abstract class WindowManagerProxyModule {
@Module
abstract class ApiWrapperModule {
+ @Binds
+ abstract fun bindStatsLogManagerFactory(
+ impl: StatsLogCompatManagerFactory
+ ): StatsLogManagerFactory
+
@Binds abstract fun bindApiWrapper(systemApiWrapper: SystemApiWrapper): ApiWrapper
@Binds
diff --git a/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java b/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java
index 190eb5423c..c9d1207a07 100644
--- a/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java
+++ b/quickstep/src/com/android/quickstep/logging/SettingsChangeLogger.java
@@ -107,19 +107,10 @@ public class SettingsChangeLogger implements
SettingsChangeLogger(@ApplicationContext Context context,
DaggerSingletonTracker tracker,
DisplayController displayController,
- SettingsCache settingsCache) {
- this(context, StatsLogManager.newInstance(context), tracker, displayController,
- settingsCache);
- }
-
- @VisibleForTesting
- SettingsChangeLogger(@ApplicationContext Context context,
- StatsLogManager statsLogManager,
- DaggerSingletonTracker tracker,
- DisplayController displayController,
- SettingsCache settingsCache) {
+ SettingsCache settingsCache,
+ StatsLogManager.StatsLogManagerFactory factory) {
mContext = context;
- mStatsLogManager = statsLogManager;
+ mStatsLogManager = factory.create(context);
mLoggablePrefs = loadPrefKeys(context);
displayController.addChangeListener(this);
diff --git a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
index 58e54cffbf..5c2aff6585 100644
--- a/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
+++ b/quickstep/src/com/android/quickstep/logging/StatsLogCompatManager.java
@@ -82,6 +82,8 @@ import java.util.Optional;
import java.util.OptionalInt;
import java.util.concurrent.CopyOnWriteArrayList;
+import javax.inject.Inject;
+
/**
* This class calls StatsLog compile time generated methods.
*
@@ -121,10 +123,27 @@ public class StatsLogCompatManager extends StatsLogManager {
public static final CopyOnWriteArrayList LOGS_CONSUMER =
new CopyOnWriteArrayList<>();
- public StatsLogCompatManager(Context context) {
+ private StatsLogCompatManager(Context context) {
super(context);
}
+ /**
+ * This class is purely used to support dagger bindings to be overridden in launcher variants.
+ * Very similar to {@link dagger.assisted.AssistedFactory}. But
+ * {@link dagger.assisted.AssistedFactory} cannot be overridden and this makes dagger binding
+ * difficult.
+ */
+ public static class StatsLogCompatManagerFactory extends StatsLogManagerFactory {
+ @Inject
+ StatsLogCompatManagerFactory() {
+ super();
+ }
+
+ public StatsLogManager create(Context context) {
+ return new StatsLogCompatManager(context);
+ }
+ }
+
@Override
protected StatsLogger createLogger() {
return new StatsCompatLogger(mContext, mActivityContext);
diff --git a/quickstep/tests/multivalentTests/src/com/android/quickstep/logging/SettingsChangeLoggerTest.kt b/quickstep/tests/multivalentTests/src/com/android/quickstep/logging/SettingsChangeLoggerTest.kt
index 08b1ffaf9a..9c655a70cd 100644
--- a/quickstep/tests/multivalentTests/src/com/android/quickstep/logging/SettingsChangeLoggerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/quickstep/logging/SettingsChangeLoggerTest.kt
@@ -60,6 +60,8 @@ class SettingsChangeLoggerTest {
private lateinit var mSystemUnderTest: SettingsChangeLogger
+ @Mock private lateinit var mStatsLogFactory: StatsLogManager.StatsLogManagerFactory
+
@Mock private lateinit var mStatsLogManager: StatsLogManager
@Mock private lateinit var mMockLogger: StatsLogManager.StatsLogger
@@ -78,7 +80,7 @@ class SettingsChangeLoggerTest {
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
-
+ whenever(mStatsLogFactory.create(mContext)).doReturn(mStatsLogManager)
whenever(mStatsLogManager.logger()).doReturn(mMockLogger)
whenever(mStatsLogManager.logger().withInstanceId(any())).doReturn(mMockLogger)
mDefaultThemedIcons = themeManager.isMonoThemeEnabled
@@ -91,10 +93,10 @@ class SettingsChangeLoggerTest {
mSystemUnderTest =
SettingsChangeLogger(
mContext,
- mStatsLogManager,
mTracker,
displayController,
settingsCache,
+ mStatsLogFactory,
)
}
@@ -109,10 +111,10 @@ class SettingsChangeLoggerTest {
val systemUnderTest =
SettingsChangeLogger(
mContext,
- mStatsLogManager,
mTracker,
displayController,
settingsCache,
+ mStatsLogFactory,
)
assertThat(systemUnderTest.loggingPrefs[ALLOW_ROTATION_PREFERENCE_KEY]!!.defaultValue)
@@ -139,7 +141,7 @@ class SettingsChangeLoggerTest {
LauncherPrefs.get(mContext).put(item = ALLOW_ROTATION, value = true)
// This a new object so the values of mLoggablePrefs will be different
- SettingsChangeLogger(mContext, mStatsLogManager, mTracker, displayController, settingsCache)
+ SettingsChangeLogger(mContext, mTracker, displayController, settingsCache, mStatsLogFactory)
.logSnapshot(mInstanceId)
verify(mMockLogger, atLeastOnce()).log(mEventCaptor.capture())
diff --git a/res/values/config.xml b/res/values/config.xml
index 98d3e86388..f8c95ab974 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -62,9 +62,7 @@
-
-
diff --git a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java
index 519c2bf8db..a9bad2049d 100644
--- a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java
+++ b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java
@@ -27,6 +27,8 @@ import com.android.launcher3.RemoveAnimationSettingsTracker;
import com.android.launcher3.graphics.GridCustomizationsProxy;
import com.android.launcher3.graphics.ThemeManager;
import com.android.launcher3.icons.LauncherIcons.IconPool;
+import com.android.launcher3.logging.DumpManager;
+import com.android.launcher3.logging.StatsLogManager;
import com.android.launcher3.model.ItemInstallQueue;
import com.android.launcher3.model.LoaderCursor.LoaderCursorFactory;
import com.android.launcher3.pm.InstallSessionHelper;
@@ -34,7 +36,6 @@ import com.android.launcher3.pm.UserCache;
import com.android.launcher3.util.ApiWrapper;
import com.android.launcher3.util.DaggerSingletonTracker;
import com.android.launcher3.util.DisplayController;
-import com.android.launcher3.logging.DumpManager;
import com.android.launcher3.util.DynamicResource;
import com.android.launcher3.util.InstantAppResolver;
import com.android.launcher3.util.LockedUserState;
@@ -93,8 +94,8 @@ public interface LauncherBaseAppComponent {
WidgetHolderFactory getWidgetHolderFactory();
RefreshRateTracker getFrameRateProvider();
InstantAppResolver getInstantAppResolver();
-
DumpManager getDumpManager();
+ StatsLogManager.StatsLogManagerFactory getStatsLogManagerFactory();
/** Builder for LauncherBaseAppComponent. */
interface Builder {
diff --git a/src/com/android/launcher3/logging/StatsLogManager.java b/src/com/android/launcher3/logging/StatsLogManager.java
index 8e18a76f60..27bc3a3f73 100644
--- a/src/com/android/launcher3/logging/StatsLogManager.java
+++ b/src/com/android/launcher3/logging/StatsLogManager.java
@@ -28,14 +28,16 @@ import androidx.annotation.Nullable;
import androidx.slice.SliceItem;
import com.android.launcher3.R;
+import com.android.launcher3.dagger.LauncherComponentProvider;
import com.android.launcher3.logger.LauncherAtom;
import com.android.launcher3.logger.LauncherAtom.ContainerInfo;
import com.android.launcher3.logger.LauncherAtom.FromState;
import com.android.launcher3.logger.LauncherAtom.ToState;
import com.android.launcher3.model.data.ItemInfo;
-import com.android.launcher3.util.ResourceBasedOverride;
import com.android.launcher3.views.ActivityContext;
+import javax.inject.Inject;
+
/**
* Handles the user event logging in R+.
*
@@ -45,7 +47,7 @@ import com.android.launcher3.views.ActivityContext;
* Actual call happens only for Launcher variant that implements QuickStep.
*
*/
-public class StatsLogManager implements ResourceBasedOverride {
+public class StatsLogManager {
public static final int LAUNCHER_STATE_UNSPECIFIED = 0;
public static final int LAUNCHER_STATE_BACKGROUND = 1;
@@ -62,11 +64,28 @@ public class StatsLogManager implements ResourceBasedOverride {
private KeyboardStateManager mKeyboardStateManager;
private InstanceId mInstanceId;
- public StatsLogManager(@NonNull Context context) {
+
+ protected StatsLogManager(@NonNull Context context) {
mContext = context;
mActivityContext = ActivityContext.lookupContextNoThrow(context);
}
+ /**
+ * This class is purely used to support dagger bindings to be overridden in launcher variants.
+ * Very similar to {@link dagger.assisted.AssistedFactory}. But
+ * {@link dagger.assisted.AssistedFactory} cannot be overridden and this makes dagger binding
+ * difficult.
+ */
+ public static class StatsLogManagerFactory {
+ @Inject
+ public StatsLogManagerFactory() {
+ }
+
+ public StatsLogManager create(Context context) {
+ return new StatsLogManager(context);
+ }
+ }
+
/**
* Returns event enum based on the two state transition information when swipe
* gesture happens(to be removed during UserEventDispatcher cleanup).
@@ -1356,7 +1375,6 @@ public class StatsLogManager implements ResourceBasedOverride {
* Creates a new instance of {@link StatsLogManager} based on provided context.
*/
public static StatsLogManager newInstance(Context context) {
- return Overrides.getObject(
- StatsLogManager.class, context, R.string.stats_log_manager_class);
+ return LauncherComponentProvider.get(context).getStatsLogManagerFactory().create(context);
}
}