Whitelist fragments appropriate for an activity

Change-Id: If4f8c4e9d9949b652946cffe0ebb09b587e5a042
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 459b0c0..fefc77f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -823,7 +823,6 @@
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="android.settings.LOCATION_SOURCE_SETTINGS" />
-                <action android:name="android.credentials.UNLOCK" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
                 <category android:name="com.android.settings.SHORTCUT" />
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 8db5a75..d4b9a26 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -17,6 +17,7 @@
 package com.android.settings;
 
 import android.app.Activity;
+import android.app.Fragment;
 import android.app.PendingIntent;
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
@@ -35,6 +36,7 @@
 import android.widget.ListView;
 
 import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.ConfirmLockPattern.ConfirmLockPatternFragment;
 
 import java.util.List;
 
@@ -50,6 +52,12 @@
         return modIntent;
     }
 
+    @Override
+    protected boolean isValidFragment(String fragmentName) {
+        if (ChooseLockGenericFragment.class.getName().equals(fragmentName)) return true;
+        return false;
+    }
+
     public static class ChooseLockGenericFragment extends SettingsPreferenceFragment {
         private static final int MIN_PASSWORD_LENGTH = 4;
         private static final String KEY_UNLOCK_BACKUP_INFO = "unlock_backup_info";
diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java
index b16f3f6..c6f5212 100644
--- a/src/com/android/settings/ChooseLockPassword.java
+++ b/src/com/android/settings/ChooseLockPassword.java
@@ -19,6 +19,7 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.widget.PasswordEntryKeyboardHelper;
 import com.android.internal.widget.PasswordEntryKeyboardView;
+import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
 
 import android.app.Activity;
 import android.app.Fragment;
@@ -65,6 +66,12 @@
     }
 
     @Override
+    protected boolean isValidFragment(String fragmentName) {
+        if (ChooseLockPasswordFragment.class.getName().equals(fragmentName)) return true;
+        return false;
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         // TODO: Fix on phones
         // Disable IME on our window since we provide our own keyboard
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index f9c01b6..c3045e2 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -22,6 +22,7 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.widget.LockPatternView;
 import com.android.internal.widget.LockPatternView.Cell;
+import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
 
 import static com.android.internal.widget.LockPatternView.DisplayMode;
 
@@ -69,6 +70,12 @@
     }
 
     @Override
+    protected boolean isValidFragment(String fragmentName) {
+        if (ChooseLockPatternFragment.class.getName().equals(fragmentName)) return true;
+        return false;
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         // requestWindowFeature(Window.FEATURE_NO_TITLE);
         super.onCreate(savedInstanceState);
diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java
index 96839ba..d7402da 100644
--- a/src/com/android/settings/ConfirmLockPassword.java
+++ b/src/com/android/settings/ConfirmLockPassword.java
@@ -19,6 +19,7 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.widget.PasswordEntryKeyboardHelper;
 import com.android.internal.widget.PasswordEntryKeyboardView;
+import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
 
 import android.app.Activity;
 import android.app.Fragment;
@@ -52,6 +53,12 @@
     }
 
     @Override
+    protected boolean isValidFragment(String fragmentName) {
+        if (ConfirmLockPasswordFragment.class.getName().equals(fragmentName)) return true;
+        return false;
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         // Disable IME on our window since we provide our own keyboard
         //getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
diff --git a/src/com/android/settings/ConfirmLockPattern.java b/src/com/android/settings/ConfirmLockPattern.java
index dd375cc..3a1f06c 100644
--- a/src/com/android/settings/ConfirmLockPattern.java
+++ b/src/com/android/settings/ConfirmLockPattern.java
@@ -76,6 +76,12 @@
         return modIntent;
     }
 
