diff --git a/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java b/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java index e8400a0c369..5cdc47e2fef 100644 --- a/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java +++ b/src/com/android/settings/applications/appinfo/DrawOverlayDetails.java @@ -15,6 +15,8 @@ */ package com.android.settings.applications.appinfo; +import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; + import android.app.AlertDialog; import android.app.AppOpsManager; import android.content.ActivityNotFoundException; @@ -30,8 +32,9 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.support.v7.preference.Preference.OnPreferenceClickListener; import android.util.Log; - +import android.view.Window; import android.view.WindowManager; + import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; @@ -86,15 +89,16 @@ public class DrawOverlayDetails extends AppInfoWithHeader implements OnPreferenc @Override public void onResume() { super.onResume(); - getActivity().getWindow().addFlags( - WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); + getActivity().getWindow().addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); } @Override public void onPause() { - getActivity().getWindow().clearFlags( - WindowManager.LayoutParams.PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); super.onPause(); + Window window = getActivity().getWindow(); + WindowManager.LayoutParams attrs = window.getAttributes(); + attrs.privateFlags &= ~PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; + window.setAttributes(attrs); } @Override diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailsTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailsTest.java index a33a6b8fabc..7ac112a3f87 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailsTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DrawOverlayDetailsTest.java @@ -16,6 +16,7 @@ package com.android.settings.applications.appinfo; +import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.nullable; import static org.mockito.Mockito.verify; @@ -27,6 +28,8 @@ import android.app.Activity; import android.content.Context; import android.view.Window; +import android.view.WindowManager.LayoutParams; + import com.android.internal.logging.nano.MetricsProto; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; @@ -37,9 +40,8 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; -import org.mockito.InOrder; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.robolectric.annotation.Config; @@ -55,6 +57,8 @@ public class DrawOverlayDetailsTest { @Mock private Window mWindow; + private LayoutParams layoutParams; + private FakeFeatureFactory mFeatureFactory; @Spy @@ -65,6 +69,7 @@ public class DrawOverlayDetailsTest { MockitoAnnotations.initMocks(this); mFeatureFactory = FakeFeatureFactory.setupForTest(); + layoutParams = new LayoutParams(); } @Test @@ -86,13 +91,17 @@ public class DrawOverlayDetailsTest { public void hideNonSystemOverlaysWhenResumed() { when(mFragment.getActivity()).thenReturn(mActivity); when(mActivity.getWindow()).thenReturn(mWindow); + when(mWindow.getAttributes()).thenReturn(layoutParams); mFragment.onResume(); + verify(mWindow).addPrivateFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); + mFragment.onPause(); - InOrder inOrder = Mockito.inOrder(mWindow); - inOrder.verify(mWindow).addFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); - inOrder.verify(mWindow).clearFlags(PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); - inOrder.verifyNoMoreInteractions(); + // There's no Window.clearPrivateFlags() method, so the Window.attributes are updated. + ArgumentCaptor paramCaptor = ArgumentCaptor.forClass(LayoutParams.class); + verify(mWindow).setAttributes(paramCaptor.capture()); + assertEquals(0, + paramCaptor.getValue().privateFlags & PRIVATE_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS); } }