OSDN Git Service

Integrate remote display routes into screen cast settings UI.
[android-x86/packages-apps-Settings.git] / src / com / android / settings / Settings.java
index 87d34c6..db7eb2b 100644 (file)
@@ -19,6 +19,10 @@ package com.android.settings;
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.OnAccountsUpdateListener;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
 import android.app.admin.DevicePolicyManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -27,7 +31,6 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.SharedPreferences;
 import android.content.pm.ActivityInfo;
-import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
@@ -78,6 +81,7 @@ import com.android.settings.inputmethod.UserDictionaryList;
 import com.android.settings.location.LocationSettings;
 import com.android.settings.nfc.AndroidBeam;
 import com.android.settings.nfc.PaymentSettings;
+import com.android.settings.print.PrintJobSettingsFragment;
 import com.android.settings.print.PrintServiceSettingsFragment;
 import com.android.settings.print.PrintSettingsFragment;
 import com.android.settings.tts.TextToSpeechSettings;
@@ -117,6 +121,10 @@ public class Settings extends PreferenceActivity
     private static final String SAVE_KEY_CURRENT_HEADER = "com.android.settings.CURRENT_HEADER";
     private static final String SAVE_KEY_PARENT_HEADER = "com.android.settings.PARENT_HEADER";
 
+    static final int DIALOG_ONLY_ONE_HOME = 1;
+
+    private static boolean sShowNoHomeNotice = false;
+
     private String mFragmentClass;
     private int mTopLevelHeaderId;
     private Header mFirstHeader;
@@ -340,6 +348,7 @@ public class Settings extends PreferenceActivity
         NotificationAccessSettings.class.getName(),
         ManageAccountsSettings.class.getName(),
         PrintSettingsFragment.class.getName(),
+        PrintJobSettingsFragment.class.getName(),
         TrustedCredentialsSettings.class.getName(),
         PaymentSettings.class.getName(),
         KeyboardLayoutPickerFragment.class.getName()
@@ -497,7 +506,6 @@ public class Settings extends PreferenceActivity
         // uiOptions for fragments also defined as activities in manifest.
         if (WifiSettings.class.getName().equals(fragmentName) ||
                 WifiP2pSettings.class.getName().equals(fragmentName) ||
-                WifiDisplaySettings.class.getName().equals(fragmentName) ||
                 BluetoothSettings.class.getName().equals(fragmentName) ||
                 DreamSettings.class.getName().equals(fragmentName) ||
                 LocationSettings.class.getName().equals(fragmentName) ||
@@ -516,8 +524,10 @@ public class Settings extends PreferenceActivity
      */
     @Override
     public void onBuildHeaders(List<Header> headers) {
-        loadHeadersFromResource(R.xml.settings_headers, headers);
-        updateHeaderList(headers);
+        if (!onIsHidingHeaders()) {
+            loadHeadersFromResource(R.xml.settings_headers, headers);
+            updateHeaderList(headers);
+        }
     }
 
     private void updateHeaderList(List<Header> target) {
@@ -655,6 +665,7 @@ public class Settings extends PreferenceActivity
                 }
             }
             accountHeaders.add(accHeader);
+            mAuthenticatorHelper.preloadDrawableForType(this, accountType);
         }
 
         // Sort by label
@@ -676,18 +687,40 @@ public class Settings extends PreferenceActivity
     }
 
     private boolean updateHomeSettingHeaders(Header header) {
+        // Once we decide to show Home settings, keep showing it forever
+        SharedPreferences sp = getSharedPreferences(HomeSettings.HOME_PREFS, Context.MODE_PRIVATE);
+        if (sp.getBoolean(HomeSettings.HOME_PREFS_DO_SHOW, false)) {
+            return true;
+        }
+
         try {
             final ArrayList<ResolveInfo> homeApps = new ArrayList<ResolveInfo>();
             getPackageManager().getHomeActivities(homeApps);
             if (homeApps.size() < 2) {
                 // When there's only one available home app, omit this settings
-                // category entirely at the top level UI.
+                // category entirely at the top level UI.  If the user just
+                // uninstalled the penultimate home app candidiate, we also
+                // now tell them about why they aren't seeing 'Home' in the list.
+                if (sShowNoHomeNotice) {
+                    sShowNoHomeNotice = false;
+                    NoHomeDialogFragment.show(this);
+                }
                 return false;
+            } else {
+                // Okay, we're allowing the Home settings category.  Tell it, when
+                // invoked via this front door, that we'll need to be told about the
+                // case when the user uninstalls all but one home app.
+                if (header.fragmentArguments == null) {
+                    header.fragmentArguments = new Bundle();
+                }
+                header.fragmentArguments.putBoolean(HomeSettings.HOME_SHOW_NOTICE, true);
             }
         } catch (Exception e) {
             // Can't look up the home activity; bail on configuring the icon
             Log.w(LOG_TAG, "Problem looking up home activity!", e);
         }
+
+        sp.edit().putBoolean(HomeSettings.HOME_PREFS_DO_SHOW, true).apply();
         return true;
     }
 
@@ -724,6 +757,21 @@ public class Settings extends PreferenceActivity
         return super.getNextButton();
     }
 
+    public static class NoHomeDialogFragment extends DialogFragment {
+        public static void show(Activity parent) {
+            final NoHomeDialogFragment dialog = new NoHomeDialogFragment();
+            dialog.show(parent.getFragmentManager(), null);
+        }
+
+        @Override
+        public Dialog onCreateDialog(Bundle savedInstanceState) {
+            return new AlertDialog.Builder(getActivity())
+                    .setMessage(R.string.only_one_home_message)
+                    .setPositiveButton(android.R.string.ok, null)
+                    .create();
+        }
+    }
+
     private static class HeaderAdapter extends ArrayAdapter<Header> {
         static final int HEADER_TYPE_CATEGORY = 0;
         static final int HEADER_TYPE_NORMAL = 1;
@@ -915,11 +963,6 @@ public class Settings extends PreferenceActivity
                             ManageAccountsSettings.KEY_ACCOUNT_TYPE);
                     Drawable icon = mAuthHelper.getDrawableForType(getContext(), accType);
                     setHeaderIcon(holder, icon);
-                } else if (header.extras != null &&
-                        header.extras.containsKey(HomeSettings.CURRENT_HOME)) {
-                    ActivityInfo ai = header.extras.getParcelable(HomeSettings.CURRENT_HOME);
-                    Drawable icon = ai.loadIcon(getContext().getPackageManager());
-                    setHeaderIcon(holder, icon);
                 } else {
                     holder.icon.setImageResource(header.iconRes);
                 }
@@ -1012,6 +1055,10 @@ public class Settings extends PreferenceActivity
         invalidateHeaders();
     }
 
+    public static void requestHomeNotice() {
+        sShowNoHomeNotice = true;
+    }
+
     /*
      * Settings subclasses for launching independently.
      */
@@ -1062,4 +1109,5 @@ public class Settings extends PreferenceActivity
     public static class TrustedCredentialsSettingsActivity extends Settings { /* empty */ }
     public static class PaymentSettingsActivity extends Settings { /* empty */ }
     public static class PrintSettingsActivity extends Settings { /* empty */ }
+    public static class PrintJobSettingsActivity extends Settings { /* empty */ }
 }