Merge "Update App battery usage page and add tests." into tm-qpr-dev am: 50c7cb834e

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/19951824

Change-Id: I680de6c08f5a1533779f4c73ff1bd3f7cd8ad0d3
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2022-09-16 08:37:40 +00:00
committed by Automerger Merge Worker
3 changed files with 100 additions and 10 deletions

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import android.os.Build; import android.os.Build;
import android.util.Log; import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.AppFilter; import com.android.settingslib.applications.ApplicationsState.AppFilter;
@@ -37,14 +38,21 @@ public class AppStateAppBatteryUsageBridge extends AppStateBaseBridge {
private static final String TAG = AppStateAppBatteryUsageBridge.class.getSimpleName(); private static final String TAG = AppStateAppBatteryUsageBridge.class.getSimpleName();
static final boolean DEBUG = Build.IS_DEBUGGABLE; static final boolean DEBUG = Build.IS_DEBUGGABLE;
private final Context mContext; @VisibleForTesting
private final AppOpsManager mAppOpsManager; Context mContext;
private final PowerAllowlistBackend mPowerAllowlistBackend; @VisibleForTesting
AppOpsManager mAppOpsManager;
@VisibleForTesting
PowerAllowlistBackend mPowerAllowlistBackend;
private static final int MODE_UNKNOWN = 0; @VisibleForTesting
private static final int MODE_UNRESTRICTED = 1; static final int MODE_UNKNOWN = 0;
private static final int MODE_OPTIMIZED = 2; @VisibleForTesting
private static final int MODE_RESTRICTED = 3; static final int MODE_UNRESTRICTED = 1;
@VisibleForTesting
static final int MODE_OPTIMIZED = 2;
@VisibleForTesting
static final int MODE_RESTRICTED = 3;
@IntDef( @IntDef(
prefix = {"MODE_"}, prefix = {"MODE_"},
@@ -110,8 +118,9 @@ public class AppStateAppBatteryUsageBridge extends AppStateBaseBridge {
return new AppBatteryUsageDetails(mode); return new AppBatteryUsageDetails(mode);
} }
@VisibleForTesting
@OptimizationMode @OptimizationMode
private static int getAppBatteryUsageDetailsMode(AppEntry entry) { static int getAppBatteryUsageDetailsMode(AppEntry entry) {
if (entry == null || entry.extraInfo == null) { if (entry == null || entry.extraInfo == null) {
return MODE_UNKNOWN; return MODE_UNKNOWN;
} }

View File

@@ -1196,9 +1196,12 @@ public class ManageApplications extends InstrumentedFragment
rebuild(R.id.sort_order_alpha, true); rebuild(R.id.sort_order_alpha, true);
} }
return; return;
} else if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) { }
if (mManageApplications.mListType == LIST_TYPE_BATTERY_OPTIMIZATION) {
logAppBatteryUsage(filterType); logAppBatteryUsage(filterType);
} }
rebuild(); rebuild();
} }
@@ -1673,7 +1676,7 @@ public class ManageApplications extends InstrumentedFragment
holder.setSummary(AppLocaleDetails.getSummary(mContext, entry)); holder.setSummary(AppLocaleDetails.getSummary(mContext, entry));
break; break;
case LIST_TYPE_BATTERY_OPTIMIZATION: case LIST_TYPE_BATTERY_OPTIMIZATION:
holder.setSummary(R.string.app_battery_usage_summary); holder.setSummary(null);
break; break;
default: default:
holder.updateSizeText(entry, mManageApplications.mInvalidSizeStr, mWhichSize); holder.updateSizeText(entry, mManageApplications.mInvalidSizeStr, mWhichSize);

View File

@@ -0,0 +1,78 @@
package com.android.settings.applications;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import android.app.AppOpsManager;
import android.content.Context;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@RunWith(AndroidJUnit4.class)
public final class AppStateAppBatteryUsageBridgeTest {
private static final String TEST_PACKAGE_1 = "com.example.test.pkg1";
private static final String TEST_PACKAGE_2 = "com.example.test.pkg2";
private static final int UID_1 = 12345;
private static final int UID_2 = 7654321;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Context mContext;
@Mock
private AppOpsManager mAppOpsManager;
@Mock
private PowerAllowlistBackend mPowerAllowlistBackend;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void updateExtraInfo_updatesRestricted() {
when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE_1)).thenReturn(false);
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
UID_1, TEST_PACKAGE_1)).thenReturn(AppOpsManager.MODE_IGNORED);
AppStateAppBatteryUsageBridge bridge =
new AppStateAppBatteryUsageBridge(mContext, null, null);
bridge.mAppOpsManager = mAppOpsManager;
bridge.mPowerAllowlistBackend = mPowerAllowlistBackend;
AppEntry entry = new AppEntry(mContext, null, 0);
bridge.updateExtraInfo(entry, TEST_PACKAGE_1, UID_1);
assertThat(entry.extraInfo.getClass())
.isEqualTo(AppStateAppBatteryUsageBridge.AppBatteryUsageDetails.class);
assertThat(AppStateAppBatteryUsageBridge.getAppBatteryUsageDetailsMode(entry))
.isEqualTo(AppStateAppBatteryUsageBridge.MODE_RESTRICTED);
}
@Test
public void updateExtraInfo_updatesUnrestricted() {
when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE_1)).thenReturn(true);
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
UID_2, TEST_PACKAGE_2)).thenReturn(AppOpsManager.MODE_ALLOWED);
AppStateAppBatteryUsageBridge bridge =
new AppStateAppBatteryUsageBridge(mContext, null, null);
bridge.mAppOpsManager = mAppOpsManager;
bridge.mPowerAllowlistBackend = mPowerAllowlistBackend;
AppEntry entry = new AppEntry(mContext, null, 0);
bridge.updateExtraInfo(entry, TEST_PACKAGE_2, UID_2);
assertThat(entry.extraInfo.getClass())
.isEqualTo(AppStateAppBatteryUsageBridge.AppBatteryUsageDetails.class);
assertThat(AppStateAppBatteryUsageBridge.getAppBatteryUsageDetailsMode(entry))
.isEqualTo(AppStateAppBatteryUsageBridge.MODE_UNRESTRICTED);
}
}