[FRP] Theme interstitials for lock screen setup
Use the setup wizard theme for EncryptionInterstital and
RedactionInterstitial as they will show during the lock screen setup
as part of setup wizard.
Bug: 18482708
Change-Id: I65c8924952345a4e17fcf4ffb7d68df53244c5d7
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 82b135f..4360443 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1109,6 +1109,9 @@
</intent-filter>
</activity>
+ <activity android:name=".SetupRedactionInterstitial"
+ android:theme="@style/SetupWizardDisableAppStartingTheme"/>
+
<activity android:name=".notification.RedactionInterstitial"/>
<activity android:name=".notification.RedactionSettingsStandalone"
@@ -1173,6 +1176,9 @@
<activity android:name="ChooseLockPassword" android:exported="false"
android:windowSoftInputMode="stateVisible|adjustResize"/>
+ <activity android:name=".SetupEncryptionInterstitial"
+ android:theme="@style/SetupWizardDisableAppStartingTheme"/>
+
<activity android:name=".EncryptionInterstitial"/>
<!-- Runs in the phone process since it needs access to the Phone object -->
diff --git a/res/layout/encryption_interstitial.xml b/res/layout/encryption_interstitial.xml
index 362ff82..162ad0e 100644
--- a/res/layout/encryption_interstitial.xml
+++ b/res/layout/encryption_interstitial.xml
@@ -20,8 +20,8 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingStart="@dimen/settings_side_margin"
- android:paddingEnd="@dimen/settings_side_margin">
+ android:paddingStart="?attr/side_margin"
+ android:paddingEnd="?attr/side_margin">
<TextView
android:id="@+id/encryption_message"
diff --git a/res/layout/redaction_interstitial.xml b/res/layout/redaction_interstitial.xml
index edcf5b8..c56db11 100644
--- a/res/layout/redaction_interstitial.xml
+++ b/res/layout/redaction_interstitial.xml
@@ -20,8 +20,8 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingStart="@dimen/settings_side_margin"
- android:paddingEnd="@dimen/settings_side_margin">
+ android:paddingStart="?attr/side_margin"
+ android:paddingEnd="?attr/side_margin">
<TextView
android:layout_width="wrap_content"
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 83618cb..d4875e2 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -19,6 +19,7 @@
<attr name="ic_menu_moreoverflow" format="reference" />
<attr name="ic_wps" format="reference" />
<attr name="setup_divider_color" format="reference" />
+ <attr name="side_margin" format="reference|dimension" />
<attr name="wifi_signal_color" format="reference" />
<attr name="wifi_signal" format="reference" />
@@ -40,6 +41,7 @@
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_dark</item>
<item name="setup_divider_color">@color/setup_divider_color_dark</item>
+ <item name="side_margin">0dip</item>
<item name="wifi_signal_color">@color/setup_wizard_wifi_color_dark</item>
<item name="wifi_signal">@drawable/wifi_signal_teal</item>
<item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
@@ -57,6 +59,7 @@
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_light</item>
<item name="setup_divider_color">@color/setup_divider_color_light</item>
+ <item name="side_margin">0dip</item>
<item name="wifi_signal_color">@color/setup_wizard_wifi_color_light</item>
<item name="wifi_signal">@drawable/wifi_signal_teal</item>
<item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
@@ -98,6 +101,7 @@
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_holo_dark</item>
<item name="ic_wps">@drawable/ic_wps_dark</item>
<item name="wifi_signal">@drawable/wifi_signal_teal</item>
+ <item name="side_margin">@dimen/settings_side_margin</item>
<!-- Redefine the ActionBar style for contentInsetStart -->
<item name="android:actionBarStyle">@style/Theme.ActionBar</item>
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 1f2f2b3..3cbcbb4 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -189,13 +189,13 @@
if (Process.myUserHandle().isOwner() && LockPatternUtils.isDeviceEncryptionEnabled()) {
mEncryptionRequestQuality = quality;
mEncryptionRequestDisabled = disabled;
+ final Context context = getActivity();
// If accessibility is enabled and the user hasn't seen this dialog before, set the
// default state to agree with that which is compatible with accessibility
// (password not required).
- final boolean accEn = AccessibilityManager.getInstance(getActivity()).isEnabled();
+ final boolean accEn = AccessibilityManager.getInstance(context).isEnabled();
final boolean required = mLockPatternUtils.isCredentialRequiredToDecrypt(!accEn);
- Intent intent = EncryptionInterstitial.createStartIntent(
- getActivity(), quality, required);
+ Intent intent = getEncryptionInterstitialIntent(context, quality, required);
startActivityForResult(intent, ENABLE_ENCRYPTION_REQUEST);
} else {
mRequirePassword = false; // device encryption not enabled or not device owner.
@@ -414,6 +414,11 @@
confirmCredentials);
}
+ protected Intent getEncryptionInterstitialIntent(Context context, int quality,
+ boolean required) {
+ return EncryptionInterstitial.createStartIntent(context, quality, required);
+ }
+
/**
* Invokes an activity to change the user's pattern, password or PIN based on given quality
* and minimum quality specified by DevicePolicyManager. If quality is
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index dbf6d2f..2c05986 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -299,6 +299,10 @@
}
}
+ protected Intent getRedactionInterstitialIntent(Context context) {
+ return RedactionInterstitial.createStartIntent(context);
+ }
+
protected void updateStage(Stage stage) {
final Stage previousStage = mUiStage;
mUiStage = stage;
@@ -441,7 +445,7 @@
getActivity().finish();
mDone = true;
if (!wasSecureBefore) {
- startActivity(RedactionInterstitial.createStartIntent(getActivity()));
+ startActivity(getRedactionInterstitialIntent(getActivity()));
}
} else {
CharSequence tmp = mPasswordEntry.getText();
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index d055184..85694b1 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -386,6 +386,10 @@
mDone = false;
}
+ protected Intent getRedactionInterstitialIntent(Context context) {
+ return RedactionInterstitial.createStartIntent(context);
+ }
+
public void onClick(View v) {
if (v == mFooterLeftButton) {
if (mUiStage.leftMode == LeftButtonMode.Retry) {
@@ -562,7 +566,7 @@
getActivity().finish();
mDone = true;
if (!wasSecureBefore) {
- startActivity(RedactionInterstitial.createStartIntent(getActivity()));
+ startActivity(getRedactionInterstitialIntent(getActivity()));
}
}
}
diff --git a/src/com/android/settings/SetupChooseLockGeneric.java b/src/com/android/settings/SetupChooseLockGeneric.java
index def8593..2894f85 100644
--- a/src/com/android/settings/SetupChooseLockGeneric.java
+++ b/src/com/android/settings/SetupChooseLockGeneric.java
@@ -28,6 +28,13 @@
import android.view.ViewGroup;
import android.widget.ListView;
+/**
+ * Setup Wizard's version of ChooseLockGeneric screen. It inherits the logic and basic structure
+ * from ChooseLockGeneric class, and should remain similar to that behaviorally. This class should
+ * only overload base methods for minor theme and behavior differences specific to Setup Wizard.
+ * Other changes should be done to ChooseLockGeneric class instead and let this class inherit
+ * those changes.
+ */
public class SetupChooseLockGeneric extends ChooseLockGeneric
implements SetupWizardNavBar.NavigationBarListener {
@@ -101,5 +108,14 @@
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
return intent;
}
+
+ @Override
+ protected Intent getEncryptionInterstitialIntent(Context context, int quality,
+ boolean required) {
+ Intent intent = SetupEncryptionInterstitial.createStartIntent(context, quality,
+ required);
+ SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
+ return intent;
+ }
}
}
diff --git a/src/com/android/settings/SetupChooseLockPassword.java b/src/com/android/settings/SetupChooseLockPassword.java
index 5366a55..ed6fab4 100644
--- a/src/com/android/settings/SetupChooseLockPassword.java
+++ b/src/com/android/settings/SetupChooseLockPassword.java
@@ -27,6 +27,13 @@
import android.view.View;
import android.view.ViewGroup;
+/**
+ * Setup Wizard's version of ChooseLockPassword screen. It inherits the logic and basic structure
+ * from ChooseLockPassword class, and should remain similar to that behaviorally. This class should
+ * only overload base methods for minor theme and behavior differences specific to Setup Wizard.
+ * Other changes should be done to ChooseLockPassword class instead and let this class inherit
+ * those changes.
+ */
public class SetupChooseLockPassword extends ChooseLockPassword
implements SetupWizardNavBar.NavigationBarListener {
@@ -86,5 +93,12 @@
super.onViewCreated(view, savedInstanceState);
SetupWizardUtils.setHeaderText(getActivity(), getActivity().getTitle());
}
+
+ @Override
+ protected Intent getRedactionInterstitialIntent(Context context) {
+ Intent intent = SetupRedactionInterstitial.createStartIntent(context);
+ SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
+ return intent;
+ }
}
}
diff --git a/src/com/android/settings/SetupChooseLockPattern.java b/src/com/android/settings/SetupChooseLockPattern.java
index 019f4340..b44dea1 100644
--- a/src/com/android/settings/SetupChooseLockPattern.java
+++ b/src/com/android/settings/SetupChooseLockPattern.java
@@ -27,6 +27,13 @@
import android.view.View;
import android.view.ViewGroup;
+/**
+ * Setup Wizard's version of ChooseLockPattern screen. It inherits the logic and basic structure
+ * from ChooseLockPattern class, and should remain similar to that behaviorally. This class should
+ * only overload base methods for minor theme and behavior differences specific to Setup Wizard.
+ * Other changes should be done to ChooseLockPattern class instead and let this class inherit
+ * those changes.
+ */
public class SetupChooseLockPattern extends ChooseLockPattern
implements SetupWizardNavBar.NavigationBarListener {
@@ -84,5 +91,12 @@
super.onViewCreated(view, savedInstanceState);
SetupWizardUtils.setHeaderText(getActivity(), getActivity().getTitle());
}
+
+ @Override
+ protected Intent getRedactionInterstitialIntent(Context context) {
+ Intent intent = SetupRedactionInterstitial.createStartIntent(context);
+ SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
+ return intent;
+ }
}
}
diff --git a/src/com/android/settings/SetupEncryptionInterstitial.java b/src/com/android/settings/SetupEncryptionInterstitial.java
new file mode 100644
index 0000000..53548bd
--- /dev/null
+++ b/src/com/android/settings/SetupEncryptionInterstitial.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings;
+
+import com.android.setupwizard.navigationbar.SetupWizardNavBar;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Setup Wizard's version of EncryptionInterstitial screen. It inherits the logic and basic
+ * structure from EncryptionInterstitial class, and should remain similar to that behaviorally. This
+ * class should only overload base methods for minor theme and behavior differences specific to
+ * Setup Wizard. Other changes should be done to EncryptionInterstitial class instead and let this
+ * class inherit those changes.
+ */
+public class SetupEncryptionInterstitial extends EncryptionInterstitial
+ implements SetupWizardNavBar.NavigationBarListener{
+
+ public static Intent createStartIntent(Context ctx, int quality,
+ boolean requirePasswordDefault) {
+ Intent startIntent = EncryptionInterstitial.createStartIntent(ctx, quality,
+ requirePasswordDefault);
+ startIntent.setClass(ctx, SetupEncryptionInterstitial.class);
+ startIntent.putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false)
+ .putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, -1);
+ return startIntent;
+ }
+
+ @Override
+ public Intent getIntent() {
+ Intent modIntent = new Intent(super.getIntent());
+ modIntent.putExtra(EXTRA_SHOW_FRAGMENT,
+ SetupEncryptionInterstitialFragment.class.getName());
+ return modIntent;
+ }
+
+ @Override
+ protected boolean isValidFragment(String fragmentName) {
+ return SetupEncryptionInterstitialFragment.class.getName().equals(fragmentName);
+ }
+
+ @Override
+ protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
+ resid = SetupWizardUtils.getTheme(getIntent(), resid);
+ super.onApplyThemeResource(theme, resid, first);
+ }
+
+ @Override
+ public void onNavigationBarCreated(SetupWizardNavBar bar) {
+ SetupWizardUtils.setImmersiveMode(this, bar);
+ }
+
+ @Override
+ public void onNavigateBack() {
+ onBackPressed();
+ }
+
+ @Override
+ public void onNavigateNext() {
+ setResult(RESULT_OK, getResultIntentData());
+ finish();
+ }
+
+ public static class SetupEncryptionInterstitialFragment extends EncryptionInterstitialFragment {
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.setup_template, container, false);
+ ViewGroup setupContent = (ViewGroup) view.findViewById(R.id.setup_content);
+ View content = super.onCreateView(inflater, setupContent, savedInstanceState);
+ setupContent.addView(content);
+ return view;
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ SetupWizardUtils.setHeaderText(getActivity(), R.string.encryption_interstitial_header);
+ }
+ }
+}
diff --git a/src/com/android/settings/SetupRedactionInterstitial.java b/src/com/android/settings/SetupRedactionInterstitial.java
new file mode 100644
index 0000000..96f4dff
--- /dev/null
+++ b/src/com/android/settings/SetupRedactionInterstitial.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings;
+
+import com.android.settings.notification.RedactionInterstitial;
+import com.android.setupwizard.navigationbar.SetupWizardNavBar;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * Setup Wizard's version of RedactionInterstitial screen. It inherits the logic and basic structure
+ * from RedactionInterstitial class, and should remain similar to that behaviorally. This class
+ * should only overload base methods for minor theme and behavior differences specific to Setup
+ * Wizard. Other changes should be done to RedactionInterstitial class instead and let this class
+ * inherit those changes.
+ */
+public class SetupRedactionInterstitial extends RedactionInterstitial
+ implements SetupWizardNavBar.NavigationBarListener{
+
+ public static Intent createStartIntent(Context ctx) {
+ Intent startIntent = RedactionInterstitial.createStartIntent(ctx);
+ startIntent.setClass(ctx, SetupRedactionInterstitial.class);
+ startIntent.putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false)
+ .putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, -1);
+ return startIntent;
+ }
+
+ @Override
+ public Intent getIntent() {
+ Intent modIntent = new Intent(super.getIntent());
+ modIntent.putExtra(EXTRA_SHOW_FRAGMENT,
+ SetupEncryptionInterstitialFragment.class.getName());
+ return modIntent;
+ }
+
+ @Override
+ protected boolean isValidFragment(String fragmentName) {
+ return SetupEncryptionInterstitialFragment.class.getName().equals(fragmentName);
+ }
+
+ @Override
+ protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
+ resid = SetupWizardUtils.getTheme(getIntent(), resid);
+ super.onApplyThemeResource(theme, resid, first);
+ }
+
+ @Override
+ public void onNavigationBarCreated(SetupWizardNavBar bar) {
+ SetupWizardUtils.setImmersiveMode(this, bar);
+ }
+
+ @Override
+ public void onNavigateBack() {
+ onBackPressed();
+ }
+
+ @Override
+ public void onNavigateNext() {
+ setResult(RESULT_OK, getResultIntentData());
+ finish();
+ }
+
+ public static class SetupEncryptionInterstitialFragment extends RedactionInterstitialFragment {
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.setup_template, container, false);
+ ViewGroup setupContent = (ViewGroup) view.findViewById(R.id.setup_content);
+ View content = super.onCreateView(inflater, setupContent, savedInstanceState);
+ setupContent.addView(content);
+ return view;
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ SetupWizardUtils.setHeaderText(getActivity(), R.string.notification_section_header);
+ }
+ }
+}