OSDN Git Service

[FRP] Theme interstitials for lock screen setup
authorMaurice Lam <yukl@google.com>
Mon, 1 Dec 2014 18:41:49 +0000 (10:41 -0800)
committerMaurice Lam <yukl@google.com>
Tue, 2 Dec 2014 04:24:08 +0000 (20:24 -0800)
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

12 files changed:
AndroidManifest.xml
res/layout/encryption_interstitial.xml
res/layout/redaction_interstitial.xml
res/values/themes.xml
src/com/android/settings/ChooseLockGeneric.java
src/com/android/settings/ChooseLockPassword.java
src/com/android/settings/ChooseLockPattern.java
src/com/android/settings/SetupChooseLockGeneric.java
src/com/android/settings/SetupChooseLockPassword.java
src/com/android/settings/SetupChooseLockPattern.java
src/com/android/settings/SetupEncryptionInterstitial.java [new file with mode: 0644]
src/com/android/settings/SetupRedactionInterstitial.java [new file with mode: 0644]

index 82b135f..4360443 100644 (file)
             </intent-filter>
         </activity>
 
+        <activity android:name=".SetupRedactionInterstitial"
+            android:theme="@style/SetupWizardDisableAppStartingTheme"/>
+
         <activity android:name=".notification.RedactionInterstitial"/>
 
         <activity android:name=".notification.RedactionSettingsStandalone"
         <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 -->
index 362ff82..162ad0e 100644 (file)
@@ -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"
index edcf5b8..c56db11 100644 (file)
@@ -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"
index 83618cb..d4875e2 100644 (file)
@@ -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>
         <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>
index 1f2f2b3..3cbcbb4 100644 (file)
@@ -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
index dbf6d2f..2c05986 100644 (file)
@@ -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();
index d055184..85694b1 100644 (file)
@@ -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()));
             }
         }
     }
index def8593..2894f85 100644 (file)
@@ -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;
+        }
     }
 }
index 5366a55..ed6fab4 100644 (file)
@@ -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;
+        }
     }
 }
index 019f434..b44dea1 100644 (file)
@@ -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 (file)
index 0000000..53548bd
--- /dev/null
@@ -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 (file)
index 0000000..96f4dff
--- /dev/null
@@ -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);
+        }
+    }
+}