Index account settings for settings search.
Bug: 19390455
Change-Id: Ie55c46788b010dc920b06b38008baad3ed37600a
diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java
index 94958a0..3c68ca3 100644
--- a/src/com/android/settings/accounts/AccountSettings.java
+++ b/src/com/android/settings/accounts/AccountSettings.java
@@ -32,6 +32,7 @@
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.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.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 @@
*/
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 @@
}
}
mProfiles.put(userInfo.id, profileData);
+ Index.getInstance(getActivity()).updateFromClassNameResource(
+ AccountSettings.class.getName(), true, true);
}
private Preference newAddAccountPreference(Context context) {
@@ -633,6 +641,47 @@
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;
+ }
+ };
}
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index 3edfee7..18ae1ec 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -31,6 +31,7 @@
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 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 @@
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);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index f3c0b42..6b4a947 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -33,6 +33,7 @@
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 @@
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()),