Loading packages/SystemUI/res/values/cm_strings.xml +9 −0 Original line number Diff line number Diff line Loading @@ -122,4 +122,13 @@ <!-- Label for current user in power menu options dialog --> <string name="global_action_current_user">Current</string> <string name="global_action_users">Users</string> <!-- Name of the additional status bar icons also exposed with SystemUI Tuner --> <string name="status_bar_location">Location</string> <!-- Screen pinning dialog description. (for devices without navbar) --> <string name="screen_pinning_description_no_navbar">This keeps it in view until you unpin. Touch & hold Back to unpin.</string> <!-- Notify use that they are in Lock-to-app (for devices without navbar)--> <string name="screen_pinning_toast_no_navbar">To unpin this screen, touch & hold Back button</string> </resources> packages/SystemUI/res/xml/status_bar_prefs.xml +4 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,10 @@ android:key="airplane" android:title="@string/status_bar_airplane" /> <com.android.systemui.tuner.StatusBarSwitch android:key="location" android:title="@string/status_bar_location" /> <!-- other weird signal stuff --> <com.android.systemui.tuner.StatusBarSwitch Loading packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java +22 −7 Original line number Diff line number Diff line Loading @@ -35,9 +35,11 @@ import android.text.SpannableStringBuilder; import android.text.style.BulletSpan; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.IWindowManager; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.accessibility.AccessibilityManager; import android.view.animation.DecelerateInterpolator; import android.widget.Button; Loading Loading @@ -270,20 +272,24 @@ public class ScreenPinningRequest implements View.OnClickListener, && navigationBarView.isRecentsButtonVisible(); boolean touchExplorationEnabled = mAccessibilityService.isTouchExplorationEnabled(); int descriptionStringResId; if (QuickStepContract.isGesturalMode(mNavBarMode)) { if (hasNavigationBar() && QuickStepContract.isGesturalMode(mNavBarMode)) { descriptionStringResId = R.string.screen_pinning_description_gestural; } else if (recentsVisible) { mLayout.findViewById(R.id.screen_pinning_recents_group).setVisibility(VISIBLE); mLayout.findViewById(R.id.screen_pinning_home_bg_light).setVisibility(INVISIBLE); mLayout.findViewById(R.id.screen_pinning_home_bg).setVisibility(INVISIBLE); descriptionStringResId = touchExplorationEnabled descriptionStringResId = !hasNavigationBar() ? R.string.screen_pinning_description_no_navbar : touchExplorationEnabled ? R.string.screen_pinning_description_accessible : R.string.screen_pinning_description; } else { mLayout.findViewById(R.id.screen_pinning_recents_group).setVisibility(INVISIBLE); mLayout.findViewById(R.id.screen_pinning_home_bg_light).setVisibility(VISIBLE); mLayout.findViewById(R.id.screen_pinning_home_bg).setVisibility(VISIBLE); descriptionStringResId = touchExplorationEnabled descriptionStringResId = !hasNavigationBar() ? R.string.screen_pinning_description_no_navbar : touchExplorationEnabled ? R.string.screen_pinning_description_recents_invisible_accessible : R.string.screen_pinning_description_recents_invisible; } Loading Loading @@ -335,6 +341,15 @@ public class ScreenPinningRequest implements View.OnClickListener, } } private boolean hasNavigationBar() { IWindowManager windowManagerService = WindowManagerGlobal.getWindowManagerService(); try { return windowManagerService.hasNavigationBar(mContext.getDisplayId()); } catch (RemoteException e) { return false; } } @Override public void onDetachedFromWindow() { mBroadcastDispatcher.unregisterReceiver(mReceiver); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ScreenPinningNotify.java +19 −5 Original line number Diff line number Diff line Loading @@ -17,8 +17,11 @@ package com.android.systemui.statusbar.phone; import android.content.Context; import android.os.RemoteException; import android.os.SystemClock; import android.util.Slog; import android.view.IWindowManager; import android.view.WindowManagerGlobal; import android.widget.Toast; import com.android.systemui.R; Loading Loading @@ -60,7 +63,9 @@ public class ScreenPinningNotify { if (mLastToast != null) { mLastToast.cancel(); } mLastToast = makeAllUserToastAndShow(isGestureNavEnabled mLastToast = makeAllUserToastAndShow(!hasNavigationBar() ? R.string.screen_pinning_toast_no_navbar : isGestureNavEnabled ? R.string.screen_pinning_toast_gesture_nav : isRecentsButtonVisible ? R.string.screen_pinning_toast Loading @@ -73,4 +78,13 @@ public class ScreenPinningNotify { toast.show(); return toast; } private boolean hasNavigationBar() { IWindowManager windowManagerService = WindowManagerGlobal.getWindowManagerService(); try { return windowManagerService.hasNavigationBar(mContext.getDisplayId()); } catch (RemoteException e) { return false; } } } services/core/java/com/android/server/policy/PhoneWindowManager.java +20 −2 Original line number Diff line number Diff line Loading @@ -1467,8 +1467,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false, "Back - Long Press"); if (!unpinActivity(false)) { performKeyAction(mBackLongPressAction, event); } } private void accessibilityShortcutActivated() { mAccessibilityShortcutController.performAccessibilityShortcut(); Loading Loading @@ -1523,7 +1525,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private boolean hasLongPressOnBackBehavior() { return mBackLongPressAction != Action.NOTHING; return mBackLongPressAction != Action.NOTHING || unpinActivity(true); } private void interceptScreenshotChord() { Loading Loading @@ -3581,6 +3583,22 @@ public class PhoneWindowManager implements WindowManagerPolicy { return false; } private boolean unpinActivity(boolean checkOnly) { if (!hasNavigationBar()) { try { if (ActivityTaskManager.getService().isInLockTaskMode()) { if (!checkOnly) { ActivityTaskManager.getService().stopSystemLockTaskMode(); } return true; } } catch (RemoteException e) { // ignore } } return false; } // TODO(b/117479243): handle it in InputPolicy /** {@inheritDoc} */ @Override Loading Loading
packages/SystemUI/res/values/cm_strings.xml +9 −0 Original line number Diff line number Diff line Loading @@ -122,4 +122,13 @@ <!-- Label for current user in power menu options dialog --> <string name="global_action_current_user">Current</string> <string name="global_action_users">Users</string> <!-- Name of the additional status bar icons also exposed with SystemUI Tuner --> <string name="status_bar_location">Location</string> <!-- Screen pinning dialog description. (for devices without navbar) --> <string name="screen_pinning_description_no_navbar">This keeps it in view until you unpin. Touch & hold Back to unpin.</string> <!-- Notify use that they are in Lock-to-app (for devices without navbar)--> <string name="screen_pinning_toast_no_navbar">To unpin this screen, touch & hold Back button</string> </resources>
packages/SystemUI/res/xml/status_bar_prefs.xml +4 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,10 @@ android:key="airplane" android:title="@string/status_bar_airplane" /> <com.android.systemui.tuner.StatusBarSwitch android:key="location" android:title="@string/status_bar_location" /> <!-- other weird signal stuff --> <com.android.systemui.tuner.StatusBarSwitch Loading
packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java +22 −7 Original line number Diff line number Diff line Loading @@ -35,9 +35,11 @@ import android.text.SpannableStringBuilder; import android.text.style.BulletSpan; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.IWindowManager; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.accessibility.AccessibilityManager; import android.view.animation.DecelerateInterpolator; import android.widget.Button; Loading Loading @@ -270,20 +272,24 @@ public class ScreenPinningRequest implements View.OnClickListener, && navigationBarView.isRecentsButtonVisible(); boolean touchExplorationEnabled = mAccessibilityService.isTouchExplorationEnabled(); int descriptionStringResId; if (QuickStepContract.isGesturalMode(mNavBarMode)) { if (hasNavigationBar() && QuickStepContract.isGesturalMode(mNavBarMode)) { descriptionStringResId = R.string.screen_pinning_description_gestural; } else if (recentsVisible) { mLayout.findViewById(R.id.screen_pinning_recents_group).setVisibility(VISIBLE); mLayout.findViewById(R.id.screen_pinning_home_bg_light).setVisibility(INVISIBLE); mLayout.findViewById(R.id.screen_pinning_home_bg).setVisibility(INVISIBLE); descriptionStringResId = touchExplorationEnabled descriptionStringResId = !hasNavigationBar() ? R.string.screen_pinning_description_no_navbar : touchExplorationEnabled ? R.string.screen_pinning_description_accessible : R.string.screen_pinning_description; } else { mLayout.findViewById(R.id.screen_pinning_recents_group).setVisibility(INVISIBLE); mLayout.findViewById(R.id.screen_pinning_home_bg_light).setVisibility(VISIBLE); mLayout.findViewById(R.id.screen_pinning_home_bg).setVisibility(VISIBLE); descriptionStringResId = touchExplorationEnabled descriptionStringResId = !hasNavigationBar() ? R.string.screen_pinning_description_no_navbar : touchExplorationEnabled ? R.string.screen_pinning_description_recents_invisible_accessible : R.string.screen_pinning_description_recents_invisible; } Loading Loading @@ -335,6 +341,15 @@ public class ScreenPinningRequest implements View.OnClickListener, } } private boolean hasNavigationBar() { IWindowManager windowManagerService = WindowManagerGlobal.getWindowManagerService(); try { return windowManagerService.hasNavigationBar(mContext.getDisplayId()); } catch (RemoteException e) { return false; } } @Override public void onDetachedFromWindow() { mBroadcastDispatcher.unregisterReceiver(mReceiver); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScreenPinningNotify.java +19 −5 Original line number Diff line number Diff line Loading @@ -17,8 +17,11 @@ package com.android.systemui.statusbar.phone; import android.content.Context; import android.os.RemoteException; import android.os.SystemClock; import android.util.Slog; import android.view.IWindowManager; import android.view.WindowManagerGlobal; import android.widget.Toast; import com.android.systemui.R; Loading Loading @@ -60,7 +63,9 @@ public class ScreenPinningNotify { if (mLastToast != null) { mLastToast.cancel(); } mLastToast = makeAllUserToastAndShow(isGestureNavEnabled mLastToast = makeAllUserToastAndShow(!hasNavigationBar() ? R.string.screen_pinning_toast_no_navbar : isGestureNavEnabled ? R.string.screen_pinning_toast_gesture_nav : isRecentsButtonVisible ? R.string.screen_pinning_toast Loading @@ -73,4 +78,13 @@ public class ScreenPinningNotify { toast.show(); return toast; } private boolean hasNavigationBar() { IWindowManager windowManagerService = WindowManagerGlobal.getWindowManagerService(); try { return windowManagerService.hasNavigationBar(mContext.getDisplayId()); } catch (RemoteException e) { return false; } } }
services/core/java/com/android/server/policy/PhoneWindowManager.java +20 −2 Original line number Diff line number Diff line Loading @@ -1467,8 +1467,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false, "Back - Long Press"); if (!unpinActivity(false)) { performKeyAction(mBackLongPressAction, event); } } private void accessibilityShortcutActivated() { mAccessibilityShortcutController.performAccessibilityShortcut(); Loading Loading @@ -1523,7 +1525,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } private boolean hasLongPressOnBackBehavior() { return mBackLongPressAction != Action.NOTHING; return mBackLongPressAction != Action.NOTHING || unpinActivity(true); } private void interceptScreenshotChord() { Loading Loading @@ -3581,6 +3583,22 @@ public class PhoneWindowManager implements WindowManagerPolicy { return false; } private boolean unpinActivity(boolean checkOnly) { if (!hasNavigationBar()) { try { if (ActivityTaskManager.getService().isInLockTaskMode()) { if (!checkOnly) { ActivityTaskManager.getService().stopSystemLockTaskMode(); } return true; } } catch (RemoteException e) { // ignore } } return false; } // TODO(b/117479243): handle it in InputPolicy /** {@inheritDoc} */ @Override Loading