+    @Override
+    protected boolean isValidFragment(String fragmentName) {
+        if (ConfirmLockPatternFragment.class.getName().equals(fragmentName)) return true;
+        return false;
+    }
+
     public static class ConfirmLockPatternFragment extends Fragment {
 
         // how long we wait to clear a wrong pattern
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index e90b1cd..20ec1a6 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -19,6 +19,7 @@
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.OnAccountsUpdateListener;
+import android.app.Fragment;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -53,13 +54,31 @@
 import android.widget.TextView;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.accessibility.ToggleAccessibilityServicePreferenceFragment;
+import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
+import com.android.settings.ChooseLockPassword.ChooseLockPasswordFragment;
+import com.android.settings.ChooseLockPattern.ChooseLockPatternFragment;
 import com.android.settings.accounts.AccountSyncSettings;
 import com.android.settings.accounts.AuthenticatorHelper;
 import com.android.settings.accounts.ManageAccountsSettings;
+import com.android.settings.applications.AppOpsSummary;
+import com.android.settings.applications.ManageApplications;
 import com.android.settings.bluetooth.BluetoothEnabler;
 import com.android.settings.bluetooth.BluetoothSettings;
+import com.android.settings.deviceinfo.Memory;
+import com.android.settings.deviceinfo.UsbSettings;
+import com.android.settings.fuelgauge.PowerUsageSummary;
+import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
+import com.android.settings.inputmethod.SpellCheckersSettings;
+import com.android.settings.inputmethod.UserDictionaryList;
+import com.android.settings.nfc.AndroidBeam;
+import com.android.settings.tts.TextToSpeechSettings;
+import com.android.settings.users.AppRestrictionsFragment;
+import com.android.settings.users.UserSettings;
+import com.android.settings.vpn2.VpnSettings;
 import com.android.settings.wfd.WifiDisplaySettings;
+import com.android.settings.wifi.AdvancedWifiSettings;
 import com.android.settings.wifi.WifiEnabler;
 import com.android.settings.wifi.WifiSettings;
 import com.android.settings.wifi.p2p.WifiP2pSettings;
@@ -267,6 +286,56 @@
         }
     }
 
+    private static final String[] ENTRY_FRAGMENTS = {
+        WirelessSettings.class.getName(),
+        WifiSettings.class.getName(),
+        AdvancedWifiSettings.class.getName(),
+        BluetoothSettings.class.getName(),
+        TetherSettings.class.getName(),
+        WifiP2pSettings.class.getName(),
+        VpnSettings.class.getName(),
+        DateTimeSettings.class.getName(),
+        LocalePicker.class.getName(),
+        InputMethodAndLanguageSettings.class.getName(),
+        SpellCheckersSettings.class.getName(),
+        UserDictionaryList.class.getName(),
+        UserDictionarySettings.class.getName(),
+        SoundSettings.class.getName(),
+        DisplaySettings.class.getName(),
+        DeviceInfoSettings.class.getName(),
+        ManageApplications.class.getName(),
+        NotificationStation.class.getName(),
+        AppOpsSummary.class.getName(),
+        LocationSettings.class.getName(),
+        SecuritySettings.class.getName(),
+        PrivacySettings.class.getName(),
+        DeviceAdminSettings.class.getName(),
+        AccessibilitySettings.class.getName(),
+        TextToSpeechSettings.class.getName(),
+        Memory.class.getName(),
+        DevelopmentSettings.class.getName(),
+        UsbSettings.class.getName(),
+        AndroidBeam.class.getName(),
+        WifiDisplaySettings.class.getName(),
+        PowerUsageSummary.class.getName(),
+        AccountSyncSettings.class.getName(),
+        CryptKeeperSettings.class.getName(),
+        DataUsageSummary.class.getName(),
+        DreamSettings.class.getName(),
+        UserSettings.class.getName(),
+        NotificationAccessSettings.class.getName(),
+    };
+
+    @Override
+    protected boolean isValidFragment(String fragmentName) {
+        // Almost all fragments are wrapped in this,
+        // except for a few that have their own activities.
+        for (int i = 0; i < ENTRY_FRAGMENTS.length; i++) {
+            if (ENTRY_FRAGMENTS[i].equals(fragmentName)) return true;
+        }
+        return false;
+    }
+
     private void switchToHeaderLocal(Header header) {
         mInLocalHeaderSwitch = true;
         switchToHeader(header);
@@ -877,4 +946,5 @@
     public static class NotificationStationActivity extends Settings { /* empty */ }
     public static class UserSettingsActivity extends Settings { /* empty */ }
     public static class NotificationAccessSettingsActivity extends Settings { /* empty */ }
+    public static class UsbSettingsActivity extends Settings { /* empty */ }
 }
diff --git a/src/com/android/settings/SubSettings.java b/src/com/android/settings/SubSettings.java
index eb275ad..34e9ba3 100644
--- a/src/com/android/settings/SubSettings.java
+++ b/src/com/android/settings/SubSettings.java
@@ -16,6 +16,11 @@
 
 package com.android.settings;
 
