summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/cyanogenmod/QuickSettings.java90
-rw-r--r--src/com/android/settings/cyanogenmod/QuickSettingsTiles.java63
-rw-r--r--src/com/android/settings/cyanogenmod/QuickSettingsUtil.java197
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);
}