Add FLAG_SECURE for ChooseLockPassword and Pattern

Prevent ChooseLockPassword and ChooseLockPatten being projected to
remote views, add FLAG_SECURE for these screens.

Bug: 179725730
Test: Check these 2 screens not projected to chromecast
Test: robo test for SetupChooseLockPatternTest ChooseLockPatternTest
      SetupChooseLockPasswordTest ChooseLockPasswordTest
Change-Id: I7449a24427c966c1aa4280a7b7e7e70b60997cca
This commit is contained in:
Milton Wu
2022-08-08 09:05:00 +00:00
parent e49a84480b
commit 98239c0da6
4 changed files with 30 additions and 0 deletions

View File

@@ -69,6 +69,7 @@ import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.widget.ImeAwareEditText; import android.widget.ImeAwareEditText;
import android.widget.TextView; import android.widget.TextView;
@@ -214,6 +215,7 @@ public class ChooseLockPassword extends SettingsActivity {
ThemeHelper.trySetDynamicColor(this); ThemeHelper.trySetDynamicColor(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
findViewById(R.id.content_parent).setFitsSystemWindows(false); findViewById(R.id.content_parent).setFitsSystemWindows(false);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
} }
public static class ChooseLockPasswordFragment extends InstrumentedFragment public static class ChooseLockPasswordFragment extends InstrumentedFragment

View File

@@ -41,6 +41,7 @@ import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.TextView; import android.widget.TextView;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
@@ -175,6 +176,7 @@ public class ChooseLockPattern extends SettingsActivity {
ThemeHelper.trySetDynamicColor(this); ThemeHelper.trySetDynamicColor(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
findViewById(R.id.content_parent).setFitsSystemWindows(false); findViewById(R.id.content_parent).setFitsSystemWindows(false);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
} }
@Override @Override

View File

@@ -27,6 +27,7 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX;
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
import static com.android.internal.widget.LockPatternUtils.PASSWORD_TYPE_KEY; import static com.android.internal.widget.LockPatternUtils.PASSWORD_TYPE_KEY;
import static com.android.settings.password.ChooseLockGeneric.CONFIRM_CREDENTIALS; import static com.android.settings.password.ChooseLockGeneric.CONFIRM_CREDENTIALS;
@@ -158,6 +159,21 @@ public class ChooseLockPasswordTest {
.isNotNull(); .isNotNull();
} }
@Test
public void activity_shouldHaveSecureFlag() {
PasswordPolicy policy = new PasswordPolicy();
policy.quality = PASSWORD_QUALITY_ALPHABETIC;
policy.length = 10;
Intent intent = createIntentForPasswordValidation(
/* minMetrics */ policy.getMinMetrics(),
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC);
ChooseLockPassword activity = buildChooseLockPasswordActivity(intent);
final int flags = activity.getWindow().getAttributes().flags;
assertThat(flags & FLAG_SECURE).isEqualTo(FLAG_SECURE);
}
@Test @Test
public void processAndValidatePasswordRequirements_noMinPasswordComplexity() { public void processAndValidatePasswordRequirements_noMinPasswordComplexity() {
PasswordPolicy policy = new PasswordPolicy(); PasswordPolicy policy = new PasswordPolicy();

View File

@@ -16,6 +16,8 @@
package com.android.settings.password; package com.android.settings.password;
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage; import static com.google.common.truth.Truth.assertWithMessage;
@@ -107,6 +109,14 @@ public class ChooseLockPatternTest {
assertThat(iconView.getVisibility()).isEqualTo(View.GONE); assertThat(iconView.getVisibility()).isEqualTo(View.GONE);
} }
@Test
public void activity_shouldHaveSecureFlag() {
final ChooseLockPattern activity = Robolectric.buildActivity(
ChooseLockPattern.class, new IntentBuilder(application).build()).setup().get();
final int flags = activity.getWindow().getAttributes().flags;
assertThat(flags & FLAG_SECURE).isEqualTo(FLAG_SECURE);
}
private ChooseLockPattern createActivity(boolean addFingerprintExtra) { private ChooseLockPattern createActivity(boolean addFingerprintExtra) {
return Robolectric.buildActivity( return Robolectric.buildActivity(
ChooseLockPattern.class, ChooseLockPattern.class,