+import android.app.Fragment;
+import android.util.Log;
+
+import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
+
 /**
  * Stub class for showing sub-settings; we can't use the main Settings class
  * since for our app it is a special singleTask class.
@@ -27,4 +32,10 @@
         finish();
         return true;
     }
+
+    @Override
+    protected boolean isValidFragment(String fragmentName) {
+        Log.d("SubSettings", "Launching fragment " + fragmentName);
+        return true;
+    }
 }
diff --git a/src/com/android/settings/accounts/SyncSettingsActivity.java b/src/com/android/settings/accounts/SyncSettingsActivity.java
index ed0089e..96f16d6 100644
--- a/src/com/android/settings/accounts/SyncSettingsActivity.java
+++ b/src/com/android/settings/accounts/SyncSettingsActivity.java
@@ -16,9 +16,12 @@
 
 package com.android.settings.accounts;
 
+import android.app.Fragment;
 import android.content.Intent;
 import android.preference.PreferenceActivity;
 
+import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
+
 /**
  * Launcher activity for the SyncSettings fragment.
  *
@@ -31,4 +34,10 @@
         modIntent.putExtra(EXTRA_NO_HEADERS, true);
         return modIntent;
     }
+
+    @Override
+    protected boolean isValidFragment(String fragmentName) {
+        if (SyncSettings.class.getName().equals(fragmentName)) return true;
+        return false;
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/applications/InstalledAppDetailsTop.java b/src/com/android/settings/applications/InstalledAppDetailsTop.java
index 4051aeb..44a88fb 100644
--- a/src/com/android/settings/applications/InstalledAppDetailsTop.java
+++ b/src/com/android/settings/applications/InstalledAppDetailsTop.java
@@ -1,9 +1,13 @@
 package com.android.settings.applications;
 
+import android.app.Fragment;
 import android.content.Intent;
 import android.preference.PreferenceActivity;
 
+import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
+
 public class InstalledAppDetailsTop extends PreferenceActivity {
+
     @Override
     public Intent getIntent() {
         Intent modIntent = new Intent(super.getIntent());
@@ -11,4 +15,11 @@
         modIntent.putExtra(EXTRA_NO_HEADERS, true);
         return modIntent;
     }
+
+    @Override
+    protected boolean isValidFragment(String fragmentName) {
+        if (InstalledAppDetails.class.getName().equals(fragmentName)) return true;
+        return false;
+    }
+
 }
diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnablerActivity.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnablerActivity.java
index d70d5e4..5693e20 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnablerActivity.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnablerActivity.java
@@ -15,9 +15,12 @@
  */
 package com.android.settings.inputmethod;
 
+import android.app.Fragment;
 import android.content.Intent;
 import android.preference.PreferenceActivity;
 
+import com.android.settings.ChooseLockPassword.ChooseLockPasswordFragment;
+
 public class InputMethodAndSubtypeEnablerActivity extends PreferenceActivity {
     @Override
     public Intent getIntent() {
@@ -28,4 +31,11 @@
         }
         return modIntent;
     }
+
+    @Override
+    protected boolean isValidFragment(String fragmentName) {
+        if (InputMethodAndSubtypeEnabler.class.getName().equals(fragmentName)) return true;
+        return false;
+    }
+
 }
diff --git a/src/com/android/settings/wifi/WifiPickerActivity.java b/src/com/android/settings/wifi/WifiPickerActivity.java
index 12612b5..df6ed9d 100644
--- a/src/com/android/settings/wifi/WifiPickerActivity.java
+++ b/src/com/android/settings/wifi/WifiPickerActivity.java
@@ -16,6 +16,7 @@
 package com.android.settings.wifi;
 
 import com.android.settings.ButtonBarHandler;
+import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
 
 import android.app.Fragment;
 import android.content.Intent;
@@ -42,6 +43,12 @@
         return modIntent;
     }
 
+    @Override
+    protected boolean isValidFragment(String fragmentName) {
+        if (WifiSettings.class.getName().equals(fragmentName)) return true;
+        return false;
+    }
+
     /**
      * Almost dead copy of
      * {@link PreferenceActivity#startWithFragment(String, Bundle, Fragment, int)}, except