Replace waitingVisible and other refactors
- ActivityRecord.waitingVisible is identical to
ActivityStackSupervisor.mWaitingVisibleActivities.contains(). This
ArrayList is never very large so much code can be simplified by
eliminating the waitingVisible member.
- The processStoppingActivityLocked() method can eliminate a lot of
variables by traversing the list top down. This makes the code
simpler to analyze and maintain.
- Declarations of ArrayLists do not need parameterization in the new
constructor. These have been removed in ActivityStackSupervisor.
Fixes item #5 of bug 18088522.
Change-Id: Ib9d648c5fa32c8dd7313882864886c929e1ebc21
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 9223503..50bbbc3b 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -958,9 +958,7 @@
prev = finishCurrentActivityLocked(prev, FINISH_AFTER_VISIBLE, false);
} else if (prev.app != null) {
if (DEBUG_PAUSE) Slog.v(TAG, "Enqueueing pending stop: " + prev);
- if (prev.waitingVisible) {
- prev.waitingVisible = false;
- mStackSupervisor.mWaitingVisibleActivities.remove(prev);
+ if (mStackSupervisor.mWaitingVisibleActivities.remove(prev)) {
if (DEBUG_SWITCH || DEBUG_PAUSE) Slog.v(
TAG, "Complete pause, no longer waiting: " + prev);
}
@@ -1570,7 +1568,6 @@
mStackSupervisor.mGoingToSleepActivities.remove(next);
next.sleeping = false;
mStackSupervisor.mWaitingVisibleActivities.remove(next);
- next.waitingVisible = false;
if (DEBUG_SWITCH) Slog.v(TAG, "Resuming " + next);
@@ -1647,8 +1644,8 @@
}
if (prev != null && prev != next) {
- if (!prev.waitingVisible && next != null && !next.nowVisible) {
- prev.waitingVisible = true;
+ if (!mStackSupervisor.mWaitingVisibleActivities.contains(prev)
+ && next != null && !next.nowVisible) {
mStackSupervisor.mWaitingVisibleActivities.add(prev);
if (DEBUG_SWITCH) Slog.v(
TAG, "Resuming top, waiting visible to hide: " + prev);
@@ -1665,13 +1662,14 @@
mWindowManager.setAppVisibility(prev.appToken, false);
if (DEBUG_SWITCH) Slog.v(TAG, "Not waiting for visible to hide: "
+ prev + ", waitingVisible="
- + (prev != null ? prev.waitingVisible : null)
+ + mStackSupervisor.mWaitingVisibleActivities.contains(prev)
+ ", nowVisible=" + next.nowVisible);
} else {
- if (DEBUG_SWITCH) Slog.v(TAG, "Previous already visible but still waiting to hide: "
- + prev + ", waitingVisible="
- + (prev != null ? prev.waitingVisible : null)
- + ", nowVisible=" + next.nowVisible);
+ if (DEBUG_SWITCH) Slog.v(TAG,
+ "Previous already visible but still waiting to hide: " + prev
+ + ", waitingVisible="
+ + mStackSupervisor.mWaitingVisibleActivities.contains(prev)
+ + ", nowVisible=" + next.nowVisible);
}
}
}
@@ -2782,7 +2780,6 @@
mStackSupervisor.mStoppingActivities.remove(r);
mStackSupervisor.mGoingToSleepActivities.remove(r);
mStackSupervisor.mWaitingVisibleActivities.remove(r);
- r.waitingVisible = false;
if (mResumedActivity == r) {
mResumedActivity = null;
}
@@ -2800,7 +2797,7 @@
if (activityRemoved) {
mStackSupervisor.resumeTopActivitiesLocked();
}
- if (DEBUG_CONTAINERS) Slog.d(TAG,
+ if (DEBUG_CONTAINERS) Slog.d(TAG,
"destroyActivityLocked: finishCurrentActivityLocked r=" + r +
" destroy returned removed=" + activityRemoved);
return activityRemoved ? null : r;
@@ -2984,7 +2981,6 @@
// down to the max limit while they are still waiting to finish.
mStackSupervisor.mFinishingActivities.remove(r);
mStackSupervisor.mWaitingVisibleActivities.remove(r);
- r.waitingVisible = false;
// Remove any pending results.
if (r.finishing && r.pendingResults != null) {