summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2012-09-19 11:40:17 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-09-19 11:40:18 -0700
commit09ad0832e0c28fa43a2e2bf53bef87df39bd4416 (patch)
tree70998ba8626ea406832c2bcaa3cf4bfa1e3474e1 /services
parent5580005cc7f333e15326b219a0ff06b7c6eca529 (diff)
parent15491c6a728131e322c45bc440500a8a78e4a410 (diff)
downloadframeworks_base-09ad0832e0c28fa43a2e2bf53bef87df39bd4416.zip
frameworks_base-09ad0832e0c28fa43a2e2bf53bef87df39bd4416.tar.gz
frameworks_base-09ad0832e0c28fa43a2e2bf53bef87df39bd4416.tar.bz2
Merge "Switch to showing top-most thumbnail of recent apps." into jb-mr1-dev
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java13
-rw-r--r--services/java/com/android/server/am/ActivityRecord.java18
-rwxr-xr-xservices/java/com/android/server/am/ActivityStack.java46
-rw-r--r--services/java/com/android/server/am/TaskAccessInfo.java3
4 files changed, 54 insertions, 26 deletions
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 66b60ec..b8c72f8 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -168,6 +168,7 @@ public final class ActivityManagerService extends ActivityManagerNative
static final boolean localLOGV = DEBUG;
static final boolean DEBUG_SWITCH = localLOGV || false;
static final boolean DEBUG_TASKS = localLOGV || false;
+ static final boolean DEBUG_THUMBNAILS = localLOGV || false;
static final boolean DEBUG_PAUSE = localLOGV || false;
static final boolean DEBUG_OOM_ADJ = localLOGV || false;
static final boolean DEBUG_TRANSITION = localLOGV || false;
@@ -5849,6 +5850,18 @@ public final class ActivityManagerService extends ActivityManagerNative
return null;
}
+ public Bitmap getTaskTopThumbnail(int id) {
+ synchronized (this) {
+ enforceCallingPermission(android.Manifest.permission.READ_FRAME_BUFFER,
+ "getTaskTopThumbnail()");
+ TaskRecord tr = taskForIdLocked(id);
+ if (tr != null) {
+ return mMainStack.getTaskTopThumbnailLocked(tr);
+ }
+ }
+ return null;
+ }
+
public boolean removeSubTask(int taskId, int subTaskIndex) {
synchronized (this) {
enforceCallingPermission(android.Manifest.permission.REMOVE_TASKS,
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java
index 009fb5d..7ff5748 100644
--- a/services/java/com/android/server/am/ActivityRecord.java
+++ b/services/java/com/android/server/am/ActivityRecord.java
@@ -219,7 +219,13 @@ final class ActivityRecord {
pw.print(prefix); pw.print("frozenBeforeDestroy="); pw.print(frozenBeforeDestroy);
pw.print(" thumbnailNeeded="); pw.print(thumbnailNeeded);
pw.print(" forceNewConfig="); pw.println(forceNewConfig);
- pw.print(prefix); pw.print("thumbHolder="); pw.println(thumbHolder);
+ pw.print(prefix); pw.print("thumbHolder: ");
+ pw.print(Integer.toHexString(System.identityHashCode(thumbHolder)));
+ if (thumbHolder != null) {
+ pw.print(" bm="); pw.print(thumbHolder.lastThumbnail);
+ pw.print(" desc="); pw.print(thumbHolder.lastDescription);
+ }
+ pw.println();
if (launchTime != 0 || startTime != 0) {
pw.print(prefix); pw.print("launchTime=");
if (launchTime == 0) pw.print("0");
@@ -674,19 +680,15 @@ final class ActivityRecord {
}
if (thumbHolder != null) {
if (newThumbnail != null) {
+ if (ActivityManagerService.DEBUG_THUMBNAILS) Slog.i(ActivityManagerService.TAG,
+ "Setting thumbnail of " + this + " holder " + thumbHolder
+ + " to " + newThumbnail);
thumbHolder.lastThumbnail = newThumbnail;
}
thumbHolder.lastDescription = description;
}
}
- void clearThumbnail() {
- if (thumbHolder != null) {
- thumbHolder.lastThumbnail = null;
- thumbHolder.lastDescription = null;
- }
- }
-
void startLaunchTickingLocked() {
if (ActivityManagerService.IS_USER_BUILD) {
return;
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 29ee0bc..df50d89 100755
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -1203,8 +1203,7 @@ final class ActivityStack {
if (mMainStack) {
mService.reportResumedActivityLocked(next);
}
-
- next.clearThumbnail();
+
if (mMainStack) {
mService.setFocusedActivityLocked(next);
}
@@ -4328,18 +4327,33 @@ final class ActivityStack {
finishTaskMoveLocked(task);
return true;
}
-
+
public ActivityManager.TaskThumbnails getTaskThumbnailsLocked(TaskRecord tr) {
TaskAccessInfo info = getTaskAccessInfoLocked(tr.taskId, true);
ActivityRecord resumed = mResumedActivity;
if (resumed != null && resumed.thumbHolder == tr) {
info.mainThumbnail = resumed.stack.screenshotActivities(resumed);
- } else {
- info.mainThumbnail = tr.lastThumbnail;
}
return info;
}
+ public Bitmap getTaskTopThumbnailLocked(TaskRecord tr) {
+ ActivityRecord resumed = mResumedActivity;
+ if (resumed != null && resumed.task == tr) {
+ // This task is the current resumed task, we just need to take
+ // a screenshot of it and return that.
+ return resumed.stack.screenshotActivities(resumed);
+ }
+ // Return the information about the task, to figure out the top
+ // thumbnail to return.
+ TaskAccessInfo info = getTaskAccessInfoLocked(tr.taskId, true);
+ if (info.numSubThumbbails <= 0) {
+ return info.mainThumbnail;
+ } else {
+ return info.subtasks.get(info.numSubThumbbails-1).holder.lastThumbnail;
+ }
+ }
+
public ActivityRecord removeTaskActivitiesLocked(int taskId, int subTaskIndex,
boolean taskRequired) {
TaskAccessInfo info = getTaskAccessInfoLocked(taskId, false);
@@ -4370,7 +4384,6 @@ final class ActivityStack {
}
public TaskAccessInfo getTaskAccessInfoLocked(int taskId, boolean inclThumbs) {
- ActivityRecord resumed = mResumedActivity;
final TaskAccessInfo thumbs = new TaskAccessInfo();
// How many different sub-thumbnails?
final int NA = mHistory.size();
@@ -4380,6 +4393,10 @@ final class ActivityStack {
ActivityRecord ar = mHistory.get(j);
if (!ar.finishing && ar.task.taskId == taskId) {
holder = ar.thumbHolder;
+ if (holder != null) {
+ thumbs.mainThumbnail = holder.lastThumbnail;
+ }
+ j++;
break;
}
j++;
@@ -4394,7 +4411,6 @@ final class ActivityStack {
ArrayList<TaskAccessInfo.SubTask> subtasks = new ArrayList<TaskAccessInfo.SubTask>();
thumbs.subtasks = subtasks;
- ActivityRecord lastActivity = null;
while (j < NA) {
ActivityRecord ar = mHistory.get(j);
j++;
@@ -4404,30 +4420,28 @@ final class ActivityStack {
if (ar.task.taskId != taskId) {
break;
}
- lastActivity = ar;
if (ar.thumbHolder != holder && holder != null) {
thumbs.numSubThumbbails++;
holder = ar.thumbHolder;
TaskAccessInfo.SubTask sub = new TaskAccessInfo.SubTask();
- sub.thumbnail = holder.lastThumbnail;
+ sub.holder = holder;
sub.activity = ar;
sub.index = j-1;
subtasks.add(sub);
}
}
- if (lastActivity != null && subtasks.size() > 0) {
- if (resumed == lastActivity) {
- TaskAccessInfo.SubTask sub = subtasks.get(subtasks.size()-1);
- sub.thumbnail = lastActivity.stack.screenshotActivities(lastActivity);
- }
- }
if (thumbs.numSubThumbbails > 0) {
thumbs.retriever = new IThumbnailRetriever.Stub() {
public Bitmap getThumbnail(int index) {
if (index < 0 || index >= thumbs.subtasks.size()) {
return null;
}
- return thumbs.subtasks.get(index).thumbnail;
+ TaskAccessInfo.SubTask sub = thumbs.subtasks.get(index);
+ ActivityRecord resumed = mResumedActivity;
+ if (resumed != null && resumed.thumbHolder == sub.holder) {
+ return resumed.stack.screenshotActivities(resumed);
+ }
+ return sub.holder.lastThumbnail;
}
};
}
diff --git a/services/java/com/android/server/am/TaskAccessInfo.java b/services/java/com/android/server/am/TaskAccessInfo.java
index 5618c1a..50aeec1 100644
--- a/services/java/com/android/server/am/TaskAccessInfo.java
+++ b/services/java/com/android/server/am/TaskAccessInfo.java
@@ -19,11 +19,10 @@ package com.android.server.am;
import java.util.ArrayList;
import android.app.ActivityManager.TaskThumbnails;
-import android.graphics.Bitmap;
final class TaskAccessInfo extends TaskThumbnails {
final static class SubTask {
- Bitmap thumbnail;
+ ThumbnailHolder holder;
ActivityRecord activity;
int index;
}