Merge "Mark occluded home stack as invisible." into nyc-dev

This commit is contained in:
Winson Chung
2016-05-18 21:42:56 +00:00
committed by Android (Google) Code Review
3 changed files with 19 additions and 4 deletions

View File

@@ -2370,6 +2370,8 @@ public class ActivityManager {
public int displayId;
public int userId;
public boolean visible;
// Index of the stack in the display's stack list, can be used for comparison of stack order
public int position;
@Override
public int describeContents() {
@@ -2397,6 +2399,7 @@ public class ActivityManager {
dest.writeInt(displayId);
dest.writeInt(userId);
dest.writeInt(visible ? 1 : 0);
dest.writeInt(position);
if (topActivity != null) {
dest.writeInt(1);
topActivity.writeToParcel(dest, 0);
@@ -2426,6 +2429,7 @@ public class ActivityManager {
displayId = source.readInt();
userId = source.readInt();
visible = source.readInt() > 0;
position = source.readInt();
if (source.readInt() > 0) {
topActivity = ComponentName.readFromParcel(source);
}

View File

@@ -371,11 +371,19 @@ public class SystemServicesProxy {
try {
ActivityManager.StackInfo stackInfo = mIam.getStackInfo(
ActivityManager.StackId.HOME_STACK_ID);
ActivityManager.StackInfo fullscreenStackInfo = mIam.getStackInfo(
ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID);
ComponentName topActivity = stackInfo.topActivity;
if (isHomeStackVisible != null) {
isHomeStackVisible.value = stackInfo.visible;
boolean homeStackVisibleNotOccluded = stackInfo.visible;
if (fullscreenStackInfo != null) {
boolean isFullscreenStackOccludingHome = fullscreenStackInfo.visible &&
fullscreenStackInfo.position > stackInfo.position;
homeStackVisibleNotOccluded &= !isFullscreenStackOccludingHome;
}
return (stackInfo.visible && topActivity != null
if (isHomeStackVisible != null) {
isHomeStackVisible.value = homeStackVisibleNotOccluded;
}
return (homeStackVisibleNotOccluded && topActivity != null
&& topActivity.getPackageName().equals(RecentsImpl.RECENTS_PACKAGE)
&& (topActivity.getClassName().equals(RecentsImpl.RECENTS_ACTIVITY)
|| topActivity.getClassName().equals(RecentsTvImpl.RECENTS_TV_ACTIVITY)));

View File

@@ -123,7 +123,6 @@ import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_ALL;
@@ -3406,12 +3405,16 @@ public final class ActivityStackSupervisor implements DisplayListener {
}
private StackInfo getStackInfoLocked(ActivityStack stack) {
final ActivityDisplay display = mActivityDisplays.get(Display.DEFAULT_DISPLAY);
StackInfo info = new StackInfo();
mWindowManager.getStackBounds(stack.mStackId, info.bounds);
info.displayId = Display.DEFAULT_DISPLAY;
info.stackId = stack.mStackId;
info.userId = stack.mCurrentUser;
info.visible = stack.getStackVisibilityLocked(null) == STACK_VISIBLE;
info.position = display != null
? display.mStacks.indexOf(stack)
: 0;
ArrayList<TaskRecord> tasks = stack.getAllTasks();
final int numTasks = tasks.size();