From d151c40eeaa2fdd9e55ac1ab7d79ec30515ec598 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 26 Mar 2019 11:39:47 -0700 Subject: [PATCH] Enable/disable a few things in debuggable builds - Feature flag dashboard is now only ON in debuggable builds - Draw overlay is enabled in debuggable builds for a11y testing Fixes: 129060539 Fixes: 129041251 Test: robotests Change-Id: Ic799101c8ca6cbcd26fe02b6a567f223800805ab --- .../core/HideNonSystemOverlayMixin.java | 11 +++++++++-- .../FeatureFlagsPreferenceController.java | 3 ++- .../core/HideNonSystemOverlayMixinTest.java | 19 +++++++++++++++++-- .../FeatureFlagPreferenceControllerTest.java | 14 +++++++++++++- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/core/HideNonSystemOverlayMixin.java b/src/com/android/settings/core/HideNonSystemOverlayMixin.java index 59cef3bea17..4b8975db334 100644 --- a/src/com/android/settings/core/HideNonSystemOverlayMixin.java +++ b/src/com/android/settings/core/HideNonSystemOverlayMixin.java @@ -22,9 +22,11 @@ import static androidx.lifecycle.Lifecycle.Event.ON_START; import static androidx.lifecycle.Lifecycle.Event.ON_STOP; import android.app.Activity; +import android.os.Build; import android.view.Window; import android.view.WindowManager; +import androidx.annotation.VisibleForTesting; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.OnLifecycleEvent; @@ -41,9 +43,14 @@ public class HideNonSystemOverlayMixin implements LifecycleObserver { mActivity = activity; } + @VisibleForTesting + boolean isEnabled() { + return !Build.IS_DEBUGGABLE; + } + @OnLifecycleEvent(ON_START) public void onStart() { - if (mActivity == null) { + if (mActivity == null || !isEnabled()) { return; } mActivity.getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); @@ -53,7 +60,7 @@ public class HideNonSystemOverlayMixin implements LifecycleObserver { @OnLifecycleEvent(ON_STOP) public void onStop() { - if (mActivity == null) { + if (mActivity == null || !isEnabled()) { return; } final Window window = mActivity.getWindow(); diff --git a/src/com/android/settings/development/featureflags/FeatureFlagsPreferenceController.java b/src/com/android/settings/development/featureflags/FeatureFlagsPreferenceController.java index 638c7c1f089..94636e9c712 100644 --- a/src/com/android/settings/development/featureflags/FeatureFlagsPreferenceController.java +++ b/src/com/android/settings/development/featureflags/FeatureFlagsPreferenceController.java @@ -17,6 +17,7 @@ package com.android.settings.development.featureflags; import android.content.Context; +import android.os.Build; import android.util.FeatureFlagUtils; import androidx.preference.PreferenceGroup; @@ -39,7 +40,7 @@ public class FeatureFlagsPreferenceController extends BasePreferenceController @Override public int getAvailabilityStatus() { - return AVAILABLE; + return Build.IS_DEBUGGABLE ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override diff --git a/tests/robotests/src/com/android/settings/core/HideNonSystemOverlayMixinTest.java b/tests/robotests/src/com/android/settings/core/HideNonSystemOverlayMixinTest.java index 579cba09c14..d4f43e2f5fa 100644 --- a/tests/robotests/src/com/android/settings/core/HideNonSystemOverlayMixinTest.java +++ b/tests/robotests/src/com/android/settings/core/HideNonSystemOverlayMixinTest.java @@ -20,6 +20,7 @@ import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTE import static com.google.common.truth.Truth.assertThat; +import android.os.Build; import android.os.Bundle; import android.view.WindowManager; @@ -33,8 +34,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; import org.robolectric.android.controller.ActivityController; +import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) public class HideNonSystemOverlayMixinTest { @@ -43,7 +44,6 @@ public class HideNonSystemOverlayMixinTest { @Before public void setUp() { - RuntimeEnvironment.application.setTheme(R.style.Theme_AppCompat); mActivityController = Robolectric.buildActivity(TestActivity.class); } @@ -68,10 +68,25 @@ public class HideNonSystemOverlayMixinTest { .isEqualTo(0); } + @Test + public void isEnabled_debug_false() { + ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true); + + assertThat(new HideNonSystemOverlayMixin(null).isEnabled()).isFalse(); + } + + @Test + public void isEnabled_user_true() { + ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", false); + + assertThat(new HideNonSystemOverlayMixin(null).isEnabled()).isTrue(); + } + public static class TestActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setTheme(R.style.Theme_AppCompat); getLifecycle().addObserver(new HideNonSystemOverlayMixin(this)); } } diff --git a/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagPreferenceControllerTest.java index 2e15967d835..cf97544514a 100644 --- a/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagPreferenceControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.development.featureflags; import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; import static com.google.common.truth.Truth.assertThat; @@ -26,6 +27,8 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.os.Build; +import android.os.SystemProperties; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; @@ -37,6 +40,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) public class FeatureFlagPreferenceControllerTest { @@ -59,10 +63,18 @@ public class FeatureFlagPreferenceControllerTest { } @Test - public void getAvailability_available() { + public void getAvailability_debug_available() { + ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true); assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); } + + @Test + public void getAvailability_user_unavailable() { + ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", false); + assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); + } + @Test public void onStart_shouldRefreshFeatureFlags() { mController.onStart();