Limit screenshots to specified activity and stack.
The screenshots were capturing the entire screen. Now they are limited
to the stack containing the activity.
Add debug for stack states.
Change-Id: I6d47cd37091bfdfd94e7abe89826b7ba8cb69b51
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index d743ab6..a6ab6f4 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -216,20 +216,17 @@
}
}
- boolean isFocusedStack(ActivityStack stack) {
- return getFocusedStack() == stack;
- }
-
boolean isFrontStack(ActivityStack stack) {
- if (stack.mCurrentUser != mCurrentUser) {
- return false;
- }
- return !(stack.isHomeStack() ^ getFocusedStack().isHomeStack());
+ return (stack.mCurrentUser == mCurrentUser) &&
+ !(stack.isHomeStack() ^ getFocusedStack().isHomeStack());
}
void moveHomeStack(boolean toFront) {
final boolean homeInFront = isFrontStack(mHomeStack);
if (homeInFront ^ toFront) {
+ if (DEBUG_STACK) Slog.d(TAG, "moveHomeTask: mStackState old=" +
+ stackStateToString(mStackState) + " new=" + stackStateToString(homeInFront ?
+ STACK_STATE_HOME_TO_BACK : STACK_STATE_HOME_TO_FRONT));
mStackState = homeInFront ? STACK_STATE_HOME_TO_BACK : STACK_STATE_HOME_TO_FRONT;
}
}
@@ -382,9 +379,15 @@
// TODO: Not sure if this should check if all Paused are complete too.
switch (mStackState) {
case STACK_STATE_HOME_TO_BACK:
+ if (DEBUG_STACK) Slog.d(TAG, "allResumedActivitiesComplete: mStackState old=" +
+ stackStateToString(STACK_STATE_HOME_TO_BACK) + " new=" +
+ stackStateToString(STACK_STATE_HOME_IN_BACK));
mStackState = STACK_STATE_HOME_IN_BACK;
break;
case STACK_STATE_HOME_TO_FRONT:
+ if (DEBUG_STACK) Slog.d(TAG, "allResumedActivitiesComplete: mStackState old=" +
+ stackStateToString(STACK_STATE_HOME_TO_FRONT) + " new=" +
+ stackStateToString(STACK_STATE_HOME_IN_FRONT));
mStackState = STACK_STATE_HOME_IN_FRONT;
break;
}
@@ -478,7 +481,6 @@
ActivityRecord getTasksLocked(int maxNum, IThumbnailReceiver receiver,
PendingThumbnailsRecord pending, List<RunningTaskInfo> list) {
ActivityRecord r = null;
- final int numStacks = mStacks.size();
for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
final ActivityStack stack = mStacks.get(stackNdx);
final ActivityRecord ar =
@@ -588,16 +590,14 @@
if (mService.mHeavyWeightProcess != null &&
(mService.mHeavyWeightProcess.info.uid != aInfo.applicationInfo.uid ||
!mService.mHeavyWeightProcess.processName.equals(aInfo.processName))) {
- int realCallingPid = callingPid;
int realCallingUid = callingUid;
if (caller != null) {
ProcessRecord callerApp = mService.getRecordForAppLocked(caller);
if (callerApp != null) {
- realCallingPid = callerApp.pid;
realCallingUid = callerApp.info.uid;
} else {
Slog.w(TAG, "Unable to find app for caller " + caller
- + " (pid=" + realCallingPid + ") when starting: "
+ + " (pid=" + callingPid + ") when starting: "
+ intent.toString());
ActivityOptions.abort(options);
return ActivityManager.START_PERMISSION_DENIED;
@@ -716,7 +716,6 @@
throw new IllegalArgumentException("intents are length different than resolvedTypes");
}
- ActivityRecord[] outActivity = new ActivityRecord[1];
int callingPid;
if (callingUid >= 0) {
@@ -730,7 +729,7 @@
final long origId = Binder.clearCallingIdentity();
try {
synchronized (mService) {
-
+ ActivityRecord[] outActivity = new ActivityRecord[1];
for (int i=0; i<intents.length; i++) {
Intent intent = intents[i];
if (intent == null) {
@@ -1184,11 +1183,19 @@
}
if (!r.isApplicationActivity() || (r.task != null && !r.task.isApplicationTask())) {
if (mStackState != STACK_STATE_HOME_IN_FRONT) {
+ if (DEBUG_STACK) Slog.d(TAG, "setFocusedStack: mStackState old=" +
+ stackStateToString(mStackState) + " new=" +
+ stackStateToString(STACK_STATE_HOME_TO_FRONT) +
+ " Callers=" + Debug.getCallers(3));
mStackState = STACK_STATE_HOME_TO_FRONT;
}
} else {
mFocusedStack = r.task.stack;
if (mStackState != STACK_STATE_HOME_IN_BACK) {
+ if (DEBUG_STACK) Slog.d(TAG, "setFocusedStack: mStackState old=" +
+ stackStateToString(mStackState) + " new=" +
+ stackStateToString(STACK_STATE_HOME_TO_BACK) +
+ " Callers=" + Debug.getCallers(3));
mStackState = STACK_STATE_HOME_TO_BACK;
}
}
@@ -1994,6 +2001,8 @@
mUserStates.delete(userId);
} else {
mFocusedStack = null;
+ if (DEBUG_STACK) Slog.d(TAG, "switchUserLocked: mStackState=" +
+ stackStateToString(STACK_STATE_HOME_IN_FRONT));
mStackState = STACK_STATE_HOME_IN_FRONT;
}
@@ -2077,9 +2086,20 @@
}
}
+ private static String stackStateToString(int stackState) {
+ switch (stackState) {
+ case STACK_STATE_HOME_IN_FRONT: return "STACK_STATE_HOME_IN_FRONT";
+ case STACK_STATE_HOME_TO_BACK: return "STACK_STATE_HOME_TO_BACK";
+ case STACK_STATE_HOME_IN_BACK: return "STACK_STATE_HOME_IN_BACK";
+ case STACK_STATE_HOME_TO_FRONT: return "STACK_STATE_HOME_TO_FRONT";
+ default: return "Unknown stackState=" + stackState;
+ }
+ }
+
public void dump(PrintWriter pw, String prefix) {
pw.print(prefix); pw.print("mDismissKeyguardOnNextActivity:");
pw.println(mDismissKeyguardOnNextActivity);
+ pw.print(prefix); pw.print("mStackState="); pw.println(stackStateToString(mStackState));
}
ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) {
@@ -2088,6 +2108,7 @@
boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, boolean dumpAll,
boolean dumpClient, String dumpPackage) {
+ pw.print(" mStackState="); pw.println(stackStateToString(mStackState));
final int numStacks = mStacks.size();
for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) {
final ActivityStack stack = mStacks.get(stackNdx);
@@ -2143,7 +2164,7 @@
return true;
}
- static final void dumpHistoryList(FileDescriptor fd, PrintWriter pw, List<ActivityRecord> list,
+ static void dumpHistoryList(FileDescriptor fd, PrintWriter pw, List<ActivityRecord> list,
String prefix, String label, boolean complete, boolean brief, boolean client,
String dumpPackage) {
TaskRecord lastTask = null;
@@ -2285,6 +2306,8 @@
void restore() {
ActivityStackSupervisor supervisor = ActivityStackSupervisor.this;
supervisor.mFocusedStack = mSavedFocusedStack;
+ if (DEBUG_STACK) Slog.d(TAG, "UserState.restore: mStackState old=" +
+ stackStateToString(mSavedStackState));
supervisor.mStackState = mSavedStackState;
}
}