199a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei/* 299a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * Copyright (C) 2018 The Android Open Source Project 399a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * 499a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * Licensed under the Apache License, Version 2.0 (the "License"); 599a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * you may not use this file except in compliance with the License. 699a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * You may obtain a copy of the License at 799a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * 899a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * http://www.apache.org/licenses/LICENSE-2.0 999a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * 1099a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * Unless required by applicable law or agreed to in writing, software 1199a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * distributed under the License is distributed on an "AS IS" BASIS, 1299a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1399a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * See the License for the specific language governing permissions and 1499a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei * limitations under the License. 1599a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei */ 1699a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleipackage com.android.settings.fuelgauge.batterytip.actions; 1799a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 1899a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport static org.mockito.Matchers.anyInt; 1999a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport static org.mockito.Matchers.eq; 2099a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport static org.mockito.Mockito.verify; 2199a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 2299a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport android.app.AppOpsManager; 232b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yuimport android.content.Context; 242b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yuimport android.util.Pair; 2599a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 262b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yuimport com.android.internal.logging.nano.MetricsProto; 2799a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport com.android.settings.fuelgauge.BatteryUtils; 2899a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport com.android.settings.fuelgauge.batterytip.AppInfo; 2999a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport com.android.settings.fuelgauge.batterytip.tips.BatteryTip; 3099a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip; 31af2ece738730f605ecbbbffe78b6319faac39172jackqdyuleiimport com.android.settings.testutils.DatabaseTestUtils; 322b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yuimport com.android.settings.testutils.FakeFeatureFactory; 3399a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport com.android.settings.testutils.SettingsRobolectricTestRunner; 3499a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 35af2ece738730f605ecbbbffe78b6319faac39172jackqdyuleiimport org.junit.After; 3699a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport org.junit.Before; 3799a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport org.junit.Test; 3899a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport org.junit.runner.RunWith; 3999a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport org.mockito.Mock; 4099a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport org.mockito.MockitoAnnotations; 4199a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport org.robolectric.RuntimeEnvironment; 4299a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 4399a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport java.util.ArrayList; 4499a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleiimport java.util.List; 4599a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 4699a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei@RunWith(SettingsRobolectricTestRunner.class) 4799a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyuleipublic class RestrictAppActionTest { 4822a39c2b93bc66db71238274a7683d329232d124James Lemieux 49d06d1165eb3825cddab20e72cdcc292bf760507fLei Yu private static final int UID_1 = 12345; 50d06d1165eb3825cddab20e72cdcc292bf760507fLei Yu private static final int UID_2 = 23456; 5199a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei private static final String PACKAGE_NAME_1 = "com.android.app1"; 5299a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei private static final String PACKAGE_NAME_2 = "com.android.app2"; 532b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu private static final int ANOMALY_WAKEUP = 0; 542b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu private static final int ANOMALY_BT = 1; 552b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu private static final int METRICS_KEY = 1; 5699a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 5799a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei @Mock 5899a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei private BatteryUtils mBatteryUtils; 5999a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei private RestrictAppAction mRestrictAppAction; 602b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu private FakeFeatureFactory mFeatureFactory; 6199a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 6299a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei @Before 6399a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei public void setUp() { 6499a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei MockitoAnnotations.initMocks(this); 6599a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 6699a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei final List<AppInfo> mAppInfos = new ArrayList<>(); 672b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu mAppInfos.add(new AppInfo.Builder() 68d06d1165eb3825cddab20e72cdcc292bf760507fLei Yu .setUid(UID_1) 692b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu .setPackageName(PACKAGE_NAME_1) 702b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu .build()); 712b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu mAppInfos.add(new AppInfo.Builder() 72d06d1165eb3825cddab20e72cdcc292bf760507fLei Yu .setUid(UID_2) 732b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu .setPackageName(PACKAGE_NAME_2) 742b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu .addAnomalyType(ANOMALY_BT) 752b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu .addAnomalyType(ANOMALY_WAKEUP) 762b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu .build()); 772b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu mFeatureFactory = FakeFeatureFactory.setupForTest(); 7899a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 7922a39c2b93bc66db71238274a7683d329232d124James Lemieux mRestrictAppAction = new RestrictAppAction(RuntimeEnvironment.application, 802b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfos)); 8199a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei mRestrictAppAction.mBatteryUtils = mBatteryUtils; 8299a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei } 8399a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 84af2ece738730f605ecbbbffe78b6319faac39172jackqdyulei @After 85af2ece738730f605ecbbbffe78b6319faac39172jackqdyulei public void cleanUp() { 8622a39c2b93bc66db71238274a7683d329232d124James Lemieux DatabaseTestUtils.clearDb(RuntimeEnvironment.application); 87af2ece738730f605ecbbbffe78b6319faac39172jackqdyulei } 88af2ece738730f605ecbbbffe78b6319faac39172jackqdyulei 8999a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei @Test 9099a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei public void testHandlePositiveAction() { 912b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu mRestrictAppAction.handlePositiveAction(METRICS_KEY); 9299a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei 9322a39c2b93bc66db71238274a7683d329232d124James Lemieux verify(mBatteryUtils) 94d06d1165eb3825cddab20e72cdcc292bf760507fLei Yu .setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_IGNORED); 9522a39c2b93bc66db71238274a7683d329232d124James Lemieux verify(mBatteryUtils) 96d06d1165eb3825cddab20e72cdcc292bf760507fLei Yu .setForceAppStandby(UID_2, PACKAGE_NAME_2, AppOpsManager.MODE_IGNORED); 972b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application, 982b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, PACKAGE_NAME_1, Pair.create( 992b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY)); 1002b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application, 1012b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, PACKAGE_NAME_2, 1022b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY), 1032b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu Pair.create(MetricsProto.MetricsEvent.FIELD_ANOMALY_TYPE, ANOMALY_WAKEUP)); 1042b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu verify(mFeatureFactory.metricsFeatureProvider).action(RuntimeEnvironment.application, 1052b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, PACKAGE_NAME_2, 1062b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, METRICS_KEY), 1072b6e422ca1532a1b70772484b11524ee1b406fa4Lei Yu Pair.create(MetricsProto.MetricsEvent.FIELD_ANOMALY_TYPE, ANOMALY_BT)); 10899a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei } 10999a2de41ef8ff7eb4ea47413d5ad8c930c00d881jackqdyulei} 110