Add Tapjacking Protection for SettingsHomepageActivity
Add/remove the SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS flag into/from SettingsHomepageActivity and SettingsPanelActivity with lifecycle. Bug: 138442483 Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.homepage make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.panel manual test Change-Id: I72f9a947f57f74a8c09127d6c39173594c248ddc
This commit is contained in:
@@ -16,20 +16,42 @@
|
||||
|
||||
package com.android.settings.homepage;
|
||||
|
||||
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.HideNonSystemOverlayMixin;
|
||||
import com.android.settings.homepage.contextualcards.slices.BatteryFixSliceTest;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.android.controller.ActivityController;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class SettingsHomepageActivityTest {
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setHomepageContainerPaddingTop_shouldBeSetPaddingTop() {
|
||||
@@ -55,4 +77,55 @@ public class SettingsHomepageActivityTest {
|
||||
|
||||
assertThat(frameLayout.getLayoutTransition()).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {
|
||||
BatteryFixSliceTest.ShadowBatteryStatsHelperLoader.class,
|
||||
BatteryFixSliceTest.ShadowBatteryTipLoader.class
|
||||
})
|
||||
public void onStart_isNotDebuggable_shouldHideSystemOverlay() {
|
||||
ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", false);
|
||||
|
||||
final ActivityController<SettingsHomepageActivity> activityController =
|
||||
Robolectric.buildActivity(SettingsHomepageActivity.class).create();
|
||||
final SettingsHomepageActivity activity = spy(activityController.get());
|
||||
final Window window = mock(Window.class);
|
||||
when(activity.getWindow()).thenReturn(window);
|
||||
activity.getLifecycle().addObserver(new HideNonSystemOverlayMixin(activity));
|
||||
|
||||
activityController.start();
|
||||
|
||||
verify(window).addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(shadows = {
|
||||
BatteryFixSliceTest.ShadowBatteryStatsHelperLoader.class,
|
||||
BatteryFixSliceTest.ShadowBatteryTipLoader.class,
|
||||
})
|
||||
public void onStop_isNotDebuggable_shouldRemoveHideSystemOverlay() {
|
||||
ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", false);
|
||||
|
||||
final ActivityController<SettingsHomepageActivity> activityController =
|
||||
Robolectric.buildActivity(SettingsHomepageActivity.class).create();
|
||||
final SettingsHomepageActivity activity = spy(activityController.get());
|
||||
final Window window = mock(Window.class);
|
||||
when(activity.getWindow()).thenReturn(window);
|
||||
activity.getLifecycle().addObserver(new HideNonSystemOverlayMixin(activity));
|
||||
|
||||
activityController.start();
|
||||
|
||||
verify(window).addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
|
||||
|
||||
final WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
|
||||
when(window.getAttributes()).thenReturn(layoutParams);
|
||||
|
||||
activityController.stop();
|
||||
final ArgumentCaptor<WindowManager.LayoutParams> paramCaptor = ArgumentCaptor.forClass(
|
||||
WindowManager.LayoutParams.class);
|
||||
|
||||
verify(window).setAttributes(paramCaptor.capture());
|
||||
assertThat(paramCaptor.getValue().privateFlags
|
||||
& SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isEqualTo(0);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user