Check for attention permissions
If attention package does not have sufficient permissions - disable the setting. Bug: 130246574, 130350903 Test: make RunSettingsRoboTests and manually confirmed Change-Id: Ia7a86c940522e72f7e895d6aec7500f1ef6f9889
This commit is contained in:
@@ -15,9 +15,14 @@ package com.android.settings.display;
|
|||||||
|
|
||||||
import static android.provider.Settings.System.ADAPTIVE_SLEEP;
|
import static android.provider.Settings.System.ADAPTIVE_SLEEP;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.TogglePreferenceController;
|
import com.android.settings.core.TogglePreferenceController;
|
||||||
|
|
||||||
@@ -27,16 +32,24 @@ public class AdaptiveSleepPreferenceController extends TogglePreferenceControlle
|
|||||||
private final String SYSTEM_KEY = ADAPTIVE_SLEEP;
|
private final String SYSTEM_KEY = ADAPTIVE_SLEEP;
|
||||||
private final int DEFAULT_VALUE = 0;
|
private final int DEFAULT_VALUE = 0;
|
||||||
|
|
||||||
|
private final boolean hasSufficientPermissions;
|
||||||
|
|
||||||
public AdaptiveSleepPreferenceController(Context context, String key) {
|
public AdaptiveSleepPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
|
|
||||||
|
final PackageManager packageManager = mContext.getPackageManager();
|
||||||
|
final String attentionPackage = packageManager.getAttentionServicePackageName();
|
||||||
|
hasSufficientPermissions = attentionPackage != null && packageManager.checkPermission(
|
||||||
|
Manifest.permission.CAMERA, attentionPackage) == PackageManager.PERMISSION_GRANTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isChecked() {
|
public boolean isChecked() {
|
||||||
return Settings.System.getInt(mContext.getContentResolver(),
|
return hasSufficientPermissions && Settings.System.getInt(mContext.getContentResolver(),
|
||||||
SYSTEM_KEY, DEFAULT_VALUE) != DEFAULT_VALUE;
|
SYSTEM_KEY, DEFAULT_VALUE) != DEFAULT_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setChecked(boolean isChecked) {
|
public boolean setChecked(boolean isChecked) {
|
||||||
Settings.System.putInt(mContext.getContentResolver(), SYSTEM_KEY,
|
Settings.System.putInt(mContext.getContentResolver(), SYSTEM_KEY,
|
||||||
@@ -64,4 +77,15 @@ public class AdaptiveSleepPreferenceController extends TogglePreferenceControlle
|
|||||||
? R.string.adaptive_sleep_summary_on
|
? R.string.adaptive_sleep_summary_on
|
||||||
: R.string.adaptive_sleep_summary_off);
|
: R.string.adaptive_sleep_summary_off);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
|
super.displayPreference(screen);
|
||||||
|
final Preference preference = screen.findPreference(SYSTEM_KEY);
|
||||||
|
|
||||||
|
if (preference != null) {
|
||||||
|
preference.setEnabled(hasSufficientPermissions);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -20,15 +20,21 @@ import static android.provider.Settings.System.ADAPTIVE_SLEEP;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settingslib.RestrictedPreference;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
@@ -42,6 +48,9 @@ public class AdaptiveSleepPreferenceControllerTest {
|
|||||||
private AdaptiveSleepPreferenceController mController;
|
private AdaptiveSleepPreferenceController mController;
|
||||||
private ContentResolver mContentResolver;
|
private ContentResolver mContentResolver;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private PackageManager mPackageManager;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
@@ -49,6 +58,10 @@ public class AdaptiveSleepPreferenceControllerTest {
|
|||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mContentResolver = mContext.getContentResolver();
|
mContentResolver = mContext.getContentResolver();
|
||||||
mController = new AdaptiveSleepPreferenceController(mContext, PREFERENCE_KEY);
|
mController = new AdaptiveSleepPreferenceController(mContext, PREFERENCE_KEY);
|
||||||
|
|
||||||
|
|
||||||
|
when(mPackageManager.checkPermission(any(), any())).thenReturn(
|
||||||
|
PackageManager.PERMISSION_GRANTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -114,4 +127,24 @@ public class AdaptiveSleepPreferenceControllerTest {
|
|||||||
new AdaptiveSleepPreferenceController(mContext, "any_key");
|
new AdaptiveSleepPreferenceController(mContext, "any_key");
|
||||||
assertThat(controller.isSliceable()).isTrue();
|
assertThat(controller.isSliceable()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isChecked_returnsFalseWhenNotSufficientPermissions() {
|
||||||
|
when(mPackageManager.checkPermission(any(), any())).thenReturn(
|
||||||
|
PackageManager.PERMISSION_DENIED);
|
||||||
|
|
||||||
|
mController.setChecked(true);
|
||||||
|
assertThat(mController.isChecked()).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void isEnabled_returnsFalseWhenNotSufficientPermissions() {
|
||||||
|
when(mPackageManager.checkPermission(any(), any())).thenReturn(
|
||||||
|
PackageManager.PERMISSION_DENIED);
|
||||||
|
|
||||||
|
mController.setChecked(true);
|
||||||
|
final RestrictedPreference mPreference = new RestrictedPreference(mContext);
|
||||||
|
mController.updateState(mPreference);
|
||||||
|
assertThat(mPreference.isEnabled()).isFalse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user