Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1615409 authored by Alex Salo's avatar Alex Salo Committed by Android (Google) Code Review
Browse files

Merge "Check for available rotation resolver service and camera permission...

Merge "Check for available rotation resolver service and camera permission before showing setting for face based auto-rotation" into sc-dev
parents 9561f091 ed7673ea
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -954,7 +954,7 @@
                <category android:name="com.android.settings.SHORTCUT" />
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="@string/rotate_settings_class" />
                android:value="com.android.settings.display.SmartAutoRotatePreferenceFragment" />
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>
+0 −2
Original line number Diff line number Diff line
@@ -2713,8 +2713,6 @@
    <!-- Display settings --><skip/>
    <!-- Sound & display settings screen, section header for settings related to display -->
    <string name="display_settings">Display</string>
    <!-- Sound & display settings screen, section header for settings related to display -->
    <string name="rotate_settings_class" translatable="false">com.android.settings.DisplaySettings</string>
    <!-- Sound & display settings screen, accelerometer-based rotation check box label -->
    <string name="accelerometer_title">Auto-rotate screen</string>
    <!-- Sound & display settings screen, locked rotation check box label [CHAR LIMIT=30] -->
+7 −0
Original line number Diff line number Diff line
@@ -20,6 +20,13 @@
    xmlns:settings="http://schemas.android.com/apk/res-auto"
    android:title="@string/accelerometer_title" >

    <Preference
        android:key="face_rotate_permission"
        android:title="@string/adaptive_sleep_title_no_permission"
        android:summary="@string/adaptive_sleep_summary_no_permission"
        android:icon="@drawable/ic_info_outline_24"
        settings:controller="com.android.settings.display.SmartAutoRotatePermissionController" />

    <SwitchPreference
        android:key="face_based_rotate"
        android:title="@string/auto_rotate_switch_face_based"
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;

// TODO b/180515542 this class is no longer needed on S+
public class AutoRotatePreferenceController extends TogglePreferenceController implements
        PreferenceControllerMixin, Preference.OnPreferenceChangeListener, LifecycleObserver,
        OnResume, OnPause {
+32 −2
Original line number Diff line number Diff line
@@ -17,9 +17,15 @@ package com.android.settings.display;

import static android.provider.Settings.Secure.CAMERA_AUTOROTATE;

import android.Manifest;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.provider.Settings;
import android.service.rotationresolver.RotationResolverService;
import android.text.TextUtils;

import androidx.preference.Preference;

@@ -43,13 +49,17 @@ public class SmartAutoRotateController extends TogglePreferenceController implem

    @Override
    public int getAvailabilityStatus() {
        return !RotationPolicy.isRotationLocked(mContext)
        if (!isRotationResolverServiceAvailable(mContext)) {
            return UNSUPPORTED_ON_DEVICE;
        }
        return !RotationPolicy.isRotationLocked(mContext) && hasSufficientPermission(mContext)
                ? AVAILABLE : DISABLED_DEPENDENT_SETTING;
    }

    @Override
    public boolean isChecked() {
        return Settings.Secure.getInt(mContext.getContentResolver(),
        return hasSufficientPermission(mContext) && Settings.Secure.getInt(
                mContext.getContentResolver(),
                CAMERA_AUTOROTATE, 0) == 1;
    }

@@ -62,4 +72,24 @@ public class SmartAutoRotateController extends TogglePreferenceController implem
                isChecked ? 1 : 0);
        return true;
    }

    static boolean isRotationResolverServiceAvailable(Context context) {
        final PackageManager packageManager = context.getPackageManager();
        final String resolvePackage = packageManager.getRotationResolverPackageName();
        if (TextUtils.isEmpty(resolvePackage)) {
            return false;
        }
        final Intent intent = new Intent(RotationResolverService.SERVICE_INTERFACE).setPackage(
                resolvePackage);
        final ResolveInfo resolveInfo = packageManager.resolveService(intent,
                PackageManager.MATCH_SYSTEM_ONLY);
        return resolveInfo != null && resolveInfo.serviceInfo != null;
    }

    static boolean hasSufficientPermission(Context context) {
        final PackageManager packageManager = context.getPackageManager();
        final String rotationPackage = packageManager.getRotationResolverPackageName();
        return rotationPackage != null && packageManager.checkPermission(
                Manifest.permission.CAMERA, rotationPackage) == PackageManager.PERMISSION_GRANTED;
    }
}
Loading