Merge "Add long press on recents to dock top most task"
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 3a5680d..7c86f96 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -999,9 +999,7 @@
<!-- Screen pinning dialog title. -->
<string name="screen_pinning_title">Screen is pinned</string>
<!-- Screen pinning dialog description. -->
- <string name="screen_pinning_description">This keeps it in view until you unpin. Touch and hold Back and Overview at the same time to unpin.</string>
- <!-- Screen pinning dialog description when in accessibility mode. -->
- <string name="screen_pinning_description_accessible">This keeps it in view until you unpin. Touch and hold Overview to unpin.</string>
+ <string name="screen_pinning_description">This keeps it in view until you unpin. Touch and hold Back to unpin.</string>
<!-- Screen pinning positive response. -->
<string name="screen_pinning_positive">Got it</string>
<!-- Screen pinning negative response. -->
diff --git a/packages/SystemUI/src/com/android/systemui/RecentsComponent.java b/packages/SystemUI/src/com/android/systemui/RecentsComponent.java
index 1d0bfe7..9a4cd93 100644
--- a/packages/SystemUI/src/com/android/systemui/RecentsComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/RecentsComponent.java
@@ -27,4 +27,9 @@
void cancelPreloadingRecents();
void showNextAffiliatedTask();
void showPrevAffiliatedTask();
+
+ /**
+ * Docks the top-most task and opens recents.
+ */
+ void dockTopTask();
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
index c216f97..9400108 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
@@ -284,6 +284,11 @@
}
@Override
+ public void dockTopTask() {
+ mImpl.dockTopTask();
+ }
+
+ @Override
public void showNextAffiliatedTask() {
mImpl.showNextAffiliatedTask();
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
index 07c7897..3a30a8f 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
@@ -405,6 +405,16 @@
showRelativeAffiliatedTask(false);
}
+ public void dockTopTask() {
+ SystemServicesProxy ssp = Recents.getSystemServices();
+ ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask();
+ if (topTask != null && !ssp.isInHomeStack(topTask.id)) {
+ ssp.moveTaskToDockedStack(topTask.id,
+ ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT);
+ showRecents(false /* triggeredFromAltTab */);
+ }
+ }
+
/**
* Returns the preloaded load plan and invalidates it.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java
index 31ee8ad..28299d3 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsResizeTaskDialog.java
@@ -234,14 +234,6 @@
dismissAllowingStateLoss();
mRecentsActivity.dismissRecentsToHomeWithoutTransitionAnimation();
- // In debug mode, we force all task to be resizeable regardless of the
- // current app configuration.
- for (int i = additionalTasks; i >= 0; --i) {
- if (mTasks[i] != null) {
- ssp.setTaskResizeable(mTasks[i].key.id);
- }
- }
-
// Show tasks as they might not be currently visible - beginning with the oldest so that
// the focus ends on the selected one.
for (int i = additionalTasks; i >= 0; --i) {
@@ -277,8 +269,7 @@
if (mTasks[0].key.stackId != DOCKED_STACK_ID) {
int taskId = mTasks[0].key.id;
SystemServicesProxy ssp = Recents.getSystemServices();
- ssp.setTaskResizeable(taskId);
- ssp.dockTask(taskId, createMode);
+ ssp.startTaskInDockedMode(taskId, createMode);
mRecentsView.launchTask(mTasks[0], null, DOCKED_STACK_ID);
} else {
Toast.makeText(getContext(), "Already docked", Toast.LENGTH_SHORT);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java
index 231843e..10075bc 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java
@@ -214,11 +214,8 @@
.setVisibility(View.INVISIBLE);
}
- final int description = mAccessibilityService.isEnabled()
- ? R.string.screen_pinning_description_accessible
- : R.string.screen_pinning_description;
((TextView) mLayout.findViewById(R.id.screen_pinning_description))
- .setText(description);
+ .setText(R.string.screen_pinning_description);
final int backBgVisibility =
mAccessibilityService.isEnabled() ? View.INVISIBLE : View.VISIBLE;
mLayout.findViewById(R.id.screen_pinning_back_bg).setVisibility(backBgVisibility);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
index a51e475..d3559bc 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -290,8 +290,8 @@
}
}
- /** Docks a task to the side of the screen. */
- public void dockTask(int taskId, int createMode) {
+ /** Docks a task to the side of the screen and starts it. */
+ public void startTaskInDockedMode(int taskId, int createMode) {
if (mIam == null) return;
try {
@@ -301,6 +301,17 @@
}
}
+ /** Docks an already resumed task to the side of the screen. */
+ public void moveTaskToDockedStack(int taskId, int createMode) {
+ if (mIam == null) return;
+
+ try {
+ mIam.moveTaskToDockedStack(taskId, createMode, true /* onTop */);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+
/** Returns the focused stack id. */
public int getFocusedStack() {
if (mIam == null) return -1;
@@ -735,6 +746,8 @@
ActivityOptions options) {
if (mIam != null) {
try {
+ // TODO: Remove when compatibility story is figured out.
+ setTaskResizeable(taskId);
mIam.startActivityFromRecents(
taskId, INVALID_STACK_ID, options == null ? null : options.toBundle());
return true;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index 7f618e3..98e9c75 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -800,8 +800,7 @@
// Dock the new task if we are hovering over a valid dock state
if (event.dockState != TaskStack.DockState.NONE) {
SystemServicesProxy ssp = Recents.getSystemServices();
- ssp.setTaskResizeable(event.task.key.id);
- ssp.dockTask(event.task.key.id, event.dockState.createMode);
+ ssp.startTaskInDockedMode(event.task.key.id, event.dockState.createMode);
launchTask(event.task, null, INVALID_STACK_ID);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 8938669..0def599 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -217,7 +217,7 @@
private boolean mDeviceProvisioned = false;
- private RecentsComponent mRecents;
+ protected RecentsComponent mRecents;
protected int mZenMode;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index cfde791..cfdb01e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -88,7 +88,6 @@
import android.view.ViewStub;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
-import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Interpolator;
@@ -146,7 +145,6 @@
import com.android.systemui.statusbar.policy.FullscreenUserSwitcher;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.HotspotControllerImpl;
-import com.android.systemui.statusbar.policy.KeyButtonView;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
import com.android.systemui.statusbar.policy.LocationControllerImpl;
@@ -1115,13 +1113,22 @@
}
};
- private long mLastLockToAppLongPress;
- private View.OnLongClickListener mLongPressBackRecentsListener =
- new View.OnLongClickListener() {
+ private View.OnLongClickListener mLongPressBackListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
- handleLongPressBackRecents(v);
- return true;
+ return handleLongPressBack();
+ }
+ };
+
+ private View.OnLongClickListener mRecentsLongClickListener = new View.OnLongClickListener() {
+
+ @Override
+ public boolean onLongClick(View v) {
+ if (mRecents != null) {
+ mRecents.dockTopTask();
+ return true;
+ }
+ return false;
}
};
@@ -1170,9 +1177,9 @@
mNavigationBarView.getRecentsButton().setOnClickListener(mRecentsClickListener);
mNavigationBarView.getRecentsButton().setOnTouchListener(mRecentsPreloadOnTouchListener);
mNavigationBarView.getRecentsButton().setLongClickable(true);
- mNavigationBarView.getRecentsButton().setOnLongClickListener(mLongPressBackRecentsListener);
+ mNavigationBarView.getRecentsButton().setOnLongClickListener(mRecentsLongClickListener);
mNavigationBarView.getBackButton().setLongClickable(true);
- mNavigationBarView.getBackButton().setOnLongClickListener(mLongPressBackRecentsListener);
+ mNavigationBarView.getBackButton().setOnLongClickListener(mLongPressBackListener);
mNavigationBarView.getHomeButton().setOnTouchListener(mHomeActionListener);
mNavigationBarView.getHomeButton().setOnLongClickListener(mLongPressHomeListener);
mAssistManager.onConfigurationChanged();
@@ -4048,7 +4055,7 @@
private void vibrateForCameraGesture() {
// Make sure to pass -1 for repeat so VibratorService doesn't stop us when going to sleep.
- mVibrator.vibrate(new long[] { 0, 750L }, -1 /* repeat */);
+ mVibrator.vibrate(new long[]{0, 750L}, -1 /* repeat */);
}
public void onScreenTurnedOn() {
@@ -4057,58 +4064,22 @@
}
/**
- * This handles long-press of both back and recents. They are
- * handled together to capture them both being long-pressed
- * at the same time to exit screen pinning (lock task).
- *
- * When accessibility mode is on, only a long-press from recents
- * is required to exit.
- *
- * In all other circumstances we try to pass through long-press events
- * for Back, so that apps can still use it. Which can be from two things.
- * 1) Not currently in screen pinning (lock task).
- * 2) Back is long-pressed without recents.
+ * Handles long press for back button. This exits screen pinning.
*/
- private void handleLongPressBackRecents(View v) {
+ private boolean handleLongPressBack() {
try {
- boolean sendBackLongPress = false;
IActivityManager activityManager = ActivityManagerNative.getDefault();
- boolean isAccessiblityEnabled = mAccessibilityManager.isEnabled();
- if (activityManager.isInLockTaskMode() && !isAccessiblityEnabled) {
- long time = System.currentTimeMillis();
- // If we recently long-pressed the other button then they were
- // long-pressed 'together'
- if ((time - mLastLockToAppLongPress) < LOCK_TO_APP_GESTURE_TOLERENCE) {
- activityManager.stopLockTaskModeOnCurrent();
- // When exiting refresh disabled flags.
- mNavigationBarView.setDisabledFlags(mDisabled1, true);
- } else if ((v.getId() == R.id.back)
- && !mNavigationBarView.getRecentsButton().isPressed()) {
- // If we aren't pressing recents right now then they presses
- // won't be together, so send the standard long-press action.
- sendBackLongPress = true;
- }
- mLastLockToAppLongPress = time;
- } else {
- // If this is back still need to handle sending the long-press event.
- if (v.getId() == R.id.back) {
- sendBackLongPress = true;
- } else if (isAccessiblityEnabled && activityManager.isInLockTaskMode()) {
- // When in accessibility mode a long press that is recents (not back)
- // should stop lock task.
- activityManager.stopLockTaskModeOnCurrent();
- // When exiting refresh disabled flags.
- mNavigationBarView.setDisabledFlags(mDisabled1, true);
- }
- }
- if (sendBackLongPress) {
- KeyButtonView keyButtonView = (KeyButtonView) v;
- keyButtonView.sendEvent(KeyEvent.ACTION_DOWN, KeyEvent.FLAG_LONG_PRESS);
- keyButtonView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_LONG_CLICKED);
+ if (activityManager.isInLockTaskMode()) {
+ activityManager.stopLockTaskModeOnCurrent();
+
+ // When exiting refresh disabled flags.
+ mNavigationBarView.setDisabledFlags(mDisabled1, true);
+ return true;
}
} catch (RemoteException e) {
Log.d(TAG, "Unable to reach activity manager", e);
}
+ return false;
}
// Recents