Loading services/java/com/android/server/am/ActivityRecord.java +15 −0 Original line number Diff line number Diff line Loading @@ -602,6 +602,15 @@ final class ActivityRecord { } } void updateOptionsLocked(ActivityOptions options) { if (options != null) { if (pendingOptions != null) { pendingOptions.abort(); } pendingOptions = options; } } void applyOptionsLocked() { if (pendingOptions != null) { final int animationType = pendingOptions.getAnimationType(); Loading Loading @@ -653,6 +662,12 @@ final class ActivityRecord { } } ActivityOptions takeOptionsLocked() { ActivityOptions opts = pendingOptions; pendingOptions = null; return opts; } void removeUriPermissionsLocked() { if (uriPermissions != null) { uriPermissions.removeUriPermissionsLocked(); Loading services/java/com/android/server/am/ActivityStack.java +33 −1 Original line number Diff line number Diff line Loading @@ -1963,6 +1963,8 @@ final class ActivityStack { int taskTopI = -1; int replyChainEnd = -1; int lastReparentPos = -1; ActivityOptions topOptions = null; boolean canMoveOptions = true; for (int i=mHistory.size()-1; i>=-1; i--) { ActivityRecord below = i >= 0 ? mHistory.get(i) : null; Loading Loading @@ -2048,6 +2050,7 @@ final class ActivityStack { } int dstPos = 0; ThumbnailHolder curThumbHolder = target.thumbHolder; boolean gotOptions = !canMoveOptions; for (int srcPos=targetI; srcPos<=replyChainEnd; srcPos++) { p = mHistory.get(srcPos); if (p.finishing) { Loading @@ -2057,6 +2060,13 @@ final class ActivityStack { + " out to target's task " + target.task); p.setTask(target.task, curThumbHolder, false); curThumbHolder = p.thumbHolder; canMoveOptions = false; if (!gotOptions && topOptions == null) { topOptions = p.takeOptionsLocked(); if (topOptions != null) { gotOptions = true; } } if (DEBUG_ADD_REMOVE) { RuntimeException here = new RuntimeException("here"); here.fillInStackTrace(); Loading Loading @@ -2101,11 +2111,19 @@ final class ActivityStack { replyChainEnd = targetI; } ActivityRecord p = null; boolean gotOptions = !canMoveOptions; for (int srcPos=targetI; srcPos<=replyChainEnd; srcPos++) { p = mHistory.get(srcPos); if (p.finishing) { continue; } canMoveOptions = false; if (!gotOptions && topOptions == null) { topOptions = p.takeOptionsLocked(); if (topOptions != null) { gotOptions = true; } } if (finishActivityLocked(p, srcPos, Activity.RESULT_CANCELED, null, "reset", false)) { replyChainEnd--; Loading Loading @@ -2246,6 +2264,16 @@ final class ActivityStack { targetI = i; } if (topOptions != null) { // If we got some ActivityOptions from an activity on top that // was removed from the task, propagate them to the new real top. if (taskTop != null) { taskTop.updateOptionsLocked(topOptions); } else { topOptions.abort(); } } return taskTop; } Loading Loading @@ -2296,6 +2324,10 @@ final class ActivityStack { if (r.finishing) { continue; } ActivityOptions opts = r.takeOptionsLocked(); if (opts != null) { ret.updateOptionsLocked(opts); } if (finishActivityLocked(r, i, Activity.RESULT_CANCELED, null, "clear", false)) { i--; Loading Loading
services/java/com/android/server/am/ActivityRecord.java +15 −0 Original line number Diff line number Diff line Loading @@ -602,6 +602,15 @@ final class ActivityRecord { } } void updateOptionsLocked(ActivityOptions options) { if (options != null) { if (pendingOptions != null) { pendingOptions.abort(); } pendingOptions = options; } } void applyOptionsLocked() { if (pendingOptions != null) { final int animationType = pendingOptions.getAnimationType(); Loading Loading @@ -653,6 +662,12 @@ final class ActivityRecord { } } ActivityOptions takeOptionsLocked() { ActivityOptions opts = pendingOptions; pendingOptions = null; return opts; } void removeUriPermissionsLocked() { if (uriPermissions != null) { uriPermissions.removeUriPermissionsLocked(); Loading
services/java/com/android/server/am/ActivityStack.java +33 −1 Original line number Diff line number Diff line Loading @@ -1963,6 +1963,8 @@ final class ActivityStack { int taskTopI = -1; int replyChainEnd = -1; int lastReparentPos = -1; ActivityOptions topOptions = null; boolean canMoveOptions = true; for (int i=mHistory.size()-1; i>=-1; i--) { ActivityRecord below = i >= 0 ? mHistory.get(i) : null; Loading Loading @@ -2048,6 +2050,7 @@ final class ActivityStack { } int dstPos = 0; ThumbnailHolder curThumbHolder = target.thumbHolder; boolean gotOptions = !canMoveOptions; for (int srcPos=targetI; srcPos<=replyChainEnd; srcPos++) { p = mHistory.get(srcPos); if (p.finishing) { Loading @@ -2057,6 +2060,13 @@ final class ActivityStack { + " out to target's task " + target.task); p.setTask(target.task, curThumbHolder, false); curThumbHolder = p.thumbHolder; canMoveOptions = false; if (!gotOptions && topOptions == null) { topOptions = p.takeOptionsLocked(); if (topOptions != null) { gotOptions = true; } } if (DEBUG_ADD_REMOVE) { RuntimeException here = new RuntimeException("here"); here.fillInStackTrace(); Loading Loading @@ -2101,11 +2111,19 @@ final class ActivityStack { replyChainEnd = targetI; } ActivityRecord p = null; boolean gotOptions = !canMoveOptions; for (int srcPos=targetI; srcPos<=replyChainEnd; srcPos++) { p = mHistory.get(srcPos); if (p.finishing) { continue; } canMoveOptions = false; if (!gotOptions && topOptions == null) { topOptions = p.takeOptionsLocked(); if (topOptions != null) { gotOptions = true; } } if (finishActivityLocked(p, srcPos, Activity.RESULT_CANCELED, null, "reset", false)) { replyChainEnd--; Loading Loading @@ -2246,6 +2264,16 @@ final class ActivityStack { targetI = i; } if (topOptions != null) { // If we got some ActivityOptions from an activity on top that // was removed from the task, propagate them to the new real top. if (taskTop != null) { taskTop.updateOptionsLocked(topOptions); } else { topOptions.abort(); } } return taskTop; } Loading Loading @@ -2296,6 +2324,10 @@ final class ActivityStack { if (r.finishing) { continue; } ActivityOptions opts = r.takeOptionsLocked(); if (opts != null) { ret.updateOptionsLocked(opts); } if (finishActivityLocked(r, i, Activity.RESULT_CANCELED, null, "clear", false)) { i--; Loading