diff options
Diffstat (limited to 'src')
3 files changed, 207 insertions, 143 deletions
diff --git a/src/com/android/settings/cyanogenmod/QuickSettings.java b/src/com/android/settings/cyanogenmod/QuickSettings.java index b48e891..508219e 100644 --- a/src/com/android/settings/cyanogenmod/QuickSettings.java +++ b/src/com/android/settings/cyanogenmod/QuickSettings.java @@ -16,17 +16,6 @@ package com.android.settings.cyanogenmod; -import static com.android.internal.util.cm.QSConstants.TILE_BLUETOOTH; -import static com.android.internal.util.cm.QSConstants.TILE_CAMERA; -import static com.android.internal.util.cm.QSConstants.TILE_MOBILEDATA; -import static com.android.internal.util.cm.QSConstants.TILE_NETWORKMODE; -import static com.android.internal.util.cm.QSConstants.TILE_NFC; -import static com.android.internal.util.cm.QSConstants.TILE_PROFILE; -import static com.android.internal.util.cm.QSConstants.TILE_WIFIAP; -import static com.android.internal.util.cm.QSConstants.TILE_LTE; -import static com.android.internal.util.cm.QSConstants.TILE_TORCH; -import static com.android.internal.util.cm.QSConstants.TILE_EXPANDEDDESKTOP; - import android.content.ContentResolver; import android.content.pm.PackageManager; import android.content.res.Resources; @@ -40,9 +29,8 @@ import android.preference.PreferenceCategory; import android.preference.PreferenceScreen; import android.provider.Settings; import android.text.TextUtils; -import android.util.Log; -import com.android.internal.telephony.Phone; +import com.android.internal.util.cm.QSConstants; import com.android.internal.util.cm.QSUtils; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; @@ -56,7 +44,6 @@ import java.util.HashSet; import java.util.Set; public class QuickSettings extends SettingsPreferenceFragment implements OnPreferenceChangeListener { - private static final String TAG = "QuickSettings"; private static final String SEPARATOR = "OV=I=XseparatorX=I=VO"; private static final String EXP_RING_MODE = "pref_ring_mode"; @@ -100,7 +87,6 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe super.onActivityCreated(savedInstanceState); PreferenceScreen prefSet = getPreferenceScreen(); - PackageManager pm = getPackageManager(); ContentResolver resolver = getActivity().getContentResolver(); mGeneralSettings = (PreferenceCategory) prefSet.findPreference(GENERAL_SETTINGS); mStaticTiles = (PreferenceCategory) prefSet.findPreference(STATIC_TILES); @@ -183,74 +169,20 @@ public class QuickSettings extends SettingsPreferenceFragment implements OnPrefe mDynamicWifi = null; } } + } - // Don't show mobile data options if not supported - if (!QSUtils.deviceSupportsMobileData(getActivity())) { - QuickSettingsUtil.TILES.remove(TILE_MOBILEDATA); - QuickSettingsUtil.TILES.remove(TILE_WIFIAP); - QuickSettingsUtil.TILES.remove(TILE_NETWORKMODE); - if(mNetworkMode != null) { - mStaticTiles.removePreference(mNetworkMode); - } - } else { - // We have telephony support however, some phones run on networks not supported - // by the networkmode tile so remove both it and the associated options list - int network_state = -99; - try { - network_state = Settings.Global.getInt(resolver, - Settings.Global.PREFERRED_NETWORK_MODE); - } catch (Settings.SettingNotFoundException e) { - Log.e(TAG, "Unable to retrieve PREFERRED_NETWORK_MODE", e); - } + @Override + public void onResume() { + super.onResume(); + QuickSettingsUtil.updateAvailableTiles(getActivity()); - switch (network_state) { - // list of supported network modes - case Phone.NT_MODE_WCDMA_PREF: - case Phone.NT_MODE_WCDMA_ONLY: - case Phone.NT_MODE_GSM_UMTS: - case Phone.NT_MODE_GSM_ONLY: - break; - default: - QuickSettingsUtil.TILES.remove(TILE_NETWORKMODE); - mStaticTiles.removePreference(mNetworkMode); - break; + if (mNetworkMode != null) { + if (QuickSettingsUtil.isTileAvailable(QSConstants.TILE_NETWORKMODE)) { + mStaticTiles.addPreference(mNetworkMode); + } else { + mStaticTiles.removePreference(mNetworkMode); } } - - // Don't show the bluetooth options if not supported - if (!QSUtils.deviceSupportsBluetooth()) { - QuickSettingsUtil.TILES.remove(TILE_BLUETOOTH); - } - - // Don't show the profiles tile if profiles are disabled - if (!QSUtils.systemProfilesEnabled(resolver)) { - QuickSettingsUtil.TILES.remove(TILE_PROFILE); - } - - // Don't show the NFC tile if not supported - if (!QSUtils.deviceSupportsNfc(getActivity())) { - QuickSettingsUtil.TILES.remove(TILE_NFC); - } - - // Don't show the LTE tile if not supported - if (!QSUtils.deviceSupportsLte(getActivity())) { - QuickSettingsUtil.TILES.remove(TILE_LTE); - } - - // Don't show the Torch tile if not supported - if (!getResources().getBoolean(R.bool.has_led_flash)) { - QuickSettingsUtil.TILES.remove(TILE_TORCH); - } - - // Don't show the Expanded desktop tile if expanded desktop is disabled - if (!QSUtils.expandedDesktopEnabled(resolver)) { - QuickSettingsUtil.TILES.remove(TILE_EXPANDEDDESKTOP); - } - - // Don't show the Camera tile if the device has no cameras - if (!QSUtils.deviceSupportsCamera()) { - QuickSettingsUtil.TILES.remove(TILE_CAMERA); - } } public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { diff --git a/src/com/android/settings/cyanogenmod/QuickSettingsTiles.java b/src/com/android/settings/cyanogenmod/QuickSettingsTiles.java index 9342f64..2a5d5cb 100644 --- a/src/com/android/settings/cyanogenmod/QuickSettingsTiles.java +++ b/src/com/android/settings/cyanogenmod/QuickSettingsTiles.java @@ -34,17 +34,21 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; -import android.widget.FrameLayout; import android.widget.ArrayAdapter; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; -import static com.android.internal.util.cm.QSConstants.TILE_USER; +import com.android.internal.util.cm.QSConstants; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.cyanogenmod.QuickSettingsUtil.TileInfo; +import java.text.Collator; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; + public class QuickSettingsTiles extends Fragment { private static final int MENU_RESET = Menu.FIRST; @@ -88,7 +92,7 @@ public class QuickSettingsTiles extends Fragment { if (columnCount != 0) { mDragView.setColumnCount(columnCount); } - mTileAdapter = new TileAdapter(getActivity(), 0); + mTileAdapter = new TileAdapter(getActivity()); return mDragView; } @@ -136,7 +140,7 @@ public class QuickSettingsTiles extends Fragment { name.setText(titleId); name.setCompoundDrawablesRelativeWithIntrinsicBounds(0, iconRegId, 0, 0); } else { - final boolean isUserTile = titleId == QuickSettingsUtil.TILES.get(TILE_USER).getTitleResId(); + final boolean isUserTile = titleId == QuickSettingsUtil.TILES.get(QSConstants.TILE_USER).getTitleResId(); if (mSystemUiResources != null && iconSysId != null) { int resId = mSystemUiResources.getIdentifier(iconSysId, null, null); if (resId > 0) { @@ -253,17 +257,42 @@ public class QuickSettingsTiles extends Fragment { alert.create().show(); } - @SuppressWarnings("rawtypes") - static class TileAdapter extends ArrayAdapter { + private static class TileAdapter extends ArrayAdapter<String> { + private static class Entry { + public final TileInfo tile; + public final String tileTitle; + public Entry(TileInfo tile, String tileTitle) { + this.tile = tile; + this.tileTitle = tileTitle; + } + } - String[] mTileKeys; - Resources mResources; + private Entry[] mTiles; - public TileAdapter(Context context, int textViewResourceId) { + public TileAdapter(Context context) { super(context, android.R.layout.simple_list_item_1); - mTileKeys = new String[getCount()]; - QuickSettingsUtil.TILES.keySet().toArray(mTileKeys); - mResources = context.getResources(); + mTiles = new Entry[getCount()]; + loadItems(context.getResources()); + sortItems(); + } + + private void loadItems(Resources resources) { + int index = 0; + for (TileInfo t : QuickSettingsUtil.TILES.values()) { + mTiles[index++] = new Entry(t, resources.getString(t.getTitleResId())); + } + } + + private void sortItems() { + final Collator collator = Collator.getInstance(); + collator.setDecomposition(Collator.CANONICAL_DECOMPOSITION); + collator.setStrength(Collator.PRIMARY); + Arrays.sort(mTiles, new Comparator<Entry>() { + @Override + public int compare(Entry e1, Entry e2) { + return collator.compare(e1.tileTitle, e2.tileTitle); + } + }); } @Override @@ -272,17 +301,13 @@ public class QuickSettingsTiles extends Fragment { } @Override - public Object getItem(int position) { - int resid = QuickSettingsUtil.TILES.get(mTileKeys[position]) - .getTitleResId(); - return mResources.getString(resid); + public String getItem(int position) { + return mTiles[position].tileTitle; } public String getTileId(int position) { - return QuickSettingsUtil.TILES.get(mTileKeys[position]) - .getId(); + return mTiles[position].tile.getId(); } - } public interface OnRearrangeListener { diff --git a/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java b/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java index d2d3e65..653331a 100644 --- a/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java +++ b/src/com/android/settings/cyanogenmod/QuickSettingsUtil.java @@ -43,101 +43,219 @@ import static com.android.internal.util.cm.QSConstants.TILE_USER; import static com.android.internal.util.cm.QSConstants.TILE_VOLUME; import static com.android.internal.util.cm.QSConstants.TILE_WIFI; import static com.android.internal.util.cm.QSConstants.TILE_WIFIAP; -import static com.android.internal.util.cm.QSUtils.deviceSupportsBluetooth; -import static com.android.internal.util.cm.QSUtils.deviceSupportsMobileData; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedHashMap; +import android.content.ContentResolver; import android.content.Context; import android.provider.Settings; import android.text.TextUtils; +import android.util.Log; +import com.android.internal.telephony.Phone; +import com.android.internal.util.cm.QSUtils; import com.android.settings.R; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + public class QuickSettingsUtil { + private static final String TAG = "QuickSettingsUtil"; + + public static final Map<String, TileInfo> TILES; + + private static final Map<String, TileInfo> ENABLED_TILES = new HashMap<String, TileInfo>(); + private static final Map<String, TileInfo> DISABLED_TILES = new HashMap<String, TileInfo>(); - // Keep sorted according to titleResId's string value - public static final LinkedHashMap<String, TileInfo> TILES = new LinkedHashMap<String, TileInfo>(); static { - TILES.put(TILE_AIRPLANE, new QuickSettingsUtil.TileInfo( + TILES = Collections.unmodifiableMap(ENABLED_TILES); + registerTile(new QuickSettingsUtil.TileInfo( TILE_AIRPLANE, R.string.title_tile_airplane, "com.android.systemui:drawable/ic_qs_airplane_off")); - TILES.put(TILE_BATTERY, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_BATTERY, R.string.title_tile_battery, "com.android.systemui:drawable/ic_qs_battery_neutral")); - TILES.put(TILE_BLUETOOTH, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_BLUETOOTH, R.string.title_tile_bluetooth, "com.android.systemui:drawable/ic_qs_bluetooth_neutral")); - TILES.put(TILE_BRIGHTNESS, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_BRIGHTNESS, R.string.title_tile_brightness, "com.android.systemui:drawable/ic_qs_brightness_auto_off")); - TILES.put(TILE_CAMERA, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_CAMERA, R.string.title_tile_camera, "com.android.systemui:drawable/ic_qs_camera")); - TILES.put(TILE_EXPANDEDDESKTOP, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_EXPANDEDDESKTOP, R.string.title_tile_expanded_desktop, "com.android.systemui:drawable/ic_qs_expanded_desktop_off")); - TILES.put(TILE_SLEEP, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_SLEEP, R.string.title_tile_sleep, "com.android.systemui:drawable/ic_qs_sleep")); - TILES.put(TILE_GPS, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_GPS, R.string.title_tile_gps, "com.android.systemui:drawable/ic_qs_gps_neutral")); - TILES.put(TILE_LOCKSCREEN, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_LOCKSCREEN, R.string.title_tile_lockscreen, "com.android.systemui:drawable/ic_qs_lock_screen_off")); - TILES.put(TILE_LTE, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_LTE, R.string.title_tile_lte, "com.android.systemui:drawable/ic_qs_lte_off")); - TILES.put(TILE_MOBILEDATA, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_MOBILEDATA, R.string.title_tile_mobiledata, "com.android.systemui:drawable/ic_qs_signal_4")); - TILES.put(TILE_NETWORKMODE, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_NETWORKMODE, R.string.title_tile_networkmode, "com.android.systemui:drawable/ic_qs_2g3g_on")); - TILES.put(TILE_NFC, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_NFC, R.string.title_tile_nfc, "com.android.systemui:drawable/ic_qs_nfc_off")); - TILES.put(TILE_AUTOROTATE, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_AUTOROTATE, R.string.title_tile_autorotate, "com.android.systemui:drawable/ic_qs_auto_rotate")); - TILES.put(TILE_PROFILE, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_PROFILE, R.string.title_tile_profile, "com.android.systemui:drawable/ic_qs_profiles")); - TILES.put(TILE_QUIETHOURS, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_QUIETHOURS, R.string.title_tile_quiet_hours, "com.android.systemui:drawable/ic_qs_quiet_hours_off")); - TILES.put(TILE_SCREENTIMEOUT, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_SCREENTIMEOUT, R.string.title_tile_screen_timeout, "com.android.systemui:drawable/ic_qs_screen_timeout_off")); - TILES.put(TILE_SETTINGS, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_SETTINGS, R.string.title_tile_settings, "com.android.systemui:drawable/ic_qs_settings")); - TILES.put(TILE_RINGER, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_RINGER, R.string.title_tile_sound, "com.android.systemui:drawable/ic_qs_ring_on")); - TILES.put(TILE_SYNC, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_SYNC, R.string.title_tile_sync, "com.android.systemui:drawable/ic_qs_sync_off")); - TILES.put(TILE_TORCH, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_TORCH, R.string.title_tile_torch, "com.android.systemui:drawable/ic_qs_torch_off")); - TILES.put(TILE_USER, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_USER, R.string.title_tile_user, "com.android.systemui:drawable/ic_qs_default_user")); - TILES.put(TILE_VOLUME, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_VOLUME, R.string.title_tile_volume, "com.android.systemui:drawable/ic_qs_volume")); - TILES.put(TILE_WIFI, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_WIFI, R.string.title_tile_wifi, "com.android.systemui:drawable/ic_qs_wifi_4")); - TILES.put(TILE_WIFIAP, new QuickSettingsUtil.TileInfo( + registerTile(new QuickSettingsUtil.TileInfo( TILE_WIFIAP, R.string.title_tile_wifiap, "com.android.systemui:drawable/ic_qs_wifi_ap_neutral")); } + private static void registerTile(QuickSettingsUtil.TileInfo info) { + ENABLED_TILES.put(info.getId(), info); + } + + private static void removeTile(String id) { + ENABLED_TILES.remove(id); + DISABLED_TILES.remove(id); + TILES_DEFAULT.remove(id); + } + + private static void disableTile(String id) { + if (ENABLED_TILES.containsKey(id)) { + DISABLED_TILES.put(id, ENABLED_TILES.remove(id)); + } + } + + private static void enableTile(String id) { + if (DISABLED_TILES.containsKey(id)) { + ENABLED_TILES.put(id, DISABLED_TILES.remove(id)); + } + } + + private static boolean sUnsupportedRemoved = false; + + private static synchronized void removeUnsupportedTiles(Context context) { + if (sUnsupportedRemoved) { + return; + } + + // Don't show mobile data options if not supported + if (!QSUtils.deviceSupportsMobileData(context)) { + removeTile(TILE_MOBILEDATA); + removeTile(TILE_WIFIAP); + removeTile(TILE_NETWORKMODE); + } + + // Don't show the bluetooth options if not supported + if (!QSUtils.deviceSupportsBluetooth()) { + removeTile(TILE_BLUETOOTH); + } + + // Don't show the NFC tile if not supported + if (!QSUtils.deviceSupportsNfc(context)) { + removeTile(TILE_NFC); + } + + // Don't show the LTE tile if not supported + if (!QSUtils.deviceSupportsLte(context)) { + removeTile(TILE_LTE); + } + + // Don't show the Torch tile if not supported + if (!context.getResources().getBoolean(R.bool.has_led_flash)) { + removeTile(TILE_TORCH); + } + + sUnsupportedRemoved = true; + } + + private static synchronized void refreshAvailableTiles(Context context) { + ContentResolver resolver = context.getContentResolver(); + + // Some phones run on networks not supported by the networkmode tile, + // so make it available only where supported + int networkState = -99; + try { + networkState = Settings.Global.getInt(resolver, + Settings.Global.PREFERRED_NETWORK_MODE); + } catch (Settings.SettingNotFoundException e) { + Log.e(TAG, "Unable to retrieve PREFERRED_NETWORK_MODE", e); + } + + switch (networkState) { + // list of supported network modes + case Phone.NT_MODE_WCDMA_PREF: + case Phone.NT_MODE_WCDMA_ONLY: + case Phone.NT_MODE_GSM_UMTS: + case Phone.NT_MODE_GSM_ONLY: + enableTile(TILE_NETWORKMODE); + break; + default: + disableTile(TILE_NETWORKMODE); + break; + } + + // Don't show the profiles tile if profiles are disabled + if (QSUtils.systemProfilesEnabled(resolver)) { + enableTile(TILE_PROFILE); + } else { + disableTile(TILE_PROFILE); + } + + // Don't show the Expanded desktop tile if expanded desktop is disabled + if (QSUtils.expandedDesktopEnabled(resolver)) { + enableTile(TILE_EXPANDEDDESKTOP); + } else { + disableTile(TILE_EXPANDEDDESKTOP); + } + } + + public static synchronized void updateAvailableTiles(Context context) { + removeUnsupportedTiles(context); + refreshAvailableTiles(context); + } + + public static boolean isTileAvailable(String id) { + return ENABLED_TILES.containsKey(id); + } + public static String getCurrentTiles(Context context) { String tiles = Settings.System.getString(context.getContentResolver(), Settings.System.QUICK_SETTINGS_TILES); @@ -199,18 +317,7 @@ public class QuickSettingsUtil { } public static String getDefaultTiles(Context context) { - // Filter items not compatible with device - boolean bluetoothSupported = deviceSupportsBluetooth(); - boolean mobileDataSupported = deviceSupportsMobileData(context); - - if (!bluetoothSupported) { - TILES_DEFAULT.remove(TILE_BLUETOOTH); - } - - if (!mobileDataSupported) { - TILES_DEFAULT.remove(TILE_MOBILEDATA); - } - + removeUnsupportedTiles(context); return TextUtils.join(TILE_DELIMITER, TILES_DEFAULT); } |