Merge "Clear starting window request if remove is requested before it is added" into nyc-dev

This commit is contained in:
Wale Ogunwale
2016-02-26 21:22:10 +00:00
committed by Android (Google) Code Review
3 changed files with 51 additions and 19 deletions

View File

@@ -196,7 +196,12 @@ final class ActivityRecord {
private boolean inHistory; // are we in the history stack? private boolean inHistory; // are we in the history stack?
final ActivityStackSupervisor mStackSupervisor; final ActivityStackSupervisor mStackSupervisor;
boolean mStartingWindowShown = false;
static final int STARTING_WINDOW_NOT_SHOWN = 0;
static final int STARTING_WINDOW_SHOWN = 1;
static final int STARTING_WINDOW_REMOVED = 2;
int mStartingWindowState = STARTING_WINDOW_NOT_SHOWN;
boolean mUpdateTaskThumbnailWhenHidden; boolean mUpdateTaskThumbnailWhenHidden;
ActivityContainer mInitialActivityContainer; ActivityContainer mInitialActivityContainer;
@@ -214,6 +219,19 @@ final class ActivityRecord {
boolean pendingVoiceInteractionStart; // Waiting for activity-invoked voice session boolean pendingVoiceInteractionStart; // Waiting for activity-invoked voice session
IVoiceInteractionSession voiceSession; // Voice interaction session for this activity IVoiceInteractionSession voiceSession; // Voice interaction session for this activity
private static String startingWindowStateToString(int state) {
switch (state) {
case STARTING_WINDOW_NOT_SHOWN:
return "STARTING_WINDOW_NOT_SHOWN";
case STARTING_WINDOW_SHOWN:
return "STARTING_WINDOW_SHOWN";
case STARTING_WINDOW_REMOVED:
return "STARTING_WINDOW_REMOVED";
default:
return "unknown state=" + state;
}
}
void dump(PrintWriter pw, String prefix) { void dump(PrintWriter pw, String prefix) {
final long now = SystemClock.uptimeMillis(); final long now = SystemClock.uptimeMillis();
pw.print(prefix); pw.print("packageName="); pw.print(packageName); pw.print(prefix); pw.print("packageName="); pw.print(packageName);
@@ -320,8 +338,9 @@ final class ActivityRecord {
pw.print(" inHistory="); pw.print(inHistory); pw.print(" inHistory="); pw.print(inHistory);
pw.print(" visible="); pw.print(visible); pw.print(" visible="); pw.print(visible);
pw.print(" sleeping="); pw.print(sleeping); pw.print(" sleeping="); pw.print(sleeping);
pw.print(" idle="); pw.println(idle); pw.print(" idle="); pw.print(idle);
pw.print(" mStartingWindowShown="); pw.println(mStartingWindowShown); pw.print(" mStartingWindowState=");
pw.println(startingWindowStateToString(mStartingWindowState));
pw.print(prefix); pw.print("fullscreen="); pw.print(fullscreen); pw.print(prefix); pw.print("fullscreen="); pw.print(fullscreen);
pw.print(" noDisplay="); pw.print(noDisplay); pw.print(" noDisplay="); pw.print(noDisplay);
pw.print(" immersive="); pw.print(immersive); pw.print(" immersive="); pw.print(immersive);

View File

@@ -34,6 +34,8 @@ import static com.android.server.am.ActivityManagerService.LOCK_SCREEN_SHOWN;
import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE; import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE;
import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE; import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE;
import static com.android.server.am.ActivityRecord.STARTING_WINDOW_REMOVED;
import static com.android.server.am.ActivityRecord.STARTING_WINDOW_SHOWN;
import static com.android.server.am.ActivityStackSupervisor.FindTaskResult; import static com.android.server.am.ActivityStackSupervisor.FindTaskResult;
import static com.android.server.am.ActivityStackSupervisor.MOVING; import static com.android.server.am.ActivityStackSupervisor.MOVING;
import static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS; import static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS;
@@ -63,7 +65,6 @@ import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.net.Uri; import android.net.Uri;
@@ -1845,10 +1846,11 @@ final class ActivityStack {
continue; continue;
} }
if (r.state == ActivityState.INITIALIZING && r.mStartingWindowShown) { if (r.state == ActivityState.INITIALIZING
&& r.mStartingWindowState == STARTING_WINDOW_SHOWN) {
if (DEBUG_VISIBILITY) Slog.w(TAG_VISIBILITY, if (DEBUG_VISIBILITY) Slog.w(TAG_VISIBILITY,
"Found orphaned starting window " + r); "Found orphaned starting window " + r);
r.mStartingWindowShown = false; r.mStartingWindowState = STARTING_WINDOW_REMOVED;
mWindowManager.removeAppStartingWindow(r.appToken); mWindowManager.removeAppStartingWindow(r.appToken);
} }
} }
@@ -2263,7 +2265,7 @@ final class ActivityStack {
mService.compatibilityInfoForPackageLocked(next.info.applicationInfo), mService.compatibilityInfoForPackageLocked(next.info.applicationInfo),
next.nonLocalizedLabel, next.labelRes, next.icon, next.logo, next.nonLocalizedLabel, next.labelRes, next.icon, next.logo,
next.windowFlags, null, true); next.windowFlags, null, true);
next.mStartingWindowShown = true; next.mStartingWindowState = STARTING_WINDOW_SHOWN;
} }
mStackSupervisor.startSpecificActivityLocked(next, true, false); mStackSupervisor.startSpecificActivityLocked(next, true, false);
if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked(); if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
@@ -2296,7 +2298,7 @@ final class ActivityStack {
next.nonLocalizedLabel, next.nonLocalizedLabel,
next.labelRes, next.icon, next.logo, next.windowFlags, next.labelRes, next.icon, next.logo, next.windowFlags,
null, true); null, true);
next.mStartingWindowShown = true; next.mStartingWindowState = STARTING_WINDOW_SHOWN;
} }
if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "Restarting: " + next); if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "Restarting: " + next);
} }
@@ -2529,7 +2531,7 @@ final class ActivityStack {
r.info.applicationInfo), r.nonLocalizedLabel, r.info.applicationInfo), r.nonLocalizedLabel,
r.labelRes, r.icon, r.logo, r.windowFlags, r.labelRes, r.icon, r.logo, r.windowFlags,
prev != null ? prev.appToken : null, showStartingIcon); prev != null ? prev.appToken : null, showStartingIcon);
r.mStartingWindowShown = true; r.mStartingWindowState = STARTING_WINDOW_SHOWN;
} }
} else { } else {
// If this is the first activity, don't do any fancy animations, // If this is the first activity, don't do any fancy animations,

View File

@@ -4018,10 +4018,8 @@ public class WindowManagerService extends IWindowManager.Stub
public void removeAppStartingWindow(IBinder token) { public void removeAppStartingWindow(IBinder token) {
synchronized (mWindowMap) { synchronized (mWindowMap) {
AppWindowToken wtoken = mTokenMap.get(token).appWindowToken; final AppWindowToken wtoken = mTokenMap.get(token).appWindowToken;
if (wtoken.startingWindow != null) { scheduleRemoveStartingWindowLocked(wtoken);
scheduleRemoveStartingWindowLocked(wtoken);
}
} }
} }
@@ -4500,17 +4498,30 @@ public class WindowManagerService extends IWindowManager.Stub
} }
void scheduleRemoveStartingWindowLocked(AppWindowToken wtoken) { void scheduleRemoveStartingWindowLocked(AppWindowToken wtoken) {
if (wtoken == null) {
return;
}
if (mH.hasMessages(H.REMOVE_STARTING, wtoken)) { if (mH.hasMessages(H.REMOVE_STARTING, wtoken)) {
// Already scheduled. // Already scheduled.
return; return;
} }
if (wtoken != null && wtoken.startingWindow != null) {
if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, Debug.getCallers(1) + if (wtoken.startingWindow == null) {
": Schedule remove starting " + wtoken + (wtoken != null ? if (wtoken.startingData != null) {
" startingWindow=" + wtoken.startingWindow : "")); // Starting window has not been added yet, but it is scheduled to be added.
Message m = mH.obtainMessage(H.REMOVE_STARTING, wtoken); // Go ahead and cancel the request.
mH.sendMessage(m); if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM,
"Clearing startingData for token=" + wtoken);
wtoken.startingData = null;
}
return;
} }
if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, Debug.getCallers(1) +
": Schedule remove starting " + wtoken + (wtoken != null ?
" startingWindow=" + wtoken.startingWindow : ""));
Message m = mH.obtainMessage(H.REMOVE_STARTING, wtoken);
mH.sendMessage(m);
} }
void dumpAppTokensLocked() { void dumpAppTokensLocked() {