From d4507eefa37245c012a68d148aa5f14d4638f96d Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Fri, 4 Oct 2013 14:38:05 -0400 Subject: Migrate to new WM.LP.flags based translucent decor API. Update/rename common helper class TranslucentDecor to handle both apis so behavior is correct on old and new builds. Bug:10674960 Change-Id: Id3b2d523026e9e4f2f71f0eab404792207c6d8c7 --- src/com/android/launcher3/Launcher.java | 6 +- src/com/android/launcher3/TranslucentDecor.java | 82 ++++++++++++++++++++++ src/com/android/launcher3/TransparentBars.java | 54 -------------- .../android/launcher3/WallpaperCropActivity.java | 4 +- .../android/launcher3/WallpaperPickerActivity.java | 4 +- 5 files changed, 89 insertions(+), 61 deletions(-) create mode 100644 src/com/android/launcher3/TranslucentDecor.java delete mode 100644 src/com/android/launcher3/TransparentBars.java diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index f2f49628e..d33080512 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -326,7 +326,7 @@ public class Launcher extends Activity private BubbleTextView mWaitingForResume; - protected TransparentBars mTransparentBars; + protected TranslucentDecor mTransparentDecor; private HideFromAccessibilityHelper mHideFromAccessibilityHelper = new HideFromAccessibilityHelper(); @@ -426,8 +426,8 @@ public class Launcher extends Activity checkForLocaleChange(); setContentView(R.layout.launcher); - mTransparentBars = new TransparentBars(findViewById(R.id.launcher)); - mTransparentBars.requestTransparentBars(true); + mTransparentDecor = new TranslucentDecor(findViewById(R.id.launcher)); + mTransparentDecor.requestTranslucentDecor(true); setupViews(); grid.layout(this); diff --git a/src/com/android/launcher3/TranslucentDecor.java b/src/com/android/launcher3/TranslucentDecor.java new file mode 100644 index 000000000..b50c02268 --- /dev/null +++ b/src/com/android/launcher3/TranslucentDecor.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3; + +import android.app.Activity; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +public class TranslucentDecor { + private static final int SYSTEM_UI_FLAG_TRANSPARENT_STATUS = 0x00001000; + private static final int SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION = 0x00002000; + + // Replace with SDK constants when available. + public static final int FLAG_TRANSLUCENT_STATUS = 0x04000000; + public static final int FLAG_TRANSLUCENT_NAVIGATION = 0x08000000; + + // Behave properly on early K builds. + public static final boolean SYSUI_SUPPORTED = !hasSystemUiFlag("ALLOW_TRANSIENT") && + hasSystemUiFlag("TRANSPARENT_STATUS") && + hasSystemUiFlag("TRANSPARENT_NAVIGATION"); + + public static final boolean WM_SUPPORTED = + hasWindowManagerFlag("TRANSLUCENT_STATUS") && + hasWindowManagerFlag("TRANSLUCENT_NAVIGATION"); + + private final View mTarget; + + public TranslucentDecor(View target) { + mTarget = target; + } + + public void requestTranslucentDecor(boolean translucent) { + int sysui = View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; + if (WM_SUPPORTED && mTarget.getContext() instanceof Activity) { + Window w = ((Activity) mTarget.getContext()).getWindow(); + int wmFlags = FLAG_TRANSLUCENT_STATUS | FLAG_TRANSLUCENT_NAVIGATION; + if (translucent) { + w.addFlags(wmFlags); + } else { + w.clearFlags(wmFlags); + } + } else if (SYSUI_SUPPORTED) { // Remove when droidfood platform is updated + if (translucent) { + sysui |= SYSTEM_UI_FLAG_TRANSPARENT_STATUS | SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION; + } + } + mTarget.setSystemUiVisibility(sysui); + } + + private static boolean hasWindowManagerFlag(String name) { + try { + return WindowManager.LayoutParams.class.getField("FLAG_" + name) != null; + } catch (NoSuchFieldException e) { + return false; + } + } + + private static boolean hasSystemUiFlag(String name) { + try { + return View.class.getField("SYSTEM_UI_FLAG_" + name) != null; + } catch (NoSuchFieldException e) { + return false; + } + } +} diff --git a/src/com/android/launcher3/TransparentBars.java b/src/com/android/launcher3/TransparentBars.java deleted file mode 100644 index a12da9e6f..000000000 --- a/src/com/android/launcher3/TransparentBars.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3; - -import android.view.View; - -public class TransparentBars { - private static final int SYSTEM_UI_FLAG_TRANSPARENT_STATUS = 0x00001000; - private static final int SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION = 0x00002000; - - // Behave properly on early K builds. Replace with api check once sdk is baked. - public static final boolean SUPPORTED = !hasSystemUiFlag("ALLOW_TRANSIENT") - && hasSystemUiFlag("TRANSPARENT_STATUS") - && hasSystemUiFlag("TRANSPARENT_NAVIGATION"); - - private final View mTarget; - - public TransparentBars(View target) { - mTarget = target; - } - - public void requestTransparentBars(boolean transparent) { - if (!SUPPORTED) return; - int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; - if (transparent) { - flags |= SYSTEM_UI_FLAG_TRANSPARENT_STATUS | SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION; - } - mTarget.setSystemUiVisibility(flags); - } - - private static boolean hasSystemUiFlag(String name) { - try { - return View.class.getField("SYSTEM_UI_FLAG_" + name) != null; - } catch (NoSuchFieldException e) { - return false; - } - } -} diff --git a/src/com/android/launcher3/WallpaperCropActivity.java b/src/com/android/launcher3/WallpaperCropActivity.java index 703db9a94..78c8964b6 100644 --- a/src/com/android/launcher3/WallpaperCropActivity.java +++ b/src/com/android/launcher3/WallpaperCropActivity.java @@ -102,8 +102,8 @@ public class WallpaperCropActivity extends Activity { cropImageAndSetWallpaper(imageUri, null, finishActivityWhenDone); } }); - TransparentBars transparentBars = new TransparentBars(findViewById(R.id.wallpaper_root)); - transparentBars.requestTransparentBars(true); + TranslucentDecor transparentDecor = new TranslucentDecor(findViewById(R.id.wallpaper_root)); + transparentDecor.requestTranslucentDecor(true); } public boolean enableRotation() { diff --git a/src/com/android/launcher3/WallpaperPickerActivity.java b/src/com/android/launcher3/WallpaperPickerActivity.java index 9702a3a67..82c9977c7 100644 --- a/src/com/android/launcher3/WallpaperPickerActivity.java +++ b/src/com/android/launcher3/WallpaperPickerActivity.java @@ -181,8 +181,8 @@ public class WallpaperPickerActivity extends WallpaperCropActivity { protected void init() { setContentView(R.layout.wallpaper_picker); final WallpaperRootView root = (WallpaperRootView) findViewById(R.id.wallpaper_root); - TransparentBars transparentBars = new TransparentBars(root); - transparentBars.requestTransparentBars(true); + TranslucentDecor transparentDecor = new TranslucentDecor(root); + transparentDecor.requestTranslucentDecor(true); mCropView = (CropView) findViewById(R.id.cropView); mWallpaperStrip = findViewById(R.id.wallpaper_strip); -- cgit v1.2.3