[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/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);
+        }
+    }
+}