From ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89 Mon Sep 17 00:00:00 2001 From: Maurice Lam Date: Mon, 1 Dec 2014 10:41:49 -0800 Subject: [PATCH] [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 --- AndroidManifest.xml | 6 ++ res/layout/encryption_interstitial.xml | 4 +- res/layout/redaction_interstitial.xml | 4 +- res/values/themes.xml | 4 + .../android/settings/ChooseLockGeneric.java | 11 +- .../android/settings/ChooseLockPassword.java | 6 +- .../android/settings/ChooseLockPattern.java | 6 +- .../settings/SetupChooseLockGeneric.java | 16 +++ .../settings/SetupChooseLockPassword.java | 14 +++ .../settings/SetupChooseLockPattern.java | 14 +++ .../settings/SetupEncryptionInterstitial.java | 102 ++++++++++++++++++ .../settings/SetupRedactionInterstitial.java | 102 ++++++++++++++++++ 12 files changed, 280 insertions(+), 9 deletions(-) create mode 100644 src/com/android/settings/SetupEncryptionInterstitial.java create mode 100644 src/com/android/settings/SetupRedactionInterstitial.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 82b135f6de1..4360443cc9c 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1109,6 +1109,9 @@ + + + + diff --git a/res/layout/encryption_interstitial.xml b/res/layout/encryption_interstitial.xml index 362ff8228fa..162ad0e077d 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"> + android:paddingStart="?attr/side_margin" + android:paddingEnd="?attr/side_margin"> + @@ -40,6 +41,7 @@ @*android:drawable/ic_menu_moreoverflow_material @drawable/ic_wps_dark @color/setup_divider_color_dark + 0dip @color/setup_wizard_wifi_color_dark @drawable/wifi_signal_teal ?android:attr/colorBackground @@ -57,6 +59,7 @@ @*android:drawable/ic_menu_moreoverflow_material @drawable/ic_wps_light @color/setup_divider_color_light + 0dip @color/setup_wizard_wifi_color_light @drawable/wifi_signal_teal ?android:attr/colorBackground @@ -98,6 +101,7 @@ @*android:drawable/ic_menu_moreoverflow_holo_dark @drawable/ic_wps_dark @drawable/wifi_signal_teal + @dimen/settings_side_margin @style/Theme.ActionBar diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java index 1f2f2b395ac..3cbcbb4bd52 100644 --- a/src/com/android/settings/ChooseLockGeneric.java +++ b/src/com/android/settings/ChooseLockGeneric.java @@ -189,13 +189,13 @@ public class ChooseLockGeneric extends SettingsActivity { 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 @@ public class ChooseLockGeneric extends SettingsActivity { 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 dbf6d2f366a..2c0598681e5 100644 --- a/src/com/android/settings/ChooseLockPassword.java +++ b/src/com/android/settings/ChooseLockPassword.java @@ -299,6 +299,10 @@ public class ChooseLockPassword extends SettingsActivity { } } + protected Intent getRedactionInterstitialIntent(Context context) { + return RedactionInterstitial.createStartIntent(context); + } + protected void updateStage(Stage stage) { final Stage previousStage = mUiStage; mUiStage = stage; @@ -441,7 +445,7 @@ public class ChooseLockPassword extends SettingsActivity { 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 d0551843874..85694b1999e 100644 --- a/src/com/android/settings/ChooseLockPattern.java +++ b/src/com/android/settings/ChooseLockPattern.java @@ -386,6 +386,10 @@ public class ChooseLockPattern extends SettingsActivity { 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 @@ public class ChooseLockPattern extends SettingsActivity { 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 def859326d2..2894f859a3c 100644 --- a/src/com/android/settings/SetupChooseLockGeneric.java +++ b/src/com/android/settings/SetupChooseLockGeneric.java @@ -28,6 +28,13 @@ import android.view.View; 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 @@ public class SetupChooseLockGeneric extends ChooseLockGeneric 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 5366a55478c..ed6fab4c06a 100644 --- a/src/com/android/settings/SetupChooseLockPassword.java +++ b/src/com/android/settings/SetupChooseLockPassword.java @@ -27,6 +27,13 @@ import android.view.LayoutInflater; 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 @@ public class SetupChooseLockPassword extends ChooseLockPassword 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 019f4340c8d..b44dea1075f 100644 --- a/src/com/android/settings/SetupChooseLockPattern.java +++ b/src/com/android/settings/SetupChooseLockPattern.java @@ -27,6 +27,13 @@ import android.view.LayoutInflater; 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 @@ public class SetupChooseLockPattern extends ChooseLockPattern 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 00000000000..53548bd2377 --- /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 00000000000..96f4dffd099 --- /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); + } + } +}