diff options
author | Jim Miller <jaggies@google.com> | 2010-07-14 17:02:36 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-07-14 17:02:36 -0700 |
commit | e03952c042c4ee72a96b485e445b944748aa2212 (patch) | |
tree | abf485f678b8962ece4d18169e945de72e0a0f04 /core/java | |
parent | 7417ae9354e10971c0b5d41dc9194fab17b80ea1 (diff) | |
parent | 9d42c7f75cfd7544d6e3f253cedf9ac983fdc6b2 (diff) | |
download | frameworks_base-e03952c042c4ee72a96b485e445b944748aa2212.zip frameworks_base-e03952c042c4ee72a96b485e445b944748aa2212.tar.gz frameworks_base-e03952c042c4ee72a96b485e445b944748aa2212.tar.bz2 |
am 9d42c7f7: Merge "Fix 2797185: Re-enable thumbnail generation in framework" into gingerbread
Merge commit '9d42c7f75cfd7544d6e3f253cedf9ac983fdc6b2' into gingerbread-plus-aosp
* commit '9d42c7f75cfd7544d6e3f253cedf9ac983fdc6b2':
Fix 2797185: Re-enable thumbnail generation in framework
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/app/Activity.java | 36 | ||||
-rw-r--r-- | core/java/android/app/ActivityManager.java | 40 | ||||
-rw-r--r-- | core/java/android/app/ActivityThread.java | 26 | ||||
-rw-r--r-- | core/java/android/view/View.java | 10 |
4 files changed, 92 insertions, 20 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 985f591..f7ccc12 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -67,6 +67,8 @@ import android.view.View.OnCreateContextMenuListener; import android.view.ViewGroup.LayoutParams; import android.view.accessibility.AccessibilityEvent; import android.widget.AdapterView; +import android.widget.FrameLayout; +import android.widget.LinearLayout; import java.util.ArrayList; import java.util.HashMap; @@ -1204,19 +1206,37 @@ public class Activity extends ContextThemeWrapper * @see #onPause */ public boolean onCreateThumbnail(Bitmap outBitmap, Canvas canvas) { - final View view = mDecor; - if (view == null) { + if (mDecor == null) { return false; } - final int vw = view.getWidth(); - final int vh = view.getHeight(); - final int dw = outBitmap.getWidth(); - final int dh = outBitmap.getHeight(); + int paddingLeft = 0; + int paddingRight = 0; + int paddingTop = 0; + int paddingBottom = 0; + + // Find System window and use padding so we ignore space reserved for decorations + // like the status bar and such. + final FrameLayout top = (FrameLayout) mDecor; + for (int i = 0; i < top.getChildCount(); i++) { + View child = top.getChildAt(i); + if (child.isFitsSystemWindowsFlagSet()) { + paddingLeft = child.getPaddingLeft(); + paddingRight = child.getPaddingRight(); + paddingTop = child.getPaddingTop(); + paddingBottom = child.getPaddingBottom(); + break; + } + } + + final int visibleWidth = mDecor.getWidth() - paddingLeft - paddingRight; + final int visibleHeight = mDecor.getHeight() - paddingTop - paddingBottom; canvas.save(); - canvas.scale(((float)dw)/vw, ((float)dh)/vh); - view.draw(canvas); + canvas.scale( (float) outBitmap.getWidth() / visibleWidth, + (float) outBitmap.getHeight() / visibleHeight); + canvas.translate(-paddingLeft, -paddingTop); + mDecor.draw(canvas); canvas.restore(); return true; diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index eb7520f..d66e98b 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -285,24 +285,54 @@ public class ActivityManager { * @param maxNum The maximum number of entries to return in the list. The * actual number returned may be smaller, depending on how many tasks the * user has started. - * + * + * @param flags Optional flags + * @param receiver Optional receiver for delayed thumbnails + * * @return Returns a list of RunningTaskInfo records describing each of * the running tasks. * + * Some thumbnails may not be available at the time of this call. The optional + * receiver may be used to receive those thumbnails. + * * @throws SecurityException Throws SecurityException if the caller does * not hold the {@link android.Manifest.permission#GET_TASKS} permission. + * + * @hide */ - public List<RunningTaskInfo> getRunningTasks(int maxNum) + public List<RunningTaskInfo> getRunningTasks(int maxNum, int flags, IThumbnailReceiver receiver) throws SecurityException { try { - return (List<RunningTaskInfo>)ActivityManagerNative.getDefault() - .getTasks(maxNum, 0, null); + return ActivityManagerNative.getDefault().getTasks(maxNum, flags, receiver); } catch (RemoteException e) { // System dead, we will be dead too soon! return null; } } - + + /** + * Return a list of the tasks that are currently running, with + * the most recent being first and older ones after in order. Note that + * "running" does not mean any of the task's code is currently loaded or + * activity -- the task may have been frozen by the system, so that it + * can be restarted in its previous state when next brought to the + * foreground. + * + * @param maxNum The maximum number of entries to return in the list. The + * actual number returned may be smaller, depending on how many tasks the + * user has started. + * + * @return Returns a list of RunningTaskInfo records describing each of + * the running tasks. + * + * @throws SecurityException Throws SecurityException if the caller does + * not hold the {@link android.Manifest.permission#GET_TASKS} permission. + */ + public List<RunningTaskInfo> getRunningTasks(int maxNum) + throws SecurityException { + return getRunningTasks(maxNum, 0, null); + } + /** * Information you can retrieve about a particular Service that is * currently running in the system. diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 883366b..0fb2b49 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -115,6 +115,7 @@ final class RemoteServiceException extends AndroidRuntimeException { */ public final class ActivityThread { static final String TAG = "ActivityThread"; + private static final android.graphics.Bitmap.Config THUMBNAIL_FORMAT = Bitmap.Config.RGB_565; private static final boolean DEBUG = false; static final boolean localLOGV = DEBUG ? Config.LOGD : Config.LOGV; static final boolean DEBUG_BROADCAST = false; @@ -2210,13 +2211,24 @@ public final class ActivityThread { h = mThumbnailHeight; } - // XXX Only set hasAlpha if needed? - thumbnail = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565); - thumbnail.eraseColor(0); - Canvas cv = new Canvas(thumbnail); - if (!r.activity.onCreateThumbnail(thumbnail, cv)) { - thumbnail = null; + // On platforms where we don't want thumbnails, set dims to (0,0) + if ((w > 0) && (h > 0)) { + View topView = r.activity.getWindow().getDecorView(); + + // Maximize bitmap by capturing in native aspect. + if (topView.getWidth() >= topView.getHeight()) { + thumbnail = Bitmap.createBitmap(w, h, THUMBNAIL_FORMAT); + } else { + thumbnail = Bitmap.createBitmap(h, w, THUMBNAIL_FORMAT); + } + + thumbnail.eraseColor(0); + Canvas cv = new Canvas(thumbnail); + if (!r.activity.onCreateThumbnail(thumbnail, cv)) { + thumbnail = null; + } } + } catch (Exception e) { if (!mInstrumentation.onException(r.activity, e)) { throw new RuntimeException( @@ -2347,7 +2359,7 @@ public final class ActivityThread { if (info != null) { try { // First create a thumbnail for the activity... - //info.thumbnail = createThumbnailBitmap(r); + info.thumbnail = createThumbnailBitmap(r); info.description = r.activity.onCreateDescription(); } catch (Exception e) { if (!mInstrumentation.onException(r.activity, e)) { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 11e5ad1..329b2e7 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -3005,6 +3005,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } /** + * Determine if this view has the FITS_SYSTEM_WINDOWS flag set. + * @return True if window has FITS_SYSTEM_WINDOWS set + * + * @hide + */ + public boolean isFitsSystemWindowsFlagSet() { + return (mViewFlags & FITS_SYSTEM_WINDOWS) == FITS_SYSTEM_WINDOWS; + } + + /** * Returns the visibility status for this view. * * @return One of {@link #VISIBLE}, {@link #INVISIBLE}, or {@link #GONE}. |