Add new Activity.finishAffinity() method.
It's cool!
Change-Id: I9fdcd9535b7f1ca2b311d3a1b23e5d058977b095
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index c8e015b..25fae83 100755
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -3497,6 +3497,51 @@
return true;
}
+ final void finishSubActivityLocked(IBinder token, String resultWho, int requestCode) {
+ ActivityRecord self = isInStackLocked(token);
+ if (self == null) {
+ return;
+ }
+
+ int i;
+ for (i=mHistory.size()-1; i>=0; i--) {
+ ActivityRecord r = (ActivityRecord)mHistory.get(i);
+ if (r.resultTo == self && r.requestCode == requestCode) {
+ if ((r.resultWho == null && resultWho == null) ||
+ (r.resultWho != null && r.resultWho.equals(resultWho))) {
+ finishActivityLocked(r, i,
+ Activity.RESULT_CANCELED, null, "request-sub");
+ }
+ }
+ }
+ }
+
+ final boolean finishActivityAffinityLocked(IBinder token) {
+ int index = indexOfTokenLocked(token);
+ if (DEBUG_RESULTS) Slog.v(
+ TAG, "Finishing activity affinity @" + index + ": token=" + token);
+ if (index < 0) {
+ 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)) {
+ break;
+ }
+ finishActivityLocked(cur, index, Activity.RESULT_CANCELED, null, "request-affinity");
+ index--;
+ }
+ return true;
+ }
+
final void finishActivityResultsLocked(ActivityRecord r, int resultCode, Intent resultData) {
// send the result
ActivityRecord resultTo = r.resultTo;