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

Commit 935a9321 authored by ykhung's avatar ykhung Committed by YUKAI HUNG
Browse files

[B&R] notify BackupManager when app optimization mode is changed

Invoke BackupManager.dataChanged() when app optimization mode is changed
to notify BackupManager to execute Settings agent to backup data in the
next backup session, when performing the partial backup event.

Bug: 192523697
Bug: 197608038
Bug: 194633034
Test: make SettingsRoboTests
Change-Id: I456acc2594d22503763e4ce286435148ae0644a4
parent 0ab0a3af
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6143,7 +6143,7 @@
    <!-- Activity title for battery usage history details [CHAR LIMIT=60] -->
    <string name="history_details_title">History details</string>
    <!-- Preference title for advanced battery usage [CHAR LIMIT=40] -->
    <string name="advanced_battery_preference_title">Battery Usage</string>
    <string name="advanced_battery_preference_title">Battery usage</string>
    <!-- Preference summary for advanced battery usage, for past 24 hours [CHAR LIMIT=40] -->
    <string name="advanced_battery_preference_summary_with_hours">View usage for past 24 hours</string>
    <!-- Preference summary for advanced battery usage, from last full charge [CHAR LIMIT=40] -->
+29 −6
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.UserIdInt;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
import android.app.backup.BackupManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -113,7 +114,12 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
    @VisibleForTesting
    RadioButtonPreference mUnrestrictedPreference;
    @VisibleForTesting
    boolean enableTriState = true;
    boolean mEnableTriState = true;
    @VisibleForTesting
    @BatteryOptimizeUtils.OptimizationMode
    int mOptimizationMode = BatteryOptimizeUtils.MODE_UNKNOWN;
    @VisibleForTesting
    BackupManager mBackupManager;

    private AppButtonsPreferenceController mAppButtonsPreferenceController;
    private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController;
@@ -245,7 +251,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
        super.onCreate(icicle);

        final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME);
        if (enableTriState) {
        if (mEnableTriState) {
            onCreateForTriState(packageName);
        } else {
            mForegroundPreference = findPreference(KEY_PREF_FOREGROUND);
@@ -263,7 +269,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
        super.onResume();

        initHeader();
        if (enableTriState) {
        if (mEnableTriState) {
            initPreferenceForTriState(getContext());
            final String packageName = mBatteryOptimizeUtils.getPackageName();
            FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
@@ -276,6 +282,22 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        notifyBackupManager();
    }

    @VisibleForTesting
    void notifyBackupManager() {
        if (mEnableTriState
                && mOptimizationMode != mBatteryOptimizeUtils.getAppOptimizationMode()) {
            final BackupManager backupManager = mBackupManager != null
                    ? mBackupManager : new BackupManager(getContext());
            backupManager.dataChanged();
        }
    }

    @VisibleForTesting
    void initHeader() {
        final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header);
@@ -303,7 +325,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
            controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info));
        }

        if (enableTriState) {
        if (mEnableTriState) {
            final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
            final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);
            final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null);
@@ -374,7 +396,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements

    @Override
    protected int getPreferenceScreenResId() {
        return enableTriState ? R.xml.power_usage_detail : R.xml.power_usage_detail_legacy;
        return mEnableTriState ? R.xml.power_usage_detail : R.xml.power_usage_detail_legacy;
    }

    @Override
@@ -388,7 +410,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
                (SettingsActivity) getActivity(), this, getSettingsLifecycle(), packageName,
                mState, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
        controllers.add(mAppButtonsPreferenceController);
        if (enableTriState) {
        if (mEnableTriState) {
            controllers.add(new UnrestrictedPreferenceController(context, uid, packageName));
            controllers.add(new OptimizedPreferenceController(context, uid, packageName));
            controllers.add(new RestrictedPreferenceController(context, uid, packageName));
@@ -467,6 +489,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements

        mBatteryOptimizeUtils = new BatteryOptimizeUtils(
                getContext(), getArguments().getInt(EXTRA_UID), packageName);
        mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode();
    }

    private CharSequence getAppActiveTime(
+42 −2
Original line number Diff line number Diff line
@@ -30,9 +30,11 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;

import android.app.AppOpsManager;
import android.app.backup.BackupManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
@@ -123,6 +125,9 @@ public class AdvancedPowerUsageDetailTest {
    private BatteryUtils mBatteryUtils;
    @Mock
    private BatteryOptimizeUtils mBatteryOptimizeUtils;
    @Mock
    private BackupManager mBackupManager;

    private Context mContext;
    private Preference mForegroundPreference;
    private Preference mBackgroundPreference;
@@ -180,9 +185,10 @@ public class AdvancedPowerUsageDetailTest {

        mFragment.mHeaderPreference = mHeaderPreference;
        mFragment.mState = mState;
        mFragment.enableTriState = true;
        mFragment.mEnableTriState = true;
        mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application);
        mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
        mFragment.mBackupManager = mBackupManager;
        mAppEntry.info = mock(ApplicationInfo.class);

        mTestActivity = spy(new SettingsActivity());
@@ -231,7 +237,7 @@ public class AdvancedPowerUsageDetailTest {

    @Test
    public void testGetPreferenceScreenResId_disableTriState_returnLegacyLayout() {
        mFragment.enableTriState = false;
        mFragment.mEnableTriState = false;
        assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.power_usage_detail_legacy);
    }

@@ -780,4 +786,38 @@ public class AdvancedPowerUsageDetailTest {
                    new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, "app label")
                });
    }

    @Test
    public void notifyBackupManager_optimizationModeIsNotChanged_notInvokeDataChanged() {
        final int mode = BatteryOptimizeUtils.MODE_RESTRICTED;
        mFragment.mOptimizationMode = mode;
        when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode);

        mFragment.notifyBackupManager();

        verifyZeroInteractions(mBackupManager);
    }

    @Test
    public void notifyBackupManager_optimizationModeIsChanged_invokeDataChanged() {
        mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED;
        when(mBatteryOptimizeUtils.getAppOptimizationMode())
                .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);

        mFragment.notifyBackupManager();

        verify(mBackupManager).dataChanged();
    }

    @Test
    public void notifyBackupManager_triStateIsNotEnabled_notInvokeDataChanged() {
        mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED;
        when(mBatteryOptimizeUtils.getAppOptimizationMode())
                .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
        mFragment.mEnableTriState = false;

        mFragment.notifyBackupManager();

        verifyZeroInteractions(mBackupManager);
    }
}