diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java index 94958a07a4f..3c68ca3038f 100644 --- a/src/com/android/settings/accounts/AccountSettings.java +++ b/src/com/android/settings/accounts/AccountSettings.java @@ -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 getXmlResourcesToIndex( + Context context, boolean enabled) { + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.account_settings; + return Arrays.asList(sir); + } + + @Override + public List getRawDataToIndex(Context context, boolean enabled) { + final List result = new ArrayList(); + final Resources res = context.getResources(); + final String screenTitle = res.getString(R.string.account_settings_title); + + final UserManager um = UserManager.get(context); + List 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 3edfee75d23..18ae1eca398 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.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); diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index f3c0b42f9b2..6b4a94751e0 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.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()),