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

Commit 73fb4783 authored by maxwen's avatar maxwen Committed by Gerrit Code Review
Browse files

Fix screen pinning on devices without navbar

Change-Id: I8451702f6af329be198bad6a1c07cf78a9de28a7
parent 8a7a8f50
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -321,4 +321,9 @@
    <string name="live_display_outdoor">Outdoor (bright sun)</string>
    <string name="live_display_outdoor_summary">Use outdoor settings only</string>
    <string name="live_display_hint">LiveDisplay can help reduce eyestrain and help you sleep at night. Click here to try it out!</string>

    <!-- Notify use that they are in Lock-to-app (for devices without navbar) -->
    <string name="lock_to_app_toast_no_navbar">To unpin this screen, touch and hold Menu button.</string>
    <!-- Lock-to-app dialog description (for devices without navbar) -->
    <string name="lock_to_app_description_no_navbar">Screen pinning locks the display in a single view.\n\nTo unpin, touch and hold Menu button.</string>
</resources>
+3 −0
Original line number Diff line number Diff line
@@ -297,4 +297,7 @@
    <java-symbol type="integer" name="config_dayColorTemperature" />
    <java-symbol type="integer" name="config_nightColorTemperature" />
    <java-symbol type="integer" name="config_outdoorAmbientLux" />

    <java-symbol type="string" name="lock_to_app_toast_no_navbar" />
    <java-symbol type="string" name="lock_to_app_description_no_navbar" />
</resources>
+17 −0
Original line number Diff line number Diff line
@@ -2821,6 +2821,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                        return -1;
                    }
                } else if (longPress) {
                    if (unpinActivity()) {
                        performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
                        return -1;
                    }
                    if (!keyguardOn && mLongPressOnMenuBehavior != KEY_ACTION_NOTHING) {
                        if (mLongPressOnMenuBehavior != KEY_ACTION_APP_SWITCH) {
                            cancelPreloadRecentApps();
@@ -3114,6 +3118,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        return 0;
    }

    private boolean unpinActivity() {
        if (!hasNavigationBar()) {
            try {
                if (ActivityManagerNative.getDefault().isInLockTaskMode()) {
                    ActivityManagerNative.getDefault().stopLockTaskModeOnCurrent();
                    return true;
                }
            } catch (RemoteException e) {
            }
        }
        return false;
    }

    /** {@inheritDoc} */
    @Override
    public KeyEvent dispatchUnhandledKey(WindowState win, KeyEvent event, int policyFlags) {
+10 −2
Original line number Diff line number Diff line
@@ -19,10 +19,12 @@ package com.android.server.am;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.view.WindowManagerPolicy;
import android.view.accessibility.AccessibilityManager;
import android.widget.Toast;

import com.android.internal.R;
import com.android.internal.policy.PolicyManager;

/**
 *  Helper to manage showing/hiding a image to notify them that they are entering
@@ -33,6 +35,7 @@ public class LockTaskNotify {

    private final Context mContext;
    private final H mHandler;
    private final WindowManagerPolicy mPolicy = PolicyManager.makeNewWindowManager();
    private AccessibilityManager mAccessibilityManager;
    private Toast mLastToast;

@@ -50,9 +53,14 @@ public class LockTaskNotify {
    public void handleShowToast(boolean isLocked) {
        String text = mContext.getString(isLocked
                ? R.string.lock_to_app_toast_locked : R.string.lock_to_app_toast);
        if (!isLocked && mAccessibilityManager.isEnabled()) {
        if (!isLocked) {
            if (mAccessibilityManager.isEnabled()) {
                text = mContext.getString(R.string.lock_to_app_toast_accessible);
            }
            if (!mPolicy.hasNavigationBar()) {
                text = mContext.getString(R.string.lock_to_app_toast_no_navbar);
            }
        }
        if (mLastToast != null) {
            mLastToast.cancel();
        }
+11 −3
Original line number Diff line number Diff line
@@ -13,10 +13,12 @@ import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.Slog;
import android.view.WindowManager;
import android.view.WindowManagerPolicy;
import android.view.accessibility.AccessibilityManager;
import android.widget.CheckBox;

import com.android.internal.R;
import com.android.internal.policy.PolicyManager;
import com.android.internal.widget.ILockSettings;
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.LockPatternUtilsCache;
@@ -26,6 +28,7 @@ public class LockToAppRequestDialog implements OnClickListener {

    final private Context mContext;
    final private ActivityManagerService mService;
    private final WindowManagerPolicy mPolicy = PolicyManager.makeNewWindowManager();

    private AlertDialog mDialog;
    private TaskRecord mRequestedTask;
@@ -87,9 +90,14 @@ public class LockToAppRequestDialog implements OnClickListener {
        final int unlockStringId = getLockString(task.userId);

        final Resources r = Resources.getSystem();
        final String description= r.getString(mAccessibilityService.isEnabled()
        final String description;
        if (mPolicy.hasNavigationBar()) {
            description = r.getString(mAccessibilityService.isEnabled()
                    ? R.string.lock_to_app_description_accessible
                    : R.string.lock_to_app_description);
        } else {
            description = r.getString(R.string.lock_to_app_description_no_navbar);
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext)
                        .setTitle(r.getString(R.string.lock_to_app_title))
                        .setMessage(description)