OSDN Git Service

Check for attention permissions
authorAlex Salo <asalo@google.com>
Thu, 11 Apr 2019 21:41:57 +0000 (14:41 -0700)
committerAlex Salo <asalo@google.com>
Tue, 16 Apr 2019 17:43:15 +0000 (17:43 +0000)
If attention package does not have sufficient permissions - disable the
setting.

Bug: 130246574130350903
Test: make RunSettingsRoboTests and manually confirmed
Change-Id: Ia7a86c940522e72f7e895d6aec7500f1ef6f9889

src/com/android/settings/display/AdaptiveSleepPreferenceController.java
tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java

index bd9d386..6aa7187 100644 (file)
@@ -15,9 +15,14 @@ package com.android.settings.display;
 
 import static android.provider.Settings.System.ADAPTIVE_SLEEP;
 
+import android.Manifest;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.provider.Settings;
 
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
 import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
@@ -27,16 +32,24 @@ public class AdaptiveSleepPreferenceController extends TogglePreferenceControlle
     private final String SYSTEM_KEY = ADAPTIVE_SLEEP;
     private final int DEFAULT_VALUE = 0;
 
+    private final boolean hasSufficientPermissions;
+
     public AdaptiveSleepPreferenceController(Context context, String 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
     public boolean isChecked() {
-        return Settings.System.getInt(mContext.getContentResolver(),
+        return hasSufficientPermissions && Settings.System.getInt(mContext.getContentResolver(),
                 SYSTEM_KEY, DEFAULT_VALUE) != DEFAULT_VALUE;
     }
 
+
     @Override
     public boolean setChecked(boolean isChecked) {
         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_off);
     }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        final Preference preference = screen.findPreference(SYSTEM_KEY);
+
+        if (preference != null) {
+            preference.setEnabled(hasSufficientPermissions);
+        }
+
+    }
 }
index d426e7a..9adb1ad 100644 (file)
@@ -20,15 +20,21 @@ import static android.provider.Settings.System.ADAPTIVE_SLEEP;
 
 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.Context;
+import android.content.pm.PackageManager;
 import android.provider.Settings;
 
 import com.android.settings.R;
+import com.android.settingslib.RestrictedPreference;
 
 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;
 import org.robolectric.RuntimeEnvironment;
@@ -42,6 +48,9 @@ public class AdaptiveSleepPreferenceControllerTest {
     private AdaptiveSleepPreferenceController mController;
     private ContentResolver mContentResolver;
 
+    @Mock
+    private PackageManager mPackageManager;
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
@@ -49,6 +58,10 @@ public class AdaptiveSleepPreferenceControllerTest {
         mContext = RuntimeEnvironment.application;
         mContentResolver = mContext.getContentResolver();
         mController = new AdaptiveSleepPreferenceController(mContext, PREFERENCE_KEY);
+
+
+        when(mPackageManager.checkPermission(any(), any())).thenReturn(
+                PackageManager.PERMISSION_GRANTED);
     }
 
     @Test
@@ -114,4 +127,24 @@ public class AdaptiveSleepPreferenceControllerTest {
                 new AdaptiveSleepPreferenceController(mContext, "any_key");
         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();
+    }
 }