OSDN Git Service

Index account settings for settings search.
authorJulia Reynolds <juliacr@google.com>
Tue, 18 Aug 2015 12:31:11 +0000 (08:31 -0400)
committerJulia Reynolds <juliacr@google.com>
Tue, 18 Aug 2015 14:36:11 +0000 (10:36 -0400)
Bug: 19390455
Change-Id: Ie55c46788b010dc920b06b38008baad3ed37600a

src/com/android/settings/accounts/AccountSettings.java
src/com/android/settings/search/Ranking.java
src/com/android/settings/search/SearchIndexableResources.java

index 94958a0..3c68ca3 100644 (file)
@@ -32,6 +32,7 @@ import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.UserInfo;
+import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.UserHandle;
@@ -44,8 +45,8 @@ import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceClickListener;
+import android.provider.SearchIndexableResource;
 import android.preference.PreferenceGroup;
-import android.preference.PreferenceCategory;
 import android.preference.PreferenceScreen;
 
 import com.android.internal.logging.MetricsLogger;
@@ -53,9 +54,14 @@ import com.android.settings.AccessiblePreferenceCategory;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Index;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
 import com.android.settings.users.UserDialogs;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -73,7 +79,7 @@ import static android.provider.Settings.EXTRA_AUTHORITIES;
  */
 public class AccountSettings extends SettingsPreferenceFragment
         implements AuthenticatorHelper.OnAccountsUpdateListener,
-        OnPreferenceClickListener {
+        OnPreferenceClickListener, Indexable {
     public static final String TAG = "AccountSettings";
 
     private static final String KEY_ACCOUNT = "account";
@@ -297,6 +303,8 @@ public class AccountSettings extends SettingsPreferenceFragment
             }
         }
         mProfiles.put(userInfo.id, profileData);
+        Index.getInstance(getActivity()).updateFromClassNameResource(
+                AccountSettings.class.getName(), true, true);
     }
 
     private Preference newAddAccountPreference(Context context) {
@@ -633,6 +641,47 @@ public class AccountSettings extends SettingsPreferenceFragment
             outState.putParcelable(SAVE_USER_HANDLE, mUserHandle);
         }
     }
-    // TODO Implement a {@link SearchIndexProvider} to allow Indexing and Search of account types
-    // See http://b/15403806
+
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+        @Override
+        public List<SearchIndexableResource> getXmlResourcesToIndex(
+                Context context, boolean enabled) {
+            final SearchIndexableResource sir = new SearchIndexableResource(context);
+            sir.xmlResId = R.xml.account_settings;
+            return Arrays.asList(sir);
+        }
+
+        @Override
+        public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+            final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
+            final Resources res = context.getResources();
+            final String screenTitle = res.getString(R.string.account_settings_title);
+
+            final UserManager um = UserManager.get(context);
+            List<UserInfo> profiles = um.getProfiles(UserHandle.myUserId());
+            final int profilesCount = profiles.size();
+            for (int i = 0; i < profilesCount; i++) {
+                UserInfo userInfo = profiles.get(i);
+                if (userInfo.isEnabled()) {
+                    if (!um.hasUserRestriction(
+                            DISALLOW_MODIFY_ACCOUNTS, userInfo.getUserHandle())) {
+                        SearchIndexableRaw data = new SearchIndexableRaw(context);
+                        data = new SearchIndexableRaw(context);
+                        data.title = res.getString(R.string.add_account_label);
+                        data.screenTitle = screenTitle;
+                        result.add(data);
+                    }
+                    if (userInfo.isManagedProfile()) {
+                        SearchIndexableRaw data = new SearchIndexableRaw(context);
+                        data = new SearchIndexableRaw(context);
+                        data.title = res.getString(R.string.remove_managed_profile_label);
+                        data.screenTitle = screenTitle;
+                        result.add(data);
+                    }
+                }
+            }
+            return result;
+        }
+    };
 }
index 3edfee7..18ae1ec 100644 (file)
@@ -31,6 +31,7 @@ import com.android.settings.WallpaperTypeSettings;
 import com.android.settings.WifiCallingSettings;
 import com.android.settings.WirelessSettings;
 import com.android.settings.accessibility.AccessibilitySettings;
+import com.android.settings.accounts.AccountSettings;
 import com.android.settings.applications.AdvancedAppSettings;
 import com.android.settings.applications.ManageDefaultApps;
 import com.android.settings.bluetooth.BluetoothSettings;
@@ -75,13 +76,14 @@ public final class Ranking {
     public static final int RANK_USERS = 13;
     public static final int RANK_LOCATION = 14;
     public static final int RANK_SECURITY = 15;
-    public static final int RANK_IME = 16;
-    public static final int RANK_PRIVACY = 17;
-    public static final int RANK_DATE_TIME = 18;
-    public static final int RANK_ACCESSIBILITY = 19;
-    public static final int RANK_PRINTING = 20;
-    public static final int RANK_DEVELOPEMENT = 21;
-    public static final int RANK_DEVICE_INFO = 22;
+    public static final int RANK_ACCOUNT = 16;
+    public static final int RANK_IME = 17;
+    public static final int RANK_PRIVACY = 18;
+    public static final int RANK_DATE_TIME = 19;
+    public static final int RANK_ACCESSIBILITY = 20;
+    public static final int RANK_PRINTING = 21;
+    public static final int RANK_DEVELOPEMENT = 22;
+    public static final int RANK_DEVICE_INFO = 23;
 
     public static final int RANK_UNDEFINED = -1;
     public static final int RANK_OTHERS = 1024;
@@ -151,6 +153,9 @@ public final class Ranking {
         sRankMap.put(ChooseLockGeneric.ChooseLockGenericFragment.class.getName(), RANK_SECURITY);
         sRankMap.put(ScreenPinningSettings.class.getName(), RANK_SECURITY);
 
+        // Accounts
+        sRankMap.put(AccountSettings.class.getName(), RANK_ACCOUNT);
+
         // IMEs
         sRankMap.put(InputMethodAndLanguageSettings.class.getName(), RANK_IME);
 
index f3c0b42..6b4a947 100644 (file)
@@ -33,6 +33,7 @@ import com.android.settings.WallpaperTypeSettings;
 import com.android.settings.WifiCallingSettings;
 import com.android.settings.WirelessSettings;
 import com.android.settings.accessibility.AccessibilitySettings;
+import com.android.settings.accounts.AccountSettings;
 import com.android.settings.applications.AdvancedAppSettings;
 import com.android.settings.applications.ManageDefaultApps;
 import com.android.settings.bluetooth.BluetoothSettings;
@@ -240,6 +241,13 @@ public final class SearchIndexableResources {
                         ScreenPinningSettings.class.getName(),
                         R.drawable.ic_settings_security));
 
+        sResMap.put(AccountSettings.class.getName(),
+                new SearchIndexableResource(
+                        Ranking.getRankForClassName(AccountSettings.class.getName()),
+                        NO_DATA_RES_ID,
+                        AccountSettings.class.getName(),
+                        R.drawable.ic_settings_accounts));
+
         sResMap.put(InputMethodAndLanguageSettings.class.getName(),
                 new SearchIndexableResource(
                         Ranking.getRankForClassName(InputMethodAndLanguageSettings.class.getName()),