summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-06-12 01:00:34 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-06-12 01:00:34 +0000
commit45dbb2d8ea4ff31365c1acf33a090fe6c187fcec (patch)
treede8eb078a0074d3f7b16aeab032338e98e31a661
parent453697785fb49384cceb34167236e15a4954c651 (diff)
parente71f413e4cdcc53d96b2c957db2bb6439a37e617 (diff)
downloadsetupwizard-android11-d1-s5-release.tar.gz
Change-Id: I0bb8e56a9fcbbcb0c5c73d00053280c67295391c
-rw-r--r--library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java10
-rw-r--r--library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java3
-rw-r--r--library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java3
-rw-r--r--library/main/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtils.java78
-rw-r--r--library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtilsTest.java33
5 files changed, 123 insertions, 4 deletions
diff --git a/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java b/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java
index 27da4fd..3da7df6 100644
--- a/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java
+++ b/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java
@@ -28,6 +28,8 @@ import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
+import com.android.car.setupwizardlib.partner.PartnerConfig;
+import com.android.car.setupwizardlib.partner.PartnerConfigHelper;
import com.android.car.setupwizardlib.util.CarDrivingStateMonitor;
import com.android.car.setupwizardlib.util.CarSetupWizardUiUtils;
import com.android.car.setupwizardlib.util.CarWizardManagerHelper;
@@ -111,7 +113,9 @@ abstract class BaseSetupWizardActivity extends FragmentActivity {
protected void onStart() {
super.onStart();
// Must be done here so that the SystemUI is hidden when back button is clicked
- CarSetupWizardUiUtils.hideSystemUI(this);
+ CarSetupWizardUiUtils.setWindowImmersiveMode(this.getWindow(),
+ PartnerConfigHelper.get(this).getString(
+ this, PartnerConfig.CONFIG_IMMERSIVE_MODE));
// Fragment commits are not allowed once the Activity's state has been saved. Once
// onStart() has been called, the FragmentManager should now allow commits.
mAllowFragmentCommits = true;
@@ -156,7 +160,9 @@ abstract class BaseSetupWizardActivity extends FragmentActivity {
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
- CarSetupWizardUiUtils.hideSystemUI(this);
+ CarSetupWizardUiUtils.setWindowImmersiveMode(this.getWindow(),
+ PartnerConfigHelper.get(this).getString(
+ this, PartnerConfig.CONFIG_IMMERSIVE_MODE));
}
}
diff --git a/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java b/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java
index 8946b7a..00c0ea3 100644
--- a/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java
+++ b/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfig.java
@@ -19,6 +19,9 @@ package com.android.car.setupwizardlib.partner;
/** Resources that can be customized by partner overlay APK. */
public enum PartnerConfig {
+ CONFIG_IMMERSIVE_MODE(
+ PartnerConfigKey.KEY_IMMERSIVE_MODE, ResourceType.STRING),
+
CONFIG_TOOLBAR_BG_COLOR(
PartnerConfigKey.KEY_TOOLBAR_BG_COLOR, ResourceType.COLOR),
diff --git a/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java b/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java
index de4aa9e..32caceb 100644
--- a/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java
+++ b/library/main/src/com/android/car/setupwizardlib/partner/PartnerConfigKey.java
@@ -23,6 +23,7 @@ import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.SOURCE)
@StringDef({
+ PartnerConfigKey.KEY_IMMERSIVE_MODE,
PartnerConfigKey.KEY_TOOLBAR_BG_COLOR,
PartnerConfigKey.KEY_TOOLBAR_BUTTON_ICON_BACK,
PartnerConfigKey.KEY_TOOLBAR_BUTTON_FONT_FAMILY,
@@ -47,6 +48,8 @@ import java.lang.annotation.RetentionPolicy;
/** Resource names that can be customized by partner overlay APK. */
public @interface PartnerConfigKey {
+ String KEY_IMMERSIVE_MODE = "suw_compat_immersive_mode";
+
String KEY_TOOLBAR_BG_COLOR = "suw_compat_toolbar_bg_color";
String KEY_TOOLBAR_BUTTON_ICON_BACK = "suw_compat_toolbar_button_icon_back";
diff --git a/library/main/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtils.java b/library/main/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtils.java
index 5ff5929..3611931 100644
--- a/library/main/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtils.java
+++ b/library/main/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtils.java
@@ -31,6 +31,9 @@ import androidx.core.util.Preconditions;
public final class CarSetupWizardUiUtils {
private static final String TAG = CarSetupWizardUiUtils.class.getSimpleName();
+ /** Key for immersive mode value pased to 1P apps */
+ public static final String IMMERSIVE_MODE_TYPE = "immersiveModeType";
+
/** Hide system UI */
public static void hideSystemUI(Activity activity) {
maybeHideSystemUI(activity);
@@ -45,10 +48,49 @@ public final class CarSetupWizardUiUtils {
}
/**
+ * Set the appropriate immersive mode according to immersiveModeValue
+ */
+ public static void setWindowImmersiveMode(Window window, String immersiveModeValue) {
+ Preconditions.checkNotNull(window);
+ ImmersiveModeTypes immersiveModeType;
+ try {
+ immersiveModeType = ImmersiveModeTypes.valueOf(immersiveModeValue);
+ } catch (IllegalArgumentException | NullPointerException e) {
+ Log.w(TAG, "Immersive Mode value: " + immersiveModeValue
+ + " not valid, using IMMERSIVE");
+ immersiveModeType = ImmersiveModeTypes.IMMERSIVE;
+ }
+ Log.v(TAG, "Enable " + immersiveModeType + " mode");
+ switch (immersiveModeType) {
+ case IMMERSIVE:
+ enableImmersiveMode(window);
+ window.getDecorView().setOnSystemUiVisibilityChangeListener(
+ visibility -> enableImmersiveMode(window));
+ break;
+ case IMMERSIVE_WITH_STATUS:
+ enableImmersiveModeWithStatus(window);
+ window.getDecorView().setOnSystemUiVisibilityChangeListener(
+ visibility -> enableImmersiveModeWithStatus(window));
+ break;
+ case NON_IMMERSIVE:
+ disableImmersiveMode(window);
+ window.getDecorView().setOnSystemUiVisibilityChangeListener(
+ visibility -> disableImmersiveMode(window));
+ break;
+ case SYSTEM_DEFAULT:
+ //SUW won't change the current immersive mode.
+ break;
+ }
+ }
+
+ /**
* Enables immersive mode hiding system UI.
*
* @param window to apply immersive mode.
+ *
+ * @deprecated Use {@code setWindowImmersiveMode}
*/
+ @Deprecated
public static void enableImmersiveMode(Window window) {
if (Log.isLoggable(TAG, Log.INFO)) {
Log.i(TAG, "enableImmersiveMode");
@@ -61,7 +103,7 @@ public final class CarSetupWizardUiUtils {
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
window.getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+ View.SYSTEM_UI_FLAG_IMMERSIVE
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
@@ -73,10 +115,36 @@ public final class CarSetupWizardUiUtils {
}
/**
+ * Enables immersive mode hiding only navigation bar.
+ *
+ * @param window to apply immersive mode.
+ */
+ private static void enableImmersiveModeWithStatus(Window window) {
+ if (Log.isLoggable(TAG, Log.INFO)) {
+ Log.i(TAG, "enableImmersiveModeWithStatus");
+ }
+
+ Preconditions.checkNotNull(window);
+
+ // See https://developer.android.com/training/system-ui/immersive#EnableFullscreen
+ // Enables regular immersive mode.
+ window.getDecorView().setSystemUiVisibility(
+ View.SYSTEM_UI_FLAG_IMMERSIVE
+ // Set the content to appear under the system bars so that the
+ // content doesn't resize when the system bars hide and show.
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ // Hide the nav bar
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
+ }
+
+ /**
* Disables immersive mode hiding system UI and restores the previous colors.
*
* @param window the current window instance.
+ *
+ * @deprecated Use {@code setWindowImmersiveMode}
*/
+ @Deprecated
public static void disableImmersiveMode(Window window) {
if (Log.isLoggable(TAG, Log.INFO)) {
Log.i(TAG, "disableImmersiveMode");
@@ -111,6 +179,14 @@ public final class CarSetupWizardUiUtils {
typedArray.recycle();
}
+ /** Types of Immersive Mode supported by SUW */
+ public enum ImmersiveModeTypes {
+ IMMERSIVE,
+ IMMERSIVE_WITH_STATUS,
+ NON_IMMERSIVE,
+ SYSTEM_DEFAULT
+ }
+
private CarSetupWizardUiUtils() {
}
}
diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtilsTest.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtilsTest.java
index f931670..5933bd4 100644
--- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtilsTest.java
+++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/util/CarSetupWizardUiUtilsTest.java
@@ -35,7 +35,7 @@ import org.robolectric.RobolectricTestRunner;
public class CarSetupWizardUiUtilsTest {
private static final int IMMERSIVE_MODE_FLAGS =
- View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+ View.SYSTEM_UI_FLAG_IMMERSIVE
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
@@ -45,6 +45,11 @@ public class CarSetupWizardUiUtilsTest {
private static final int NON_IMMERSIVE_MODE_FLAGS =
View.SYSTEM_UI_FLAG_VISIBLE;
+ private static final int IMMERSIVE_WITH_STATUS_MODE_FLAGS =
+ View.SYSTEM_UI_FLAG_IMMERSIVE
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+
private static final int[] RES_ID_NAV_AND_STATUS_BARS = new int[]{
android.R.attr.statusBarColor,
android.R.attr.navigationBarColor};
@@ -96,4 +101,30 @@ public class CarSetupWizardUiUtilsTest {
assertThat(mWindow.getStatusBarColor())
.isEqualTo(EXPECTED_COLOR_STATUS_BAR);
}
+
+ @Test
+ public void setWindow_Immersive() {
+ CarSetupWizardUiUtils.setWindowImmersiveMode(mWindow,
+ CarSetupWizardUiUtils.ImmersiveModeTypes.IMMERSIVE.toString());
+ assertThat(mWindow.getDecorView().getSystemUiVisibility())
+ .isEqualTo(IMMERSIVE_MODE_FLAGS);
+ }
+
+ @Test
+ public void setWindow_ImmersiveWithStatus() {
+ CarSetupWizardUiUtils.setWindowImmersiveMode(mWindow,
+ CarSetupWizardUiUtils.ImmersiveModeTypes.IMMERSIVE_WITH_STATUS.toString());
+ assertThat(mWindow.getDecorView().getSystemUiVisibility())
+ .isEqualTo(IMMERSIVE_WITH_STATUS_MODE_FLAGS);
+ }
+
+
+ @Test
+ public void setWindow_NonImmersive() {
+ CarSetupWizardUiUtils.setWindowImmersiveMode(mWindow,
+ CarSetupWizardUiUtils.ImmersiveModeTypes.NON_IMMERSIVE.toString());
+ assertThat(mWindow.getDecorView().getSystemUiVisibility())
+ .isEqualTo(NON_IMMERSIVE_MODE_FLAGS);
+ }
+
}