From 06fa244255d51612c3dff6f27867a761821bbd6e Mon Sep 17 00:00:00 2001 From: mxyyiyi Date: Thu, 21 Dec 2023 17:22:27 +0800 Subject: [PATCH] Update action log metircs of app optimize mode. Bug: 317329360 Test: manual Change-Id: Id4cd610a5bcc7988ecbd4545f5ef77a5253aac33 --- .../fuelgauge/AdvancedPowerUsageDetail.java | 4 +- .../fuelgauge/PowerBackgroundUsageDetail.java | 8 ++- .../AdvancedPowerUsageDetailTest.java | 4 +- .../PowerBackgroundUsageDetailTest.java | 63 ++++++++++++++++++- 4 files changed, 71 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index 23680d9bf66..3df6b1a9ef7 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -489,9 +489,9 @@ public class AdvancedPowerUsageDetail extends DashboardFragment FeatureFactory.getFeatureFactory() .getMetricsFeatureProvider() .action( - /* attribution */ SettingsEnums.OPEN_APP_BATTERY_USAGE, + /* attribution */ SettingsEnums.LEAVE_APP_BATTERY_USAGE, /* action */ finalMetricCategory, - /* pageId */ SettingsEnums.OPEN_APP_BATTERY_USAGE, + /* pageId */ SettingsEnums.FUELGAUGE_POWER_USAGE_DETAIL, packageName, getArguments().getInt(EXTRA_POWER_USAGE_AMOUNT)); }); diff --git a/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java b/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java index 28ae04fc721..2bf4d96fe52 100644 --- a/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java +++ b/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java @@ -119,7 +119,7 @@ public class PowerBackgroundUsageDetail extends DashboardFragment .getMetricsFeatureProvider() .action( getContext(), - SettingsEnums.OPEN_APP_BATTERY_USAGE, + SettingsEnums.OPEN_POWER_USAGE_MANAGE_BACKGROUND, packageName); }); mLogStringBuilder = new StringBuilder("onResume mode = ").append(mOptimizationMode); @@ -338,9 +338,11 @@ public class PowerBackgroundUsageDetail extends DashboardFragment FeatureFactory.getFeatureFactory() .getMetricsFeatureProvider() .action( - /* attribution */ SettingsEnums.OPEN_APP_BATTERY_USAGE, + /* attribution */ SettingsEnums + .LEAVE_POWER_USAGE_MANAGE_BACKGROUND, /* action */ finalMetricCategory, - /* pageId */ SettingsEnums.OPEN_APP_BATTERY_USAGE, + /* pageId */ SettingsEnums + .FUELGAUGE_POWER_USAGE_MANAGE_BACKGROUND, packageName, getArguments().getInt(EXTRA_POWER_USAGE_AMOUNT)); }); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java index 2f83da6f618..c6a9a718d69 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java @@ -413,9 +413,9 @@ public class AdvancedPowerUsageDetailTest { TimeUnit.SECONDS.sleep(1); verify(mMetricsFeatureProvider) .action( - SettingsEnums.OPEN_APP_BATTERY_USAGE, + SettingsEnums.LEAVE_APP_BATTERY_USAGE, SettingsEnums.ACTION_APP_BATTERY_USAGE_ALLOW_BACKGROUND, - SettingsEnums.OPEN_APP_BATTERY_USAGE, + SettingsEnums.FUELGAUGE_POWER_USAGE_DETAIL, packageName, /* consumed battery */ 0); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetailTest.java index 3b80efbdecf..6edbafacf9a 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetailTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetailTest.java @@ -22,19 +22,23 @@ import static com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.A import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doAnswer; 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.verifyNoInteractions; 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; import android.content.pm.ApplicationInfo; +import android.content.pm.InstallSourceInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.os.Bundle; @@ -46,12 +50,14 @@ import androidx.loader.app.LoaderManager; import com.android.settings.SettingsActivity; import com.android.settings.fuelgauge.batteryusage.BatteryEntry; +import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowActivityManager; import com.android.settings.testutils.shadow.ShadowEntityHeaderController; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.instantapps.InstantAppDataProvider; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.widget.MainSwitchPreference; @@ -71,6 +77,8 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; +import java.util.concurrent.TimeUnit; + @RunWith(RobolectricTestRunner.class) @Config( shadows = { @@ -91,6 +99,7 @@ public class PowerBackgroundUsageDetailTest { private PowerBackgroundUsageDetail mFragment; private FooterPreference mFooterPreference; private MainSwitchPreference mMainSwitchPreference; + private MetricsFeatureProvider mMetricsFeatureProvider; private SelectorWithWidgetPreference mOptimizePreference; private SelectorWithWidgetPreference mUnrestrictedPreference; private SettingsActivity mTestActivity; @@ -110,15 +119,22 @@ public class PowerBackgroundUsageDetailTest { @Mock private PackageManager mPackageManager; @Mock private AppOpsManager mAppOpsManager; @Mock private CompoundButton mMockSwitch; + @Mock private InstallSourceInfo mInstallSourceInfo; @Before - public void setUp() { + public void setUp() throws Exception { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); when(mContext.getPackageName()).thenReturn("foo"); + when(mContext.getPackageManager()).thenReturn(mPackageManager); + when(mPackageManager.getInstallSourceInfo(anyString())).thenReturn(mInstallSourceInfo); + + final FakeFeatureFactory fakeFeatureFactory = FakeFeatureFactory.setupForTest(); + mMetricsFeatureProvider = fakeFeatureFactory.metricsFeatureProvider; mFragment = spy(new PowerBackgroundUsageDetail()); + mFragment.mLogStringBuilder = new StringBuilder(); doReturn(mContext).when(mFragment).getContext(); doReturn(mActivity).when(mFragment).getActivity(); doReturn(SUMMARY).when(mFragment).getString(anyInt()); @@ -285,4 +301,49 @@ public class PowerBackgroundUsageDetailTest { assertThat(mFragment.getSelectedPreference()).isEqualTo(optimizedMode); verify(mBatteryOptimizeUtils).setAppUsageState(optimizedMode, Action.APPLY); } + + @Test + public void onPause_optimizationModeChanged_logPreference() throws Exception { + final String packageName = "testPackageName"; + final int restrictedMode = BatteryOptimizeUtils.MODE_RESTRICTED; + final int optimizedMode = BatteryOptimizeUtils.MODE_OPTIMIZED; + mFragment.mOptimizationMode = restrictedMode; + when(mBatteryOptimizeUtils.getPackageName()).thenReturn(packageName); + when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn("com.android.vending"); + + mFragment.onCheckedChanged(mMockSwitch, /* isChecked= */ true); + verify(mBatteryOptimizeUtils).setAppUsageState(optimizedMode, Action.APPLY); + when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(optimizedMode); + mFragment.onPause(); + + TimeUnit.SECONDS.sleep(1); + verify(mMetricsFeatureProvider) + .action( + SettingsEnums.LEAVE_POWER_USAGE_MANAGE_BACKGROUND, + SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED, + SettingsEnums.FUELGAUGE_POWER_USAGE_MANAGE_BACKGROUND, + packageName, + /* consumed battery */ 0); + } + + @Test + public void onPause_optimizationModeIsNotChanged_notInvokeLogging() throws Exception { + final String packageName = "testPackageName"; + final int restrictedMode = BatteryOptimizeUtils.MODE_RESTRICTED; + final int optimizedMode = BatteryOptimizeUtils.MODE_OPTIMIZED; + mFragment.mOptimizationMode = restrictedMode; + when(mBatteryOptimizeUtils.getPackageName()).thenReturn(packageName); + when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn("com.android.vending"); + + mFragment.onCheckedChanged(mMockSwitch, /* isChecked= */ true); + verify(mBatteryOptimizeUtils).setAppUsageState(optimizedMode, Action.APPLY); + when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(optimizedMode); + mFragment.onCheckedChanged(mMockSwitch, /* isChecked= */ false); + verify(mBatteryOptimizeUtils).setAppUsageState(restrictedMode, Action.APPLY); + when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(restrictedMode); + mFragment.onPause(); + + TimeUnit.SECONDS.sleep(1); + verifyNoInteractions(mMetricsFeatureProvider); + } }