Add Search / Indexing to Data Usage / Mobile Hotspots

- implement a BaseSearchIndexProvider and pass all the needed
strings to index (including the Wi-Fi SSIDs)

Change-Id: Ic7a640c76cd7c2af77585e87e216b283af61a29e
This commit is contained in:
Fabrice Di Meglio
2014-06-17 12:30:18 -07:00
parent dbaf080f44
commit c9711beb3c
5 changed files with 121 additions and 3 deletions

View File

@@ -14,7 +14,8 @@
limitations under the License.
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/display_settings">
<Preference
android:summary="@string/data_usage_metered_body"

View File

@@ -66,7 +66,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Locale;
public class Utils {
public final class Utils {
/**
* Set the preference's title to the matching activity's label.

View File

@@ -22,6 +22,7 @@ import static com.android.settings.DataUsageSummary.hasReadyMobileRadio;
import static com.android.settings.DataUsageSummary.hasWifiRadio;
import android.content.Context;
import android.content.res.Resources;
import android.net.NetworkPolicy;
import android.net.NetworkPolicyManager;
import android.net.NetworkTemplate;
@@ -31,15 +32,23 @@ import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.provider.SearchIndexableResource;
import android.telephony.TelephonyManager;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Panel to configure {@link NetworkPolicy#metered} for networks.
*/
public class DataUsageMeteredSettings extends SettingsPreferenceFragment {
public class DataUsageMeteredSettings extends SettingsPreferenceFragment implements Indexable {
private static final boolean SHOW_MOBILE_CATEGORY = false;
@@ -141,4 +150,82 @@ public class DataUsageMeteredSettings extends SettingsPreferenceFragment {
}
}
}
/**
* For search
*/
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
final Resources res = context.getResources();
// Add fragment title
SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.data_usage_menu_metered);
data.screenTitle = res.getString(R.string.data_usage_menu_metered);
result.add(data);
// Body
data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.data_usage_metered_body);
data.screenTitle = res.getString(R.string.data_usage_menu_metered);
result.add(data);
if (SHOW_MOBILE_CATEGORY && hasReadyMobileRadio(context)) {
// Mobile networks category
data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.data_usage_metered_mobile);
data.screenTitle = res.getString(R.string.data_usage_menu_metered);
result.add(data);
final TelephonyManager tele = TelephonyManager.from(context);
data = new SearchIndexableRaw(context);
data.title = tele.getNetworkOperatorName();
data.screenTitle = res.getString(R.string.data_usage_menu_metered);
result.add(data);
}
// Wi-Fi networks category
data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.data_usage_metered_wifi);
data.screenTitle = res.getString(R.string.data_usage_menu_metered);
result.add(data);
final WifiManager wifiManager =
(WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (hasWifiRadio(context) && wifiManager.isWifiEnabled()) {
for (WifiConfiguration config : wifiManager.getConfiguredNetworks()) {
if (config.SSID != null) {
final String networkId = config.SSID;
data = new SearchIndexableRaw(context);
data.title = removeDoubleQuotes(networkId);
data.screenTitle = res.getString(R.string.data_usage_menu_metered);
result.add(data);
}
}
} else {
data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.data_usage_metered_wifi_disabled);
data.screenTitle = res.getString(R.string.data_usage_menu_metered);
result.add(data);
}
return result;
}
@Override
public List<String> getNonIndexableKeys(Context context) {
final ArrayList<String> result = new ArrayList<String>();
if (!SHOW_MOBILE_CATEGORY || !hasReadyMobileRadio(context)) {
result.add("mobile");
}
return result;
}
};
}

View File

