From c638c1eb1bbed67d7d8f0d43f39137d766366f54 Mon Sep 17 00:00:00 2001 From: Daniel Sandler Date: Wed, 24 Aug 2011 16:19:23 -0700 Subject: [PATCH] Put the status bar and navigation bar in HW when advisable. This allows the hardware to place these windows into overlays if possible. Change-Id: I43717fcd2c7e8f38340975eb93088d1c2c96f09b --- .../src/com/android/systemui/statusbar/StatusBar.java | 11 +++++++++++ .../systemui/statusbar/phone/PhoneStatusBar.java | 4 ++++ .../systemui/statusbar/policy/KeyButtonView.java | 6 ++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java index 61da1f56a56a5..37c77f6e67e41 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar; +import android.app.ActivityManager; import android.app.Service; import android.content.Context; import android.content.Intent; @@ -26,6 +27,7 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.util.Slog; import android.util.Log; +import android.view.Display; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -117,6 +119,15 @@ public abstract class StatusBar extends SystemUI implements CommandQueue.Callbac | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, PixelFormat.RGBX_8888); + + // the status bar should be in an overlay if possible + final Display defaultDisplay + = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE)) + .getDefaultDisplay(); + if (ActivityManager.isHighEndGfx(defaultDisplay)) { + lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; + } + lp.gravity = getStatusBarGravity(); lp.setTitle("StatusBar"); lp.packageName = mContext.getPackageName(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index fe9eceb797d7c..dd8e3e810d76b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -475,6 +475,10 @@ public class PhoneStatusBar extends StatusBar { | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH | WindowManager.LayoutParams.FLAG_SLIPPERY, PixelFormat.OPAQUE); + // this will allow the navbar to run in an overlay on devices that support this + if (ActivityManager.isHighEndGfx(mDisplay)) { + lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; + } lp.setTitle("NavigationBar"); switch (rotation) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java index 6368d1d8549ea..840087cc1f1e7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java @@ -60,6 +60,7 @@ public class KeyButtonView extends ImageView { Drawable mGlowBG; float mGlowAlpha = 0f, mGlowScale = 1f, mDrawingAlpha = 1f; boolean mSupportsLongpress = true; + RectF mRect = new RectF(0f,0f,0f,0f); Runnable mCheckLongPress = new Runnable() { public void run() { @@ -120,8 +121,9 @@ public class KeyButtonView extends ImageView { mGlowBG.setAlpha((int)(mGlowAlpha * 255)); mGlowBG.draw(canvas); canvas.restore(); - - canvas.saveLayerAlpha(null, (int)(mDrawingAlpha * 255), Canvas.ALL_SAVE_FLAG); + mRect.right = w; + mRect.bottom = h; + canvas.saveLayerAlpha(mRect, (int)(mDrawingAlpha * 255), Canvas.ALL_SAVE_FLAG); } super.onDraw(canvas); if (mGlowBG != null) {