diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/Activity.java | 5 | ||||
| -rw-r--r-- | core/java/android/content/pm/ActivityInfo.java | 7 | ||||
| -rw-r--r-- | core/java/android/content/pm/ApplicationInfo.java | 6 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageParser.java | 30 | ||||
| -rw-r--r-- | core/java/android/view/ViewRoot.java | 9 | ||||
| -rw-r--r-- | core/java/android/view/Window.java | 29 | ||||
| -rw-r--r-- | core/java/android/view/WindowManager.java | 18 |
7 files changed, 70 insertions, 34 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index e3351b05ee03..4b312ec0c61c 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -4123,7 +4123,7 @@ public class Activity extends ContextThemeWrapper mWindow.setSoftInputMode(info.softInputMode); } mUiThread = Thread.currentThread(); - + mMainThread = aThread; mInstrumentation = instr; mToken = token; @@ -4137,7 +4137,8 @@ public class Activity extends ContextThemeWrapper mEmbeddedID = id; mLastNonConfigurationInstances = lastNonConfigurationInstances; - mWindow.setWindowManager(null, mToken, mComponent.flattenToString()); + mWindow.setWindowManager(null, mToken, mComponent.flattenToString(), + (info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0); if (mParent != null) { mWindow.setContainer(mParent.getWindow()); } diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index 364c91e81d68..e21cb975d928 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -166,6 +166,11 @@ public class ActivityInfo extends ComponentInfo */ public static final int FLAG_IMMERSIVE = 0x0200; /** + * Value for {@link #flags}: true when the application's rendering should + * be hardware accelerated. + */ + public static final int FLAG_HARDWARE_ACCELERATED = 0x0400; + /** * Options that have been set in the activity declaration in the * manifest. * These include: @@ -175,7 +180,7 @@ public class ActivityInfo extends ComponentInfo * {@link #FLAG_STATE_NOT_NEEDED}, {@link #FLAG_EXCLUDE_FROM_RECENTS}, * {@link #FLAG_ALLOW_TASK_REPARENTING}, {@link #FLAG_NO_HISTORY}, * {@link #FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS}, - * {@link #FLAG_IMMERSIVE} + * {@link #FLAG_IMMERSIVE}, {@link #FLAG_HARDWARE_ACCELERATED} */ public int flags; diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 35f22dca0678..7901b155467a 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -284,12 +284,6 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { public static final int FLAG_HEAVY_WEIGHT = 1<<20; /** - * Value for {@link #flags}: true when the application's rendering should - * be hardware accelerated. - */ - public static final int FLAG_HARDWARE_ACCELERATED = 1<<21; - - /** * Value for {@link #flags}: this is true if the application has set * its android:neverEncrypt to true, false otherwise. It is used to specify * that this package specifically "opts-out" of a secured file system solution, diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index bc78d37d9fa3..8c9cc4e41eef 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -16,9 +16,6 @@ package android.content.pm; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; @@ -30,14 +27,14 @@ import android.content.res.XmlResourceParser; import android.os.Build; import android.os.Bundle; import android.os.PatternMatcher; -import android.provider.Settings; import android.util.AttributeSet; import android.util.Config; import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; - import com.android.internal.util.XmlUtils; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; import java.io.File; import java.io.IOException; @@ -48,7 +45,6 @@ import java.security.cert.CertificateEncodingException; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; -import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -1535,11 +1531,9 @@ public class PackageParser { ai.flags |= ApplicationInfo.FLAG_VM_SAFE_MODE; } - if (sa.getBoolean( + boolean hardwareAccelerated = sa.getBoolean( com.android.internal.R.styleable.AndroidManifestApplication_hardwareAccelerated, - false)) { - ai.flags |= ApplicationInfo.FLAG_HARDWARE_ACCELERATED; - } + false); if (sa.getBoolean( com.android.internal.R.styleable.AndroidManifestApplication_hasCode, @@ -1638,7 +1632,8 @@ public class PackageParser { String tagName = parser.getName(); if (tagName.equals("activity")) { - Activity a = parseActivity(owner, res, parser, attrs, flags, outError, false); + Activity a = parseActivity(owner, res, parser, attrs, flags, outError, false, + hardwareAccelerated); if (a == null) { mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; return false; @@ -1647,7 +1642,7 @@ public class PackageParser { owner.activities.add(a); } else if (tagName.equals("receiver")) { - Activity a = parseActivity(owner, res, parser, attrs, flags, outError, true); + Activity a = parseActivity(owner, res, parser, attrs, flags, outError, true, false); if (a == null) { mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; return false; @@ -1782,7 +1777,8 @@ public class PackageParser { private Activity parseActivity(Package owner, Resources res, XmlPullParser parser, AttributeSet attrs, int flags, String[] outError, - boolean receiver) throws XmlPullParserException, IOException { + boolean receiver, boolean hardwareAccelerated) + throws XmlPullParserException, IOException { TypedArray sa = res.obtainAttributes(attrs, com.android.internal.R.styleable.AndroidManifestActivity); @@ -1892,8 +1888,14 @@ public class PackageParser { false)) { a.info.flags |= ActivityInfo.FLAG_IMMERSIVE; } - + if (!receiver) { + if (sa.getBoolean( + com.android.internal.R.styleable.AndroidManifestActivity_hardwareAccelerated, + hardwareAccelerated)) { + a.info.flags |= ActivityInfo.FLAG_HARDWARE_ACCELERATED; + } + a.info.launchMode = sa.getInt( com.android.internal.R.styleable.AndroidManifestActivity_launchMode, ActivityInfo.LAUNCH_MULTIPLE); diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index 877a30227d34..8abbf58f0118 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -16,7 +16,6 @@ package android.view; -import android.content.pm.ApplicationInfo; import com.android.internal.view.BaseSurfaceHolder; import com.android.internal.view.IInputMethodCallback; import com.android.internal.view.IInputMethodSession; @@ -329,7 +328,7 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn mWindowAttributes.copyFrom(attrs); attrs = mWindowAttributes; - enableHardwareAcceleration(view, attrs); + enableHardwareAcceleration(attrs); if (view instanceof RootViewSurfaceTaker) { mSurfaceHolderCallback = @@ -460,14 +459,14 @@ public final class ViewRoot extends Handler implements ViewParent, View.AttachIn } } - private void enableHardwareAcceleration(View view, WindowManager.LayoutParams attrs) { + private void enableHardwareAcceleration(WindowManager.LayoutParams attrs) { // Only enable hardware acceleration if we are not in the system process // The window manager creates ViewRoots to display animated preview windows // of launching apps and we don't want those to be hardware accelerated if (Process.myUid() != Process.SYSTEM_UID) { // Try to enable hardware acceleration if requested - if ((view.getContext().getApplicationInfo().flags & - ApplicationInfo.FLAG_HARDWARE_ACCELERATED) != 0) { + if (attrs != null && + (attrs.flags & WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED) != 0) { final boolean translucent = attrs.format != PixelFormat.OPAQUE; mHwRenderer = HardwareRenderer.createGlRenderer(2, translucent); } diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java index 0d4e84b0e329..f32ff77a8391 100644 --- a/core/java/android/view/Window.java +++ b/core/java/android/view/Window.java @@ -68,6 +68,10 @@ public abstract class Window { * If overlay is enabled, the action mode UI will be allowed to cover existing window content. */ public static final int FEATURE_ACTION_MODE_OVERLAY = 9; + /** + * Flag for requesting this window to be hardware accelerated, if possible. + */ + public static final int FEATURE_HARDWARE_ACCELERATED = 10; /** Flag for setting the progress bar's visibility to VISIBLE */ public static final int PROGRESS_VISIBILITY_ON = -1; /** Flag for setting the progress bar's visibility to GONE */ @@ -375,21 +379,35 @@ public abstract class Window { * * @param wm The ViewManager for adding new windows. */ - public void setWindowManager(WindowManager wm, - IBinder appToken, String appName) { + public void setWindowManager(WindowManager wm, IBinder appToken, String appName) { + setWindowManager(wm, appToken, appName, false); + } + + /** + * Set the window manager for use by this Window to, for example, + * display panels. This is <em>not</em> used for displaying the + * Window itself -- that must be done by the client. + * + * @param wm The ViewManager for adding new windows. + */ + public void setWindowManager(WindowManager wm, IBinder appToken, String appName, + boolean hardwareAccelerated) { mAppToken = appToken; mAppName = appName; if (wm == null) { wm = WindowManagerImpl.getDefault(); } - mWindowManager = new LocalWindowManager(wm); + mWindowManager = new LocalWindowManager(wm, hardwareAccelerated); } private class LocalWindowManager implements WindowManager { - LocalWindowManager(WindowManager wm) { + private boolean mHardwareAccelerated; + + LocalWindowManager(WindowManager wm, boolean hardwareAccelerated) { mWindowManager = wm; mDefaultDisplay = mContext.getResources().getDefaultDisplay( mWindowManager.getDefaultDisplay()); + mHardwareAccelerated = hardwareAccelerated; } public final void addView(View view, ViewGroup.LayoutParams params) { @@ -436,6 +454,9 @@ public abstract class Window { if (wp.packageName == null) { wp.packageName = mContext.getPackageName(); } + if (mHardwareAccelerated) { + wp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; + } mWindowManager.addView(view, params); } diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index eebbc931d0a3..c147b74aec88 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -72,6 +72,7 @@ public interface WindowManager extends ViewManager { * When using {@link Gravity#LEFT} or {@link Gravity#RIGHT} it provides * an offset from the given edge. */ + @ViewDebug.ExportedProperty public int x; /** @@ -79,6 +80,7 @@ public interface WindowManager extends ViewManager { * When using {@link Gravity#TOP} or {@link Gravity#BOTTOM} it provides * an offset from the given edge. */ + @ViewDebug.ExportedProperty public int y; /** @@ -87,6 +89,7 @@ public interface WindowManager extends ViewManager { * should not be stretched. Otherwise the extra pixels will be pro-rated * among all views whose weight is greater than 0. */ + @ViewDebug.ExportedProperty public float horizontalWeight; /** @@ -95,8 +98,9 @@ public interface WindowManager extends ViewManager { * should not be stretched. Otherwise the extra pixels will be pro-rated * among all views whose weight is greater than 0. */ + @ViewDebug.ExportedProperty public float verticalWeight; - + /** * The general type of window. There are three main classes of * window types: @@ -389,6 +393,7 @@ public interface WindowManager extends ViewManager { * @see #FLAG_FULLSCREEN * @see #FLAG_FORCE_NOT_FULLSCREEN * @see #FLAG_IGNORE_CHEEK_PRESSES + * @see #FLAG_HARDWARE_ACCELERATED */ @ViewDebug.ExportedProperty(flagMapping = { @ViewDebug.FlagToString(mask = FLAG_BLUR_BEHIND, equals = FLAG_BLUR_BEHIND, @@ -420,7 +425,9 @@ public interface WindowManager extends ViewManager { @ViewDebug.FlagToString(mask = FLAG_FORCE_NOT_FULLSCREEN, equals = FLAG_FORCE_NOT_FULLSCREEN, name = "FLAG_FORCE_NOT_FULLSCREEN"), @ViewDebug.FlagToString(mask = FLAG_IGNORE_CHEEK_PRESSES, - equals = FLAG_IGNORE_CHEEK_PRESSES, name = "FLAG_IGNORE_CHEEK_PRESSES") + equals = FLAG_IGNORE_CHEEK_PRESSES, name = "FLAG_IGNORE_CHEEK_PRESSES"), + @ViewDebug.FlagToString(mask = FLAG_HARDWARE_ACCELERATED, + equals = FLAG_HARDWARE_ACCELERATED, name = "FLAG_HARDWARE_ACCELERATED") }) public int flags; @@ -603,6 +610,12 @@ public interface WindowManager extends ViewManager { * it is created. * {@hide} */ public static final int FLAG_SYSTEM_ERROR = 0x40000000; + + /** + * Indicates whether this window should be hardware accelerated. + * Requesting hardware acceleration does not guarantee it will happen. + */ + public static final int FLAG_HARDWARE_ACCELERATED = 0x80000000; /** * Given a particular set of window manager flags, determine whether @@ -1075,6 +1088,7 @@ public interface WindowManager extends ViewManager { screenOrientation = o.screenOrientation; changes |= SCREEN_ORIENTATION_CHANGED; } + return changes; } |
