diff options
| author | xavihernandez <emourougandy@gmail.com> | 2013-03-22 23:50:26 +0100 |
|---|---|---|
| committer | Danny Baumann <dannybaumann@web.de> | 2013-04-04 10:52:10 +0200 |
| commit | d2393efea8e6b26c211c62a20950f3befabfcecd (patch) | |
| tree | 0df2672ba22aa26ebf9fe609c8550d2f5c571099 | |
| parent | b88dd214cfe77c343d281e84954ddbc6f5640c79 (diff) | |
| download | frameworks_base-d2393efea8e6b26c211c62a20950f3befabfcecd.zip frameworks_base-d2393efea8e6b26c211c62a20950f3befabfcecd.tar.gz frameworks_base-d2393efea8e6b26c211c62a20950f3befabfcecd.tar.bz2 | |
SystemUI: Add Expanded desktop tile to QuickSettings (2/2)
* Patch Set 1: initial commit
* Patch Set 2: change tile title
* Patch Set 3: change tile title again
* Patch Set 4: updated to suggested drawable by blunden
* Patch Set 5: update drawables to fit to the bahavior of
the other icons used in QS
* Patch Set 6: rebase
only display tile if feature is enabled
* Patch Set 7: launch the proper long press activity
* Patch Set 8: correctly hide tiles if ED or profiles are turned off
style fixes
Change-Id: I2273f8f0bdb726ec34f00a6fb205b1bc6e795cfa
| -rw-r--r-- | core/java/com/android/internal/util/cm/QSConstants.java | 1 | ||||
| -rw-r--r-- | core/java/com/android/internal/util/cm/QSUtils.java | 6 | ||||
| -rw-r--r-- | packages/SystemUI/res/drawable-hdpi/ic_qs_expanded_desktop_off.png | bin | 0 -> 3460 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-hdpi/ic_qs_expanded_desktop_on.png | bin | 0 -> 3872 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-mdpi/ic_qs_expanded_desktop_off.png | bin | 0 -> 3255 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-mdpi/ic_qs_expanded_desktop_on.png | bin | 0 -> 3522 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-xhdpi/ic_qs_expanded_desktop_off.png | bin | 0 -> 3645 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/drawable-xhdpi/ic_qs_expanded_desktop_on.png | bin | 0 -> 3692 bytes | |||
| -rw-r--r-- | packages/SystemUI/res/values/strings.xml | 4 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/quicksettings/ExpandedDesktopTile.java | 75 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java | 55 |
11 files changed, 133 insertions, 8 deletions
diff --git a/core/java/com/android/internal/util/cm/QSConstants.java b/core/java/com/android/internal/util/cm/QSConstants.java index ce66307..0e49e39 100644 --- a/core/java/com/android/internal/util/cm/QSConstants.java +++ b/core/java/com/android/internal/util/cm/QSConstants.java @@ -28,6 +28,7 @@ public class QSConstants { public static final String TILE_USBTETHER = "toggleUsbTether"; public static final String TILE_QUIETHOURS = "toggleQuietHours"; public static final String TILE_VOLUME = "toggleVolume"; + public static final String TILE_EXPANDEDDESKTOP = "toggleExpandedDesktop"; public static final String TILE_DELIMITER = "|"; public static ArrayList<String> TILES_DEFAULT = new ArrayList<String>(); diff --git a/core/java/com/android/internal/util/cm/QSUtils.java b/core/java/com/android/internal/util/cm/QSUtils.java index ab819b0..72a285b 100644 --- a/core/java/com/android/internal/util/cm/QSUtils.java +++ b/core/java/com/android/internal/util/cm/QSUtils.java @@ -9,6 +9,7 @@ import android.hardware.display.DisplayManager; import android.hardware.display.WifiDisplayStatus; import android.net.ConnectivityManager; import android.nfc.NfcAdapter; +import android.os.UserHandle; import android.provider.Settings; import android.telephony.TelephonyManager; @@ -43,6 +44,11 @@ public class QSUtils { return (Settings.System.getInt(resolver, Settings.System.SYSTEM_PROFILES_ENABLED, 1) == 1); } + public static boolean expandedDesktopEnabled(ContentResolver resolver) { + return (Settings.System.getIntForUser(resolver, Settings.System.EXPANDED_DESKTOP_STYLE, 0, + UserHandle.USER_CURRENT_OR_SELF) != 0); + } + public static boolean deviceSupportsNfc(Context ctx) { return NfcAdapter.getDefaultAdapter(ctx) != null; } diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_expanded_desktop_off.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_expanded_desktop_off.png Binary files differnew file mode 100644 index 0000000..20a3877 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_expanded_desktop_off.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_expanded_desktop_on.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_expanded_desktop_on.png Binary files differnew file mode 100644 index 0000000..17c85e9 --- /dev/null +++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_expanded_desktop_on.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_expanded_desktop_off.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_expanded_desktop_off.png Binary files differnew file mode 100644 index 0000000..13e08ca --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_expanded_desktop_off.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_expanded_desktop_on.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_expanded_desktop_on.png Binary files differnew file mode 100644 index 0000000..ab23151 --- /dev/null +++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_expanded_desktop_on.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_expanded_desktop_off.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_expanded_desktop_off.png Binary files differnew file mode 100644 index 0000000..0a4b4cd --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_expanded_desktop_off.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_expanded_desktop_on.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_expanded_desktop_on.png Binary files differnew file mode 100644 index 0000000..47d8cfe --- /dev/null +++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_expanded_desktop_on.png diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 547a6b9..b1d8033 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -560,6 +560,10 @@ <string name="quick_settings_lte_off">LTE off</string> <string name="quick_settings_volume">Volume</string> + <!-- Expanded desktop strings break the rules a bit - the icon identifies the feature, the string indicates current state --> + <string name="quick_settings_expanded_desktop">Expanded</string> + <string name="quick_settings_expanded_desktop_off">Normal</string> + <!-- Text to display next to the minimal graphical battery meter. [CHAR LIMIT=3] --> <string name="status_bar_settings_battery_meter_min_format" translatable="false"> <xliff:g id="number">%d</xliff:g> diff --git a/packages/SystemUI/src/com/android/systemui/quicksettings/ExpandedDesktopTile.java b/packages/SystemUI/src/com/android/systemui/quicksettings/ExpandedDesktopTile.java new file mode 100644 index 0000000..6c0ed52 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/quicksettings/ExpandedDesktopTile.java @@ -0,0 +1,75 @@ +package com.android.systemui.quicksettings; + +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Handler; +import android.provider.Settings; +import android.view.LayoutInflater; +import android.view.View; + +import com.android.systemui.R; +import com.android.systemui.statusbar.phone.QuickSettingsContainerView; +import com.android.systemui.statusbar.phone.QuickSettingsController; + +public class ExpandedDesktopTile extends QuickSettingsTile { + private boolean mEnabled = false; + + public ExpandedDesktopTile(Context context, LayoutInflater inflater, + QuickSettingsContainerView container, + QuickSettingsController qsc, Handler handler) { + super(context, inflater, container, qsc); + + mOnClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + // Change the system setting + Settings.System.putInt(mContext.getContentResolver(), + Settings.System.EXPANDED_DESKTOP_STATE, mEnabled ? 0 : 1); + } + }; + + mOnLongClick = new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.setClassName("com.android.settings", + "com.android.settings.Settings$SystemSettingsActivity"); + startSettingsActivity(intent); + return true; + } + }; + + Uri stateUri = Settings.System.getUriFor(Settings.System.EXPANDED_DESKTOP_STATE); + qsc.registerObservedContent(stateUri, this); + } + + void onPostCreate() { + updateTile(); + super.onPostCreate(); + } + + @Override + public void updateResources() { + updateTile(); + super.updateResources(); + } + + private synchronized void updateTile() { + mEnabled = Settings.System.getInt(mContext.getContentResolver(), + Settings.System.EXPANDED_DESKTOP_STATE, 0) == 1; + if (mEnabled) { + mDrawable = R.drawable.ic_qs_expanded_desktop_on; + mLabel = mContext.getString(R.string.quick_settings_expanded_desktop); + } else { + mDrawable = R.drawable.ic_qs_expanded_desktop_off; + mLabel = mContext.getString(R.string.quick_settings_expanded_desktop_off); + } + } + + @Override + public void onChangeUri(ContentResolver resolver, Uri uri) { + updateResources(); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java index 16d087f..e958001 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java @@ -23,6 +23,7 @@ import static com.android.internal.util.cm.QSConstants.TILE_BATTERY; import static com.android.internal.util.cm.QSConstants.TILE_BLUETOOTH; import static com.android.internal.util.cm.QSConstants.TILE_BRIGHTNESS; import static com.android.internal.util.cm.QSConstants.TILE_DELIMITER; +import static com.android.internal.util.cm.QSConstants.TILE_EXPANDEDDESKTOP; import static com.android.internal.util.cm.QSConstants.TILE_GPS; import static com.android.internal.util.cm.QSConstants.TILE_LOCKSCREEN; import static com.android.internal.util.cm.QSConstants.TILE_LTE; @@ -45,10 +46,11 @@ import static com.android.internal.util.cm.QSConstants.TILE_WIMAX; import static com.android.internal.util.cm.QSUtils.deviceSupportsBluetooth; import static com.android.internal.util.cm.QSUtils.deviceSupportsDockBattery; import static com.android.internal.util.cm.QSUtils.deviceSupportsImeSwitcher; +import static com.android.internal.util.cm.QSUtils.deviceSupportsLte; import static com.android.internal.util.cm.QSUtils.deviceSupportsTelephony; import static com.android.internal.util.cm.QSUtils.deviceSupportsUsbTether; +import static com.android.internal.util.cm.QSUtils.expandedDesktopEnabled; import static com.android.internal.util.cm.QSUtils.systemProfilesEnabled; -import static com.android.internal.util.cm.QSUtils.deviceSupportsLte; import android.content.BroadcastReceiver; import android.content.ContentResolver; @@ -58,6 +60,7 @@ import android.content.IntentFilter; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; +import android.os.Message; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; @@ -71,6 +74,7 @@ import com.android.systemui.quicksettings.BluetoothTile; import com.android.systemui.quicksettings.BrightnessTile; import com.android.systemui.quicksettings.BugReportTile; import com.android.systemui.quicksettings.DockBatteryTile; +import com.android.systemui.quicksettings.ExpandedDesktopTile; import com.android.systemui.quicksettings.GPSTile; import com.android.systemui.quicksettings.InputMethodTile; import com.android.systemui.quicksettings.LteTile; @@ -96,6 +100,7 @@ import com.android.systemui.quicksettings.WifiAPTile; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; public class QuickSettingsController { private static String TAG = "QuickSettingsController"; @@ -107,6 +112,9 @@ public class QuickSettingsController { public HashMap<Uri, ArrayList<QuickSettingsTile>> mObserverMap = new HashMap<Uri, ArrayList<QuickSettingsTile>>(); + // Uris that need to be monitored for updating tile status + private HashSet<Uri> mTileStatusUris = new HashSet<Uri>(); + private final Context mContext; private ArrayList<QuickSettingsTile> mQuickSettingsTiles; public PanelBar mBar; @@ -118,10 +126,23 @@ public class QuickSettingsController { private InputMethodTile mIMETile; + private static final int MSG_UPDATE_TILES = 1000; + public QuickSettingsController(Context context, QuickSettingsContainerView container, PhoneStatusBar statusBarService) { mContext = context; mContainerView = container; - mHandler = new Handler(); + mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + + switch (msg.what) { + case MSG_UPDATE_TILES: + setupQuickSettings(); + break; + } + } + }; mStatusBarService = statusBarService; mQuickSettingsTiles = new ArrayList<QuickSettingsTile>(); } @@ -175,7 +196,7 @@ public class QuickSettingsController { } else if (tile.equals(TILE_GPS)) { qs = new GPSTile(mContext, inflater, mContainerView, this); } else if (tile.equals(TILE_BLUETOOTH) && bluetoothSupported) { - qs = new BluetoothTile(mContext, inflater, mContainerView, this); + qs = new BluetoothTile(mContext, inflater, mContainerView, this); } else if (tile.equals(TILE_BRIGHTNESS)) { qs = new BrightnessTile(mContext, inflater, mContainerView, this, mHandler); } else if (tile.equals(TILE_RINGER)) { @@ -200,8 +221,11 @@ public class QuickSettingsController { qs = new TorchTile(mContext, inflater, mContainerView, this, mHandler); } else if (tile.equals(TILE_SLEEP)) { qs = new SleepScreenTile(mContext, inflater, mContainerView, this); - } else if (tile.equals(TILE_PROFILE) && systemProfilesEnabled(resolver)) { - qs = new ProfileTile(mContext, inflater, mContainerView, this); + } else if (tile.equals(TILE_PROFILE)) { + mTileStatusUris.add(Settings.System.getUriFor(Settings.System.SYSTEM_PROFILES_ENABLED)); + if (systemProfilesEnabled(resolver)) { + qs = new ProfileTile(mContext, inflater, mContainerView, this); + } } else if (tile.equals(TILE_NFC)) { // User cannot add the NFC tile if the device does not support it // No need to check again here @@ -214,7 +238,13 @@ public class QuickSettingsController { qs = new QuietHoursTile(mContext, inflater, mContainerView, this); } else if (tile.equals(TILE_VOLUME)) { qs = new VolumeTile(mContext, inflater, mContainerView, this, mHandler); + } else if (tile.equals(TILE_EXPANDEDDESKTOP)) { + mTileStatusUris.add(Settings.System.getUriFor(Settings.System.EXPANDED_DESKTOP_STYLE)); + if (expandedDesktopEnabled(resolver)) { + qs = new ExpandedDesktopTile(mContext, inflater, mContainerView, this, mHandler); + } } + if (qs != null) { qs.setupQuickSettingsTile(); mQuickSettingsTiles.add(qs); @@ -284,6 +314,7 @@ public class QuickSettingsController { } mObserver = new QuickSettingsObserver(mHandler); mObserverMap.clear(); + mTileStatusUris.clear(); loadTiles(); setupBroadcastReceiver(); setupContentObserver(); @@ -294,6 +325,9 @@ public class QuickSettingsController { for (Uri uri : mObserverMap.keySet()) { resolver.registerContentObserver(uri, false, mObserver); } + for (Uri uri : mTileStatusUris) { + resolver.registerContentObserver(uri, false, mObserver); + } } private class QuickSettingsObserver extends ContentObserver { @@ -303,9 +337,14 @@ public class QuickSettingsController { @Override public void onChange(boolean selfChange, Uri uri) { - ContentResolver resolver = mContext.getContentResolver(); - for (QuickSettingsTile tile : mObserverMap.get(uri)) { - tile.onChangeUri(resolver, uri); + if (mTileStatusUris.contains(uri)) { + mHandler.removeMessages(MSG_UPDATE_TILES); + mHandler.sendEmptyMessage(MSG_UPDATE_TILES); + } else { + ContentResolver resolver = mContext.getContentResolver(); + for (QuickSettingsTile tile : mObserverMap.get(uri)) { + tile.onChangeUri(resolver, uri); + } } } } |
