Loading services/java/com/android/server/am/ActivityStack.java +29 −96 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; import com.android.internal.app.HeavyWeightSwitcherActivity; import com.android.internal.os.BatteryStatsImpl; import com.android.internal.util.Objects; import com.android.server.am.ActivityManagerService.ItemMatcher; import com.android.server.am.ActivityManagerService.PendingActivityLaunch; import com.android.server.wm.AppTransition; Loading Loading @@ -473,29 +474,11 @@ final class ActivityStack { } final ActivityRecord topRunningActivityLocked(ActivityRecord notTop) { ActivityRecord newAr = newTopRunningActivityLocked(notTop); int i = mHistory.size()-1; while (i >= 0) { ActivityRecord r = mHistory.get(i); if (!r.finishing && r != notTop && okToShow(r)) { if (VALIDATE_TASK_REPLACE && newAr != r) logHistories( "topRunningActivityLocked", true); return r; } i--; } if (VALIDATE_TASK_REPLACE && newAr != null) Slog.w(TAG, "topRunningActivityLocked: mismatch: newAr!=null"); return null; } final ActivityRecord newTopRunningActivityLocked(ActivityRecord notTop) { for (int i = mTaskHistory.size() - 1; i >= 0; --i) { final TaskRecord task = mTaskHistory.get(i); for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { final TaskRecord task = mTaskHistory.get(taskNdx); final ArrayList<ActivityRecord> activities = task.mActivities; for (int j = activities.size() - 1; j >= 0; --j) { ActivityRecord r = activities.get(j); for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { ActivityRecord r = activities.get(activityNdx); if (!r.finishing && r != notTop && okToShow(r)) { return r; } Loading @@ -505,29 +488,11 @@ final class ActivityStack { } final ActivityRecord topRunningNonDelayedActivityLocked(ActivityRecord notTop) { ActivityRecord newAr = newTopRunningNonDelayedActivityLocked(notTop); int i = mHistory.size()-1; while (i >= 0) { ActivityRecord r = mHistory.get(i); if (!r.finishing && !r.delayedResume && r != notTop && okToShow(r)) { if (VALIDATE_TASK_REPLACE && newAr != r) Slog.w(TAG, "topRunningNonDelayedActivityLocked: mismatch: newAr=" + newAr + " r=" + r); return r; } i--; } if (VALIDATE_TASK_REPLACE && newAr != null) Slog.w(TAG, "topRunningNonDelayedActivityLocked: mismatch: newAr!=null"); return null; } final ActivityRecord newTopRunningNonDelayedActivityLocked(ActivityRecord notTop) { for (int i = mTaskHistory.size() - 1; i >= 0; --i) { final TaskRecord task = mTaskHistory.get(i); for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { final TaskRecord task = mTaskHistory.get(taskNdx); final ArrayList<ActivityRecord> activities = task.mActivities; for (int j = activities.size() - 1; j >= 0; --j) { ActivityRecord r = activities.get(j); for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { ActivityRecord r = activities.get(activityNdx); if (!r.finishing && !r.delayedResume && r != notTop && okToShow(r)) { return r; } Loading @@ -546,26 +511,6 @@ final class ActivityStack { * @return Returns the HistoryRecord of the next activity on the stack. */ final ActivityRecord topRunningActivityLocked(IBinder token, int taskId) { ActivityRecord newAr = newTopRunningActivityLocked(token, taskId); int i = mHistory.size()-1; while (i >= 0) { ActivityRecord r = mHistory.get(i); // Note: the taskId check depends on real taskId fields being non-zero if (!r.finishing && (token != r.appToken) && (taskId != r.task.taskId) && okToShow(r)) { if (VALIDATE_TASK_REPLACE && newAr != r) Slog.w(TAG, "topRunningActivityLocked(token): mismatch: newAr=" + newAr + " r=" + r); return r; } i--; } if (VALIDATE_TASK_REPLACE && newAr != null) Slog.w(TAG, "topRunningActivityLocked(token): mismatch: newAr!=null"); return null; } final ActivityRecord newTopRunningActivityLocked(IBinder token, int taskId) { for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { TaskRecord task = mTaskHistory.get(taskNdx); if (task.taskId == taskId) { Loading @@ -583,10 +528,6 @@ final class ActivityStack { return null; } private final int indexOfTokenLocked(IBinder token) { return mHistory.indexOf(ActivityRecord.forToken(token)); } final ActivityRecord isInStackLocked(IBinder token) { ActivityRecord newAr = newIsInStackLocked(token); Loading Loading @@ -4217,15 +4158,14 @@ final class ActivityStack { */ final boolean requestFinishActivityLocked(IBinder token, int resultCode, Intent resultData, String reason, boolean oomAdj) { int index = indexOfTokenLocked(token); ActivityRecord r = isInStackLocked(token); if (DEBUG_RESULTS || DEBUG_STATES) Slog.v( TAG, "Finishing activity @" + index + ": token=" + token TAG, "Finishing activity token=" + token + " r=" + ", result=" + resultCode + ", data=" + resultData + ", reason=" + reason); if (index < 0) { if (r == null) { return false; } ActivityRecord r = mHistory.get(index); finishActivityLocked(r, resultCode, resultData, reason, oomAdj); return true; Loading Loading @@ -4282,28 +4222,21 @@ final class ActivityStack { } final boolean finishActivityAffinityLocked(IBinder token) { int index = indexOfTokenLocked(token); ActivityRecord r = isInStackLocked(token); if (DEBUG_RESULTS) Slog.v( TAG, "Finishing activity affinity @" + index + ": token=" + token); if (index < 0) { TAG, "Finishing activity affinity token=" + token + " r=" + r); if (r == null) { return false; } ActivityRecord r = mHistory.get(index); while (index >= 0) { ActivityRecord cur = mHistory.get(index); if (cur.task != r.task) { break; } if (cur.taskAffinity == null && r.taskAffinity != null) { break; } if (cur.taskAffinity != null && !cur.taskAffinity.equals(r.taskAffinity)) { ArrayList<ActivityRecord> activities = r.task.mActivities; for (int index = activities.indexOf(r); index >= 0; --index) { ActivityRecord cur = activities.get(index); if (!Objects.equal(cur.taskAffinity, r.taskAffinity)) { break; } finishActivityLocked(cur, Activity.RESULT_CANCELED, null, "request-affinity", true); index--; } return true; } Loading Loading
services/java/com/android/server/am/ActivityStack.java +29 −96 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED; import com.android.internal.app.HeavyWeightSwitcherActivity; import com.android.internal.os.BatteryStatsImpl; import com.android.internal.util.Objects; import com.android.server.am.ActivityManagerService.ItemMatcher; import com.android.server.am.ActivityManagerService.PendingActivityLaunch; import com.android.server.wm.AppTransition; Loading Loading @@ -473,29 +474,11 @@ final class ActivityStack { } final ActivityRecord topRunningActivityLocked(ActivityRecord notTop) { ActivityRecord newAr = newTopRunningActivityLocked(notTop); int i = mHistory.size()-1; while (i >= 0) { ActivityRecord r = mHistory.get(i); if (!r.finishing && r != notTop && okToShow(r)) { if (VALIDATE_TASK_REPLACE && newAr != r) logHistories( "topRunningActivityLocked", true); return r; } i--; } if (VALIDATE_TASK_REPLACE && newAr != null) Slog.w(TAG, "topRunningActivityLocked: mismatch: newAr!=null"); return null; } final ActivityRecord newTopRunningActivityLocked(ActivityRecord notTop) { for (int i = mTaskHistory.size() - 1; i >= 0; --i) { final TaskRecord task = mTaskHistory.get(i); for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { final TaskRecord task = mTaskHistory.get(taskNdx); final ArrayList<ActivityRecord> activities = task.mActivities; for (int j = activities.size() - 1; j >= 0; --j) { ActivityRecord r = activities.get(j); for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { ActivityRecord r = activities.get(activityNdx); if (!r.finishing && r != notTop && okToShow(r)) { return r; } Loading @@ -505,29 +488,11 @@ final class ActivityStack { } final ActivityRecord topRunningNonDelayedActivityLocked(ActivityRecord notTop) { ActivityRecord newAr = newTopRunningNonDelayedActivityLocked(notTop); int i = mHistory.size()-1; while (i >= 0) { ActivityRecord r = mHistory.get(i); if (!r.finishing && !r.delayedResume && r != notTop && okToShow(r)) { if (VALIDATE_TASK_REPLACE && newAr != r) Slog.w(TAG, "topRunningNonDelayedActivityLocked: mismatch: newAr=" + newAr + " r=" + r); return r; } i--; } if (VALIDATE_TASK_REPLACE && newAr != null) Slog.w(TAG, "topRunningNonDelayedActivityLocked: mismatch: newAr!=null"); return null; } final ActivityRecord newTopRunningNonDelayedActivityLocked(ActivityRecord notTop) { for (int i = mTaskHistory.size() - 1; i >= 0; --i) { final TaskRecord task = mTaskHistory.get(i); for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { final TaskRecord task = mTaskHistory.get(taskNdx); final ArrayList<ActivityRecord> activities = task.mActivities; for (int j = activities.size() - 1; j >= 0; --j) { ActivityRecord r = activities.get(j); for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) { ActivityRecord r = activities.get(activityNdx); if (!r.finishing && !r.delayedResume && r != notTop && okToShow(r)) { return r; } Loading @@ -546,26 +511,6 @@ final class ActivityStack { * @return Returns the HistoryRecord of the next activity on the stack. */ final ActivityRecord topRunningActivityLocked(IBinder token, int taskId) { ActivityRecord newAr = newTopRunningActivityLocked(token, taskId); int i = mHistory.size()-1; while (i >= 0) { ActivityRecord r = mHistory.get(i); // Note: the taskId check depends on real taskId fields being non-zero if (!r.finishing && (token != r.appToken) && (taskId != r.task.taskId) && okToShow(r)) { if (VALIDATE_TASK_REPLACE && newAr != r) Slog.w(TAG, "topRunningActivityLocked(token): mismatch: newAr=" + newAr + " r=" + r); return r; } i--; } if (VALIDATE_TASK_REPLACE && newAr != null) Slog.w(TAG, "topRunningActivityLocked(token): mismatch: newAr!=null"); return null; } final ActivityRecord newTopRunningActivityLocked(IBinder token, int taskId) { for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { TaskRecord task = mTaskHistory.get(taskNdx); if (task.taskId == taskId) { Loading @@ -583,10 +528,6 @@ final class ActivityStack { return null; } private final int indexOfTokenLocked(IBinder token) { return mHistory.indexOf(ActivityRecord.forToken(token)); } final ActivityRecord isInStackLocked(IBinder token) { ActivityRecord newAr = newIsInStackLocked(token); Loading Loading @@ -4217,15 +4158,14 @@ final class ActivityStack { */ final boolean requestFinishActivityLocked(IBinder token, int resultCode, Intent resultData, String reason, boolean oomAdj) { int index = indexOfTokenLocked(token); ActivityRecord r = isInStackLocked(token); if (DEBUG_RESULTS || DEBUG_STATES) Slog.v( TAG, "Finishing activity @" + index + ": token=" + token TAG, "Finishing activity token=" + token + " r=" + ", result=" + resultCode + ", data=" + resultData + ", reason=" + reason); if (index < 0) { if (r == null) { return false; } ActivityRecord r = mHistory.get(index); finishActivityLocked(r, resultCode, resultData, reason, oomAdj); return true; Loading Loading @@ -4282,28 +4222,21 @@ final class ActivityStack { } final boolean finishActivityAffinityLocked(IBinder token) { int index = indexOfTokenLocked(token); ActivityRecord r = isInStackLocked(token); if (DEBUG_RESULTS) Slog.v( TAG, "Finishing activity affinity @" + index + ": token=" + token); if (index < 0) { TAG, "Finishing activity affinity token=" + token + " r=" + r); if (r == null) { return false; } ActivityRecord r = mHistory.get(index); while (index >= 0) { ActivityRecord cur = mHistory.get(index); if (cur.task != r.task) { break; } if (cur.taskAffinity == null && r.taskAffinity != null) { break; } if (cur.taskAffinity != null && !cur.taskAffinity.equals(r.taskAffinity)) { ArrayList<ActivityRecord> activities = r.task.mActivities; for (int index = activities.indexOf(r); index >= 0; --index) { ActivityRecord cur = activities.get(index); if (!Objects.equal(cur.taskAffinity, r.taskAffinity)) { break; } finishActivityLocked(cur, Activity.RESULT_CANCELED, null, "request-affinity", true); index--; } return true; } Loading