Merge "Use transparent system bars on L" into ub-now-nova

This commit is contained in:
Sandeep Siddhartha
2014-05-17 01:06:56 +00:00
committed by Android (Google) Code Review
2 changed files with 59 additions and 0 deletions
+50
View File
@@ -50,6 +50,7 @@ import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.PorterDuff;
import android.graphics.Rect;
@@ -79,6 +80,7 @@ import android.view.Menu;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
@@ -110,6 +112,9 @@ import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Collection;
@@ -1591,10 +1596,55 @@ public class Launcher extends Activity
}
registerReceiver(mReceiver, filter);
FirstFrameAnimatorHelper.initializeDrawListener(getWindow().getDecorView());
setupTransparentSystemBarsForLmp();
mAttached = true;
mVisible = true;
}
/**
* Sets up transparent navigation and status bars in LMP.
* This method is a no-op for other platform versions.
*/
private void setupTransparentSystemBarsForLmp() {
// TODO(sansid): use the APIs directly when compiling against L sdk.
// Currently we use reflection to access the flags and the API to set the transparency
// on the System bars.
if (Utilities.isLmp()) {
try {
getWindow().getAttributes().systemUiVisibility |=
(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
Field translucentStatusField =
WindowManager.LayoutParams.class.getField("FLAG_TRANSLUCENT_STATUS");
Field translucentNavigationField =
WindowManager.LayoutParams.class.getField("FLAG_TRANSLUCENT_NAVIGATION");
getWindow().clearFlags(translucentStatusField.getInt(null)
| translucentNavigationField.getInt(null));
Field drawsSysBackgroundsField = WindowManager.LayoutParams.class.getField(
"FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS");
getWindow().addFlags(drawsSysBackgroundsField.getInt(null));
Method setStatusBarColorMethod =
Window.class.getDeclaredMethod("setStatusBarColor", int.class);
Method setNavigationBarColorMethod =
Window.class.getDeclaredMethod("setNavigationBarColor", int.class);
setStatusBarColorMethod.invoke(getWindow(), Color.TRANSPARENT);
setNavigationBarColorMethod.invoke(getWindow(), Color.TRANSPARENT);
} catch (NoSuchFieldException e) {
Log.w(TAG, "NoSuchFieldException while setting up transparent bars");
} catch (NoSuchMethodException ex) {
Log.w(TAG, "NoSuchMethodException while setting up transparent bars");
} catch (IllegalAccessException e) {
Log.w(TAG, "IllegalAccessException while setting up transparent bars");
} catch (IllegalArgumentException e) {
Log.w(TAG, "IllegalArgumentException while setting up transparent bars");
} catch (InvocationTargetException e) {
Log.w(TAG, "InvocationTargetException while setting up transparent bars");
} finally {}
}
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
+9
View File
@@ -33,6 +33,7 @@ import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.PaintDrawable;
import android.os.Build;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
@@ -98,6 +99,14 @@ public final class Utilities {
return enableRotation;
}
/**
* Indicates if the device is running LMP or not.
* TODO(sansid): Change the check to a VERSION_CODES code check once we have a version for L.
*/
public static boolean isLmp() {
return "L".equals(Build.VERSION.CODENAME);
}
/**
* Returns a bitmap suitable for the all apps view. Used to convert pre-ICS
* icon bitmaps that are stored in the database (which were 74x74 pixels at hdpi size)