diff options
Diffstat (limited to 'src/com/android/launcher3/Launcher.java')
-rw-r--r-- | src/com/android/launcher3/Launcher.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 3636107c2..72cad5138 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -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(); |