From 49df29669d18acdb243d2c92ced385d1f2515ffc Mon Sep 17 00:00:00 2001 From: Fengjiang Li Date: Sun, 6 Oct 2024 10:34:52 -0700 Subject: [PATCH] [Dagger] Make ScreenOnTracker provided by DaggerSingletonObject Test: presubmit Bug: 361850561 Flag: NONE - dagger Change-Id: I305ee47f2da92972e9b5effe3c3e02504cd5a3b0 --- .../dagger/LauncherBaseAppComponent.java | 2 ++ .../launcher3/util/ScreenOnTracker.java | 25 +++++++++++++------ .../launcher3/util/ScreenOnTrackerTest.kt | 3 ++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java index 9f6b40b075..d39c5deffe 100644 --- a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java +++ b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java @@ -20,6 +20,7 @@ import android.content.Context; import com.android.launcher3.pm.InstallSessionHelper; import com.android.launcher3.util.DaggerSingletonTracker; +import com.android.launcher3.util.ScreenOnTracker; import dagger.BindsInstance; @@ -34,6 +35,7 @@ import dagger.BindsInstance; public interface LauncherBaseAppComponent { DaggerSingletonTracker getDaggerSingletonTracker(); InstallSessionHelper getInstallSessionHelper(); + ScreenOnTracker getScreenOnTracker(); /** Builder for LauncherBaseAppComponent. */ interface Builder { diff --git a/src/com/android/launcher3/util/ScreenOnTracker.java b/src/com/android/launcher3/util/ScreenOnTracker.java index 8ee799a2dd..3582ad8277 100644 --- a/src/com/android/launcher3/util/ScreenOnTracker.java +++ b/src/com/android/launcher3/util/ScreenOnTracker.java @@ -26,16 +26,22 @@ import android.content.Intent; import androidx.annotation.VisibleForTesting; +import com.android.launcher3.dagger.ApplicationContext; +import com.android.launcher3.dagger.LauncherAppSingleton; +import com.android.launcher3.dagger.LauncherBaseAppComponent; + import java.util.concurrent.CopyOnWriteArrayList; -import java.util.function.Consumer; + +import javax.inject.Inject; /** * Utility class for tracking if the screen is currently on or off */ +@LauncherAppSingleton public class ScreenOnTracker implements SafeCloseable { - public static final MainThreadInitializedObject INSTANCE = - new MainThreadInitializedObject<>(ScreenOnTracker::new); + public static final DaggerSingletonObject INSTANCE = + new DaggerSingletonObject<>(LauncherBaseAppComponent::getScreenOnTracker); private final SimpleBroadcastReceiver mReceiver; private final CopyOnWriteArrayList mListeners = new CopyOnWriteArrayList<>(); @@ -43,23 +49,26 @@ public class ScreenOnTracker implements SafeCloseable { private final Context mContext; private boolean mIsScreenOn; - private ScreenOnTracker(Context context) { + @Inject + ScreenOnTracker(@ApplicationContext Context context, DaggerSingletonTracker tracker) { // Assume that the screen is on to begin with mContext = context; mReceiver = new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, this::onReceive); - init(); + init(tracker); } @VisibleForTesting - ScreenOnTracker(Context context, SimpleBroadcastReceiver receiver) { + ScreenOnTracker(@ApplicationContext Context context, SimpleBroadcastReceiver receiver, + DaggerSingletonTracker tracker) { mContext = context; mReceiver = receiver; - init(); + init(tracker); } - private void init() { + private void init(DaggerSingletonTracker tracker) { mIsScreenOn = true; mReceiver.register(mContext, ACTION_SCREEN_ON, ACTION_SCREEN_OFF, ACTION_USER_PRESENT); + ExecutorUtil.executeSyncOnMainOrFail(() -> tracker.addCloseable(this)); } @Override diff --git a/tests/multivalentTests/src/com/android/launcher3/util/ScreenOnTrackerTest.kt b/tests/multivalentTests/src/com/android/launcher3/util/ScreenOnTrackerTest.kt index 430aad25e7..45cc19c8b2 100644 --- a/tests/multivalentTests/src/com/android/launcher3/util/ScreenOnTrackerTest.kt +++ b/tests/multivalentTests/src/com/android/launcher3/util/ScreenOnTrackerTest.kt @@ -39,13 +39,14 @@ class ScreenOnTrackerTest { @Mock private lateinit var receiver: SimpleBroadcastReceiver @Mock private lateinit var context: Context @Mock private lateinit var listener: ScreenOnTracker.ScreenOnListener + @Mock private lateinit var tracker: DaggerSingletonTracker private lateinit var underTest: ScreenOnTracker @Before fun setup() { MockitoAnnotations.initMocks(this) - underTest = ScreenOnTracker(context, receiver) + underTest = ScreenOnTracker(context, receiver, tracker) } @Test