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