Files
app_Settings/tests/robotests/src/com/android/settings/applications/AppStateAppOpsBridgeTest.java
Suprabh Shukla c8b9240535 Adding alarms and reminders activity
Adding a settings screen to control the permission SCHEDULE_EXACT_ALARM.
Apps can start this by starting a newly introduced API intent
REQUEST_SCHEDULE_EXACT_ALARM.

Test: make -j RunSettingsRoboTests
Manually by UI inspection:
Settings -> Apps -> Special App access -> Alarms and Reminders
or by running:
adb shell am start -a android.settings.REQUEST_SCHEDULE_EXACT_ALARM

Bug: 171306433
Bug: 171305516
Change-Id: I1293d38fc50a22b2af46f80ab24f676ed632f964
2021-02-23 22:32:24 -08:00

130 lines
4.7 KiB
Java

/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.applications;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import android.Manifest;
import android.app.AppOpsManager;
import android.content.Context;
import android.content.pm.IPackageManager;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.google.common.truth.Truth;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public final class AppStateAppOpsBridgeTest {
@Mock private Context mContext;
@Mock private UserManager mUserManager;
@Mock private IPackageManager mPackageManagerService;
@Mock private AppOpsManager mAppOpsManager;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
when(mContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager);
}
@Test
public void getPermissionInfo_nullPackageInfo_shouldNotCrash() throws RemoteException {
when(mPackageManagerService.getPackageInfo(anyString(), anyInt(), anyInt()))
.thenReturn(null);
new TestAppStateAppOpsBridge().getPermissionInfo("pkg1", 1);
// should not crash
}
@Test
public void permissionState_modeDefault_IsPermissible() {
AppStateAppOpsBridge.PermissionState permissionState =
new AppStateAppOpsBridge.PermissionState("pkg1", UserHandle.of(123));
permissionState.appOpMode = AppOpsManager.MODE_DEFAULT;
permissionState.staticPermissionGranted = true;
Truth.assertThat(permissionState.isPermissible()).isTrue();
permissionState.staticPermissionGranted = false;
Truth.assertThat(permissionState.isPermissible()).isFalse();
}
@Test
public void permissionState_modeErrored_IsPermissible() {
AppStateAppOpsBridge.PermissionState permissionState =
new AppStateAppOpsBridge.PermissionState("pkg1", UserHandle.of(123));
permissionState.appOpMode = AppOpsManager.MODE_ERRORED;
permissionState.staticPermissionGranted = true;
Truth.assertThat(permissionState.isPermissible()).isFalse();
permissionState.staticPermissionGranted = false;
Truth.assertThat(permissionState.isPermissible()).isFalse();
}
@Test
public void permissionState_modeAllowed_IsPermissible() {
AppStateAppOpsBridge.PermissionState permissionState =
new AppStateAppOpsBridge.PermissionState("pkg1", UserHandle.of(123));
permissionState.appOpMode = AppOpsManager.MODE_ALLOWED;
permissionState.staticPermissionGranted = true;
Truth.assertThat(permissionState.isPermissible()).isTrue();
permissionState.staticPermissionGranted = false;
Truth.assertThat(permissionState.isPermissible()).isTrue();
}
@Test
public void permissionState_modeIgnored_IsPermissible() {
AppStateAppOpsBridge.PermissionState permissionState =
new AppStateAppOpsBridge.PermissionState("pkg1", UserHandle.of(123));
permissionState.appOpMode = AppOpsManager.MODE_IGNORED;
permissionState.staticPermissionGranted = true;
Truth.assertThat(permissionState.isPermissible()).isFalse();
permissionState.staticPermissionGranted = false;
Truth.assertThat(permissionState.isPermissible()).isFalse();
}
private class TestAppStateAppOpsBridge extends AppStateAppOpsBridge {
private TestAppStateAppOpsBridge() {
super(mContext, null, null, AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
new String[] {Manifest.permission.SYSTEM_ALERT_WINDOW},
mPackageManagerService);
}
@Override
protected void updateExtraInfo(AppEntry app, String pkg, int uid) {
}
}
}