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

Commit 8f3819bc authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Preserving the homescreen rotation setting on a tablet, when the display is scaled

Bug: 27040652
Change-Id: I07f5e02443379ac5b877f72d33cedf4f2feca926
parent 26119438
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -482,7 +482,7 @@ public class Launcher extends Activity
        IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        registerReceiver(mCloseSystemDialogsReceiver, filter);

        mRotationEnabled = Utilities.isRotationAllowedForDevice(getApplicationContext());
        mRotationEnabled = getResources().getBoolean(R.bool.allow_rotation);
        // In case we are on a device with locked rotation, we should look at preferences to check
        // if the user has specifically allowed rotation.
        if (!mRotationEnabled) {
@@ -1189,7 +1189,7 @@ public class Launcher extends Activity
        } else {
            // On devices with a locked orientation, we will at least have the allow rotation
            // setting.
            return !Utilities.isRotationAllowedForDevice(this);
            return !getResources().getBoolean(R.bool.allow_rotation);
        }
    }

+8 −3
Original line number Diff line number Diff line
@@ -265,9 +265,14 @@ public class LauncherProvider extends ContentProvider {
        switch (method) {
            case LauncherSettings.Settings.METHOD_GET_BOOLEAN: {
                Bundle result = new Bundle();
                if (Utilities.ALLOW_ROTATION_PREFERENCE_KEY.equals(arg)) {
                    result.putBoolean(LauncherSettings.Settings.EXTRA_VALUE,
                            Utilities.isAllowRotationPrefEnabled(getContext()));
                } else {
                    result.putBoolean(LauncherSettings.Settings.EXTRA_VALUE,
                            Utilities.getPrefs(getContext()).getBoolean(arg, extras.getBoolean(
                                    LauncherSettings.Settings.EXTRA_DEFAULT_VALUE)));
                }
                return result;
            }
            case LauncherSettings.Settings.METHOD_SET_BOOLEAN: {
+17 −11
Original line number Diff line number Diff line
@@ -131,11 +131,6 @@ public final class Utilities {
            CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
            TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());

    // To turn on these properties, type
    // adb shell setprop log.tag.PROPERTY_NAME [VERBOSE | SUPPRESS]
    private static final String FORCE_ENABLE_ROTATION_PROPERTY = "launcher_force_rotate";
    private static boolean sForceEnableRotation = isPropertyEnabled(FORCE_ENABLE_ROTATION_PROPERTY);

    public static final String ALLOW_ROTATION_PREFERENCE_KEY = "pref_allowRotation";

    public static boolean isPropertyEnabled(String propertyName) {
@@ -143,13 +138,24 @@ public final class Utilities {
    }

    public static boolean isAllowRotationPrefEnabled(Context context) {
        boolean allowRotationPref = getPrefs(context)
                .getBoolean(ALLOW_ROTATION_PREFERENCE_KEY, false);
        return sForceEnableRotation || allowRotationPref;
        boolean allowRotationPref = false;
        if (isNycOrAbove()) {
            // If the device was scaled, used the original dimensions to determine if rotation
            // is allowed of not.
            try {
                // TODO: Use the actual field when the API is finalized.
                int originalDensity =
                        DisplayMetrics.class.getField("DENSITY_DEVICE_STABLE").getInt(null);
                Resources res = context.getResources();
                int originalSmallestWidth = res.getConfiguration().smallestScreenWidthDp
                        * res.getDisplayMetrics().densityDpi / originalDensity;
                allowRotationPref = originalSmallestWidth >= 600;
            } catch (Exception e) {
                // Ignore
            }
        }

    public static boolean isRotationAllowedForDevice(Context context) {
        return sForceEnableRotation || context.getResources().getBoolean(R.bool.allow_rotation);
        return getPrefs(context).getBoolean(ALLOW_ROTATION_PREFERENCE_KEY, allowRotationPref);
    }

    public static boolean isNycOrAbove() {