@@ -34,6 +34,7 @@ import com.android.settings.fuelgauge.BatterySaverSettings;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
import com.android.settings.location.LocationSettings;
import com.android.settings.net.DataUsageMeteredSettings;
import com.android.settings.notification.NotificationDisplaySettings;
import com.android.settings.notification.NotificationSettings;
import com.android.settings.notification.OtherSoundSettings;
@@ -81,50 +82,71 @@ public final class Ranking {
private static HashMap<String, Integer> sBaseRankMap = new HashMap<String, Integer>();
static {
// Wi-Fi
sRankMap.put(WifiSettings.class.getName(), RANK_WIFI);
sRankMap.put(AdvancedWifiSettings.class.getName(), RANK_WIFI);
// BT
sRankMap.put(BluetoothSettings.class.getName(), RANK_BT);
// DataUsage
sRankMap.put(DataUsageSummary.class.getName(), RANK_DATA_USAGE);
sRankMap.put(DataUsageMeteredSettings.class.getName(), RANK_DATA_USAGE);
// Other wireless settinfs
sRankMap.put(WirelessSettings.class.getName(), RANK_WIRELESS);
// Home
sRankMap.put(HomeSettings.class.getName(), RANK_HOME);
// Display
sRankMap.put(DisplaySettings.class.getName(), RANK_DISPLAY);
// Wallpapers
sRankMap.put(WallpaperTypeSettings.class.getName(), RANK_WALLPAPER);
// Notifications
sRankMap.put(NotificationSettings.class.getName(), RANK_NOTIFICATIONS);
sRankMap.put(NotificationDisplaySettings.class.getName(), RANK_NOTIFICATIONS);
sRankMap.put(OtherSoundSettings.class.getName(), RANK_NOTIFICATIONS);
sRankMap.put(ZenModeSettings.class.getName(), RANK_NOTIFICATIONS);
// Memory
sRankMap.put(Memory.class.getName(), RANK_MEMORY);
// Battery
sRankMap.put(PowerUsageSummary.class.getName(), RANK_POWER_USAGE);
sRankMap.put(BatterySaverSettings.class.getName(), RANK_POWER_USAGE);
// Users
sRankMap.put(UserSettings.class.getName(), RANK_USERS);
// Location
sRankMap.put(LocationSettings.class.getName(), RANK_LOCATION);
// Security
sRankMap.put(SecuritySettings.class.getName(), RANK_SECURITY);
sRankMap.put(ChooseLockGeneric.ChooseLockGenericFragment.class.getName(), RANK_SECURITY);
// IMEs
sRankMap.put(InputMethodAndLanguageSettings.class.getName(), RANK_IME);
// Privacy
sRankMap.put(PrivacySettings.class.getName(), RANK_PRIVACY);
// Date / Time
sRankMap.put(DateTimeSettings.class.getName(), RANK_DATE_TIME);
// Accessibility
sRankMap.put(AccessibilitySettings.class.getName(), RANK_ACCESSIBILITY);
// Print
sRankMap.put(PrintSettingsFragment.class.getName(), RANK_PRINTING);
// Development
sRankMap.put(DevelopmentSettings.class.getName(), RANK_DEVELOPEMENT);
// Device infos
sRankMap.put(DeviceInfoSettings.class.getName(), RANK_DEVICE_INFO);
sBaseRankMap.put("com.android.settings", 0);

View File

@@ -37,6 +37,7 @@ import com.android.settings.fuelgauge.BatterySaverSettings;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
import com.android.settings.location.LocationSettings;
import com.android.settings.net.DataUsageMeteredSettings;
import com.android.settings.notification.NotificationDisplaySettings;
import com.android.settings.notification.NotificationSettings;
import com.android.settings.notification.OtherSoundSettings;
@@ -85,6 +86,13 @@ public final class SearchIndexableResources {
DataUsageSummary.class.getName(),
R.drawable.ic_settings_data_usage));
sResMap.put(DataUsageMeteredSettings.class.getName(),
new SearchIndexableResource(
Ranking.getRankForClassName(DataUsageMeteredSettings.class.getName()),
NO_DATA_RES_ID,
DataUsageMeteredSettings.class.getName(),
R.drawable.ic_settings_data_usage));
sResMap.put(WirelessSettings.class.getName(),
new SearchIndexableResource(
Ranking.getRankForClassName(WirelessSettings.class.getName()),