Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2c65c28 authored by Anushree Ganjam's avatar Anushree Ganjam Committed by Android (Google) Code Review
Browse files

Merge "Make sandboxContext extend LauncherApplication (4/n)" into main

parents 748c86d0 26a5f65a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.launcher3.dagger;


import com.android.quickstep.dagger.QuickStepModule;
import com.android.quickstep.dagger.QuickstepBaseAppComponent;

import dagger.Component;

@@ -26,7 +27,7 @@ import dagger.Component;
 */
@LauncherAppSingleton
@Component(modules = QuickStepModule.class)
public interface LauncherAppComponent extends LauncherBaseAppComponent {
public interface LauncherAppComponent extends QuickstepBaseAppComponent {
    /** Builder for quickstep LauncherAppComponent. */
    @Component.Builder
    interface Builder extends LauncherBaseAppComponent.Builder {
+1 −3
Original line number Diff line number Diff line
@@ -15,10 +15,8 @@
 */
package com.android.quickstep.dagger;

import com.android.quickstep.logging.LoggingModule;

import dagger.Module;

@Module(includes = {LoggingModule.class})
@Module
public class QuickStepModule {
}
+33 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.quickstep.dagger;

import com.android.launcher3.dagger.LauncherAppComponent;
import com.android.launcher3.dagger.LauncherBaseAppComponent;
import com.android.quickstep.logging.SettingsChangeLogger;

/**
 * Launcher Quickstep base component for Dagger injection.
 *
 * This class is not actually annotated as a Dagger component, since it is not used directly as one.
 * Doing so generates unnecessary code bloat.
 *
 * See {@link LauncherAppComponent} for the one actually used.
 */
public interface QuickstepBaseAppComponent extends LauncherBaseAppComponent {
    SettingsChangeLogger getSettingsChangeLogger();
}
+28 −14
Original line number Diff line number Diff line
@@ -43,16 +43,20 @@ import androidx.annotation.VisibleForTesting;

import com.android.launcher3.LauncherPrefs;
import com.android.launcher3.R;
import com.android.launcher3.dagger.ApplicationContext;
import com.android.launcher3.logging.InstanceId;
import com.android.launcher3.logging.StatsLogManager;
import com.android.launcher3.logging.StatsLogManager.StatsLogger;
import com.android.launcher3.model.DeviceGridState;
import com.android.launcher3.util.DaggerSingletonObject;
import com.android.launcher3.util.DaggerSingletonTracker;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.DisplayController.Info;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.util.ExecutorUtil;
import com.android.launcher3.util.NavigationMode;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.util.SettingsCache;
import com.android.quickstep.dagger.QuickstepBaseAppComponent;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -60,6 +64,8 @@ import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.Optional;

import javax.inject.Inject;

/**
 * Utility class to log launcher settings changes
 */
@@ -70,8 +76,8 @@ public class SettingsChangeLogger implements
    /**
     * Singleton instance
     */
    public static MainThreadInitializedObject<SettingsChangeLogger> INSTANCE =
            new MainThreadInitializedObject<>(SettingsChangeLogger::new);
    public static DaggerSingletonObject<SettingsChangeLogger> INSTANCE =
            new DaggerSingletonObject<>(QuickstepBaseAppComponent::getSettingsChangeLogger);

    private static final String TAG = "SettingsChangeLogger";
    private static final String BOOLEAN_PREF = "SwitchPreference";
@@ -84,25 +90,31 @@ public class SettingsChangeLogger implements
    private StatsLogManager.LauncherEvent mNotificationDotsEvent;
    private StatsLogManager.LauncherEvent mHomeScreenSuggestionEvent;

    private SettingsChangeLogger(Context context) {
        this(context, StatsLogManager.newInstance(context));
    @Inject
    SettingsChangeLogger(@ApplicationContext Context context, DaggerSingletonTracker tracker) {
        this(context, StatsLogManager.newInstance(context), tracker);
    }

    @VisibleForTesting
    SettingsChangeLogger(Context context, StatsLogManager statsLogManager) {
    SettingsChangeLogger(Context context, StatsLogManager statsLogManager,
            DaggerSingletonTracker tracker) {
        mContext = context;
        mStatsLogManager = statsLogManager;
        mLoggablePrefs = loadPrefKeys(context);

        ExecutorUtil.executeSyncOnMainOrFail(() -> {
            DisplayController.INSTANCE.get(context).addChangeListener(this);
            mNavMode = DisplayController.getNavigationMode(context);

            getPrefs(context).registerOnSharedPreferenceChangeListener(this);
            getDevicePrefs(context).registerOnSharedPreferenceChangeListener(this);

        SettingsCache mSettingsCache = SettingsCache.INSTANCE.get(context);
        mSettingsCache.register(NOTIFICATION_BADGING_URI,
            SettingsCache settingsCache = SettingsCache.INSTANCE.get(context);
            settingsCache.register(NOTIFICATION_BADGING_URI,
                    this::onNotificationDotsChanged);
        onNotificationDotsChanged(mSettingsCache.getValue(NOTIFICATION_BADGING_URI));
            onNotificationDotsChanged(settingsCache.getValue(NOTIFICATION_BADGING_URI));
            tracker.addCloseable(this);
        });
    }

    private static ArrayMap<String, LoggablePref> loadPrefKeys(Context context) {
@@ -209,6 +221,8 @@ public class SettingsChangeLogger implements
    public void close() {
        getPrefs(mContext).unregisterOnSharedPreferenceChangeListener(this);
        getDevicePrefs(mContext).unregisterOnSharedPreferenceChangeListener(this);
        SettingsCache settingsCache = SettingsCache.INSTANCE.get(mContext);
        settingsCache.unregister(NOTIFICATION_BADGING_URI, this::onNotificationDotsChanged);
    }

    @VisibleForTesting
+5 −3
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_NAVI
import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_NOTIFICATION_DOT_ENABLED
import com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_THEMED_ICON_DISABLED
import com.android.launcher3.states.RotationHelper.ALLOW_ROTATION_PREFERENCE_KEY
import com.android.launcher3.util.DaggerSingletonTracker
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
@@ -62,6 +63,7 @@ class SettingsChangeLoggerTest {
    @Mock private lateinit var mMockLogger: StatsLogManager.StatsLogger

    @Captor private lateinit var mEventCaptor: ArgumentCaptor<StatsLogManager.EventEnum>
    @Mock private lateinit var mTracker: DaggerSingletonTracker

    private var mDefaultThemedIcons = false
    private var mDefaultAllowRotation = false
@@ -79,7 +81,7 @@ class SettingsChangeLoggerTest {
        // To match the default value of ALLOW_ROTATION
        LauncherPrefs.get(mContext).put(item = ALLOW_ROTATION, value = false)

        mSystemUnderTest = SettingsChangeLogger(mContext, mStatsLogManager)
        mSystemUnderTest = SettingsChangeLogger(mContext, mStatsLogManager, mTracker)
    }

    @After
@@ -90,7 +92,7 @@ class SettingsChangeLoggerTest {

    @Test
    fun loggingPrefs_correctDefaultValue() {
        val systemUnderTest = SettingsChangeLogger(mContext, mStatsLogManager)
        val systemUnderTest = SettingsChangeLogger(mContext, mStatsLogManager, mTracker)

        assertThat(systemUnderTest.loggingPrefs[ALLOW_ROTATION_PREFERENCE_KEY]!!.defaultValue)
            .isFalse()
@@ -117,7 +119,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).logSnapshot(mInstanceId)
        SettingsChangeLogger(mContext, mStatsLogManager, mTracker).logSnapshot(mInstanceId)

        verify(mMockLogger, atLeastOnce()).log(mEventCaptor.capture())
        val capturedEvents = mEventCaptor.allValues
Loading