Update App battery usage page and add tests.
- Add tests - Remove duplicated "Set battery usage for apps" text - Clean up some code Screenshot: https://screenshot.googleplex.com/8LHhyxFA6X4ZFkT.png Test: make RunSettingsRoboTests -j40 Bug: 244995036 Change-Id: Iaac9b0af10f541100e91b10affacf3307bd5edca
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user