diff --git a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java index 0a50e8bc9e..9f6b40b075 100644 --- a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java +++ b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java @@ -18,6 +18,7 @@ package com.android.launcher3.dagger; import android.content.Context; +import com.android.launcher3.pm.InstallSessionHelper; import com.android.launcher3.util.DaggerSingletonTracker; import dagger.BindsInstance; @@ -32,6 +33,8 @@ import dagger.BindsInstance; */ public interface LauncherBaseAppComponent { DaggerSingletonTracker getDaggerSingletonTracker(); + InstallSessionHelper getInstallSessionHelper(); + /** Builder for LauncherBaseAppComponent. */ interface Builder { @BindsInstance Builder appContext(@ApplicationContext Context context); diff --git a/src/com/android/launcher3/pm/InstallSessionHelper.java b/src/com/android/launcher3/pm/InstallSessionHelper.java index 124907f181..f36f595545 100644 --- a/src/com/android/launcher3/pm/InstallSessionHelper.java +++ b/src/com/android/launcher3/pm/InstallSessionHelper.java @@ -31,12 +31,17 @@ import androidx.annotation.WorkerThread; import com.android.launcher3.Flags; import com.android.launcher3.LauncherPrefs; import com.android.launcher3.SessionCommitReceiver; +import com.android.launcher3.dagger.ApplicationContext; +import com.android.launcher3.dagger.LauncherAppSingleton; +import com.android.launcher3.dagger.LauncherBaseAppComponent; import com.android.launcher3.logging.FileLog; import com.android.launcher3.model.ItemInstallQueue; import com.android.launcher3.util.ApplicationInfoWrapper; +import com.android.launcher3.util.DaggerSingletonObject; +import com.android.launcher3.util.DaggerSingletonTracker; +import com.android.launcher3.util.ExecutorUtil; import com.android.launcher3.util.IntArray; import com.android.launcher3.util.IntSet; -import com.android.launcher3.util.MainThreadInitializedObject; import com.android.launcher3.util.PackageUserKey; import com.android.launcher3.util.Preconditions; import com.android.launcher3.util.SafeCloseable; @@ -47,10 +52,13 @@ import java.util.Iterator; import java.util.List; import java.util.Objects; +import javax.inject.Inject; + /** * Utility class to tracking install sessions */ @SuppressWarnings("NewApi") +@LauncherAppSingleton public class InstallSessionHelper implements SafeCloseable { @NonNull @@ -64,8 +72,8 @@ public class InstallSessionHelper implements SafeCloseable { private static final boolean DEBUG = false; @NonNull - public static final MainThreadInitializedObject INSTANCE = - new MainThreadInitializedObject<>(InstallSessionHelper::new); + public static final DaggerSingletonObject INSTANCE = + new DaggerSingletonObject<>(LauncherBaseAppComponent::getInstallSessionHelper); @Nullable private final LauncherApps mLauncherApps; @@ -82,10 +90,13 @@ public class InstallSessionHelper implements SafeCloseable { @Nullable private IntSet mPromiseIconIds; - public InstallSessionHelper(@NonNull final Context context) { + @Inject + public InstallSessionHelper(@NonNull @ApplicationContext final Context context, + DaggerSingletonTracker tracker) { mInstaller = context.getPackageManager().getPackageInstaller(); mAppContext = context.getApplicationContext(); mLauncherApps = context.getSystemService(LauncherApps.class); + ExecutorUtil.executeSyncOnMainOrFail(() -> tracker.addCloseable(this)); } @Override diff --git a/tests/src/com/android/launcher3/pm/InstallSessionHelperTest.kt b/tests/src/com/android/launcher3/pm/InstallSessionHelperTest.kt index ca2ef42124..a991981362 100644 --- a/tests/src/com/android/launcher3/pm/InstallSessionHelperTest.kt +++ b/tests/src/com/android/launcher3/pm/InstallSessionHelperTest.kt @@ -28,6 +28,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.launcher3.LauncherPrefs import com.android.launcher3.LauncherPrefs.Companion.PROMISE_ICON_IDS +import com.android.launcher3.util.DaggerSingletonTracker import com.android.launcher3.util.Executors.MODEL_EXECUTOR import com.android.launcher3.util.IntArray import com.android.launcher3.util.LauncherModelHelper @@ -53,6 +54,7 @@ class InstallSessionHelperTest { private val expectedAppPackage = "expectedAppPackage" private val expectedInstallerPackage = "expectedInstallerPackage" private val mockPackageInstaller: PackageInstaller = mock() + private val mTracker: DaggerSingletonTracker = mock() private lateinit var installSessionHelper: InstallSessionHelper private lateinit var launcherApps: LauncherApps @@ -62,7 +64,7 @@ class InstallSessionHelperTest { whenever(packageManager.packageInstaller).thenReturn(mockPackageInstaller) whenever(sandboxContext.packageName).thenReturn(expectedInstallerPackage) launcherApps = sandboxContext.spyService(LauncherApps::class.java) - installSessionHelper = InstallSessionHelper(sandboxContext) + installSessionHelper = InstallSessionHelper(sandboxContext, mTracker) } @Test