Add glyph rerasterization hack for SystemUI.

Change-Id: I39d84e981b828b501801349d7a5e70a089b5f14e
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 f9aadf3..04f9c72 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -61,7 +61,6 @@
 import android.os.PowerManager;
 import android.os.RemoteException;
 import android.os.SystemClock;
-import android.os.Trace;
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
@@ -73,6 +72,7 @@
 import android.util.Log;
 import android.view.Display;
 import android.view.Gravity;
+import android.view.HardwareCanvas;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -82,6 +82,7 @@
 import android.view.ViewGroup.LayoutParams;
 import android.view.ViewPropertyAnimator;
 import android.view.ViewStub;
+import android.view.ViewTreeObserver;
 import android.view.WindowManager;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.Animation;
@@ -119,7 +120,6 @@
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
 import com.android.systemui.statusbar.policy.CastControllerImpl;
-import com.android.systemui.statusbar.policy.DateView;
 import com.android.systemui.statusbar.policy.FlashlightController;
 import com.android.systemui.statusbar.policy.HeadsUpNotificationView;
 import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
@@ -130,6 +130,7 @@
 import com.android.systemui.statusbar.policy.ZenModeController;
 import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
 import com.android.systemui.statusbar.stack.NotificationStackScrollLayout.OnChildLocationsChangedListener;
+import com.android.systemui.statusbar.stack.StackScrollAlgorithm;
 import com.android.systemui.statusbar.stack.StackScrollState.ViewState;
 import com.android.systemui.volume.VolumeComponent;
 
@@ -383,6 +384,8 @@
 
     private final ShadeUpdates mShadeUpdates = new ShadeUpdates();
 
+    private int mDrawCount;
+
     private static final int VISIBLE_LOCATIONS = ViewState.LOCATION_FIRST_CARD
             | ViewState.LOCATION_TOP_STACK_PEEKING
             | ViewState.LOCATION_MAIN_AREA
@@ -723,9 +726,34 @@
         // listen for USER_SETUP_COMPLETE setting (per-user)
         resetUserSetupObserver();
 
+        startGlyphRasterizeHack();
         return mStatusBarView;
     }
 
+    /**
+     * Hack to improve glyph rasterization for scaled text views.
+     */
+    private void startGlyphRasterizeHack() {
+        mStatusBarView.getViewTreeObserver().addOnPreDrawListener(
+                new ViewTreeObserver.OnPreDrawListener() {
+            @Override
+            public boolean onPreDraw() {
+                if (mDrawCount == 1) {
+                    mStatusBarView.getViewTreeObserver().removeOnPreDrawListener(this);
+                    HardwareCanvas.setProperty("extraRasterBucket",
+                            Float.toString(StackScrollAlgorithm.DIMMED_SCALE));
+                    HardwareCanvas.setProperty("extraRasterBucket", Float.toString(
+                            mContext.getResources().getDimensionPixelSize(
+                                    R.dimen.qs_time_collapsed_size)
+                            / mContext.getResources().getDimensionPixelSize(
+                                    R.dimen.qs_time_expanded_size)));
+                }
+                mDrawCount++;
+                return true;
+            }
+        });
+    }
+
     @Override
     protected void setZenMode(int mode) {
         super.setZenMode(mode);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
index c22b8c2..ee7206f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -41,7 +41,7 @@
 
     /** When a child is activated, the other cards' alpha fade to this value. */
     private static final float ACTIVATED_INVERSE_ALPHA = 0.9f;
-    private static final float DIMMED_SCALE = 0.95f;
+    public static final float DIMMED_SCALE = 0.95f;
 
     private int mPaddingBetweenElements;
     private int mCollapsedSize;