• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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