diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index dfaee2e6df5..f4bd9ef69d1 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -271,6 +271,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements initHeader(); if (mEnableTriState) { + mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode(); initPreferenceForTriState(getContext()); final String packageName = mBatteryOptimizeUtils.getPackageName(); FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider() @@ -287,8 +288,11 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements public void onPause() { super.onPause(); if (mEnableTriState) { - Log.d(TAG, "Leave with mode: " + getSelectedPreference()); - mBatteryOptimizeUtils.setAppUsageState(getSelectedPreference()); + final int selectedPreference = getSelectedPreference(); + + logMetricCategory(selectedPreference); + mBatteryOptimizeUtils.setAppUsageState(selectedPreference); + Log.d(TAG, "Leave with mode: " + selectedPreference); } } @@ -461,26 +465,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements updatePreferenceState(mUnrestrictedPreference, selectedKey); updatePreferenceState(mOptimizePreference, selectedKey); updatePreferenceState(mRestrictedPreference, selectedKey); - - // Logs metric. - int metricCategory = 0; - if (selectedKey.equals(mUnrestrictedPreference.getKey())) { - metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_UNRESTRICTED; - } else if (selectedKey.equals(mOptimizePreference.getKey())) { - metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED; - } else if (selectedKey.equals(mRestrictedPreference.getKey())) { - metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_RESTRICTED; - } - if (metricCategory != 0) { - FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider() - .action( - getContext(), - metricCategory, - new Pair(ConvertUtils.METRIC_KEY_PACKAGE, - mBatteryOptimizeUtils.getPackageName()), - new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, - getArguments().getString(EXTRA_POWER_USAGE_PERCENT))); - } } private void updatePreferenceState(SelectorWithWidgetPreference preference, @@ -488,6 +472,36 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements preference.setChecked(selectedKey.equals(preference.getKey())); } + private void logMetricCategory(int selectedKey) { + if (selectedKey == mOptimizationMode) { + return; + } + + int metricCategory = 0; + switch (selectedKey) { + case BatteryOptimizeUtils.MODE_UNRESTRICTED: + metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_UNRESTRICTED; + break; + case BatteryOptimizeUtils.MODE_OPTIMIZED: + metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED; + break; + case BatteryOptimizeUtils.MODE_RESTRICTED: + metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_RESTRICTED; + break; + } + + if (metricCategory != 0) { + FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider() + .action( + getContext(), + metricCategory, + new Pair(ConvertUtils.METRIC_KEY_PACKAGE, + mBatteryOptimizeUtils.getPackageName()), + new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, + getArguments().getString(EXTRA_POWER_USAGE_PERCENT))); + } + } + private void onCreateForTriState(String packageName) { mUnrestrictedPreference = findPreference(KEY_PREF_UNRESTRICTED); mOptimizePreference = findPreference(KEY_PREF_OPTIMIZED); @@ -499,7 +513,6 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements mBatteryOptimizeUtils = new BatteryOptimizeUtils( getContext(), getArguments().getInt(EXTRA_UID), packageName); - mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode(); } private int getSelectedPreference() { diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java index 2f78de350d3..f7bc81a87ac 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java @@ -792,14 +792,39 @@ public class AdvancedPowerUsageDetailTest { assertThat(mOptimizePreference.isChecked()).isTrue(); assertThat(mRestrictedPreference.isChecked()).isFalse(); assertThat(mUnrestrictedPreference.isChecked()).isFalse(); + } + + @Test + public void testOnPause_optimizationModeChanged_logPreference() { + final int mode = BatteryOptimizeUtils.MODE_RESTRICTED; + mFragment.mOptimizationMode = mode; + when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode); + mOptimizePreference.setKey(KEY_PREF_OPTIMIZED); + + mFragment.onRadioButtonClicked(mOptimizePreference); + mFragment.onPause(); + verify(mMetricsFeatureProvider) - .action( - mContext, - SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED, - (Pair[]) new Pair[] { - new Pair(ConvertUtils.METRIC_KEY_PACKAGE, null), - new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, "app label") - }); + .action( + mContext, + SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED, + (Pair[]) new Pair[] { + new Pair(ConvertUtils.METRIC_KEY_PACKAGE, null), + new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, "app label") + }); + } + + @Test + public void testOnPause_optimizationModeIsNotChanged_notInvokeLogging() { + final int mode = BatteryOptimizeUtils.MODE_OPTIMIZED; + mFragment.mOptimizationMode = mode; + when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode); + mOptimizePreference.setKey(KEY_PREF_OPTIMIZED); + + mFragment.onRadioButtonClicked(mOptimizePreference); + mFragment.onPause(); + + verifyZeroInteractions(mMetricsFeatureProvider); } @Test