1 package com.android.settings.applications; 2 3 import static com.google.common.truth.Truth.assertThat; 4 5 import static org.mockito.Mockito.when; 6 7 import android.app.AppOpsManager; 8 import android.content.Context; 9 10 import androidx.test.ext.junit.runners.AndroidJUnit4; 11 12 import com.android.settingslib.applications.ApplicationsState.AppEntry; 13 import com.android.settingslib.fuelgauge.PowerAllowlistBackend; 14 15 import org.junit.Before; 16 import org.junit.Test; 17 import org.junit.runner.RunWith; 18 import org.mockito.Answers; 19 import org.mockito.Mock; 20 import org.mockito.MockitoAnnotations; 21 22 @RunWith(AndroidJUnit4.class) 23 public final class AppStateAppBatteryUsageBridgeTest { 24 private static final String TEST_PACKAGE_1 = "com.example.test.pkg1"; 25 private static final String TEST_PACKAGE_2 = "com.example.test.pkg2"; 26 private static final int UID_1 = 12345; 27 private static final int UID_2 = 7654321; 28 29 @Mock(answer = Answers.RETURNS_DEEP_STUBS) 30 private Context mContext; 31 @Mock 32 private AppOpsManager mAppOpsManager; 33 @Mock 34 private PowerAllowlistBackend mPowerAllowlistBackend; 35 36 @Before initMocks()37 public void initMocks() { 38 MockitoAnnotations.initMocks(this); 39 } 40 41 @Test updateExtraInfo_updatesRestricted()42 public void updateExtraInfo_updatesRestricted() { 43 when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE_1, UID_1)).thenReturn(false); 44 when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, 45 UID_1, TEST_PACKAGE_1)).thenReturn(AppOpsManager.MODE_IGNORED); 46 AppStateAppBatteryUsageBridge bridge = 47 new AppStateAppBatteryUsageBridge(mContext, null, null); 48 bridge.mAppOpsManager = mAppOpsManager; 49 bridge.mPowerAllowlistBackend = mPowerAllowlistBackend; 50 AppEntry entry = new AppEntry(mContext, null, 0); 51 52 bridge.updateExtraInfo(entry, TEST_PACKAGE_1, UID_1); 53 54 assertThat(entry.extraInfo.getClass()) 55 .isEqualTo(AppStateAppBatteryUsageBridge.AppBatteryUsageDetails.class); 56 assertThat(AppStateAppBatteryUsageBridge.getAppBatteryUsageDetailsMode(entry)) 57 .isEqualTo(AppStateAppBatteryUsageBridge.MODE_RESTRICTED); 58 } 59 60 @Test updateExtraInfo_updatesUnrestricted()61 public void updateExtraInfo_updatesUnrestricted() { 62 when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE_1, UID_1)).thenReturn(true); 63 when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, 64 UID_2, TEST_PACKAGE_2)).thenReturn(AppOpsManager.MODE_ALLOWED); 65 AppStateAppBatteryUsageBridge bridge = 66 new AppStateAppBatteryUsageBridge(mContext, null, null); 67 bridge.mAppOpsManager = mAppOpsManager; 68 bridge.mPowerAllowlistBackend = mPowerAllowlistBackend; 69 AppEntry entry = new AppEntry(mContext, null, 0); 70 71 bridge.updateExtraInfo(entry, TEST_PACKAGE_2, UID_2); 72 73 assertThat(entry.extraInfo.getClass()) 74 .isEqualTo(AppStateAppBatteryUsageBridge.AppBatteryUsageDetails.class); 75 assertThat(AppStateAppBatteryUsageBridge.getAppBatteryUsageDetailsMode(entry)) 76 .isEqualTo(AppStateAppBatteryUsageBridge.MODE_UNRESTRICTED); 77 } 78 } 79