summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui/qs
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2016-05-04 13:51:55 -0700
committerRoman Birg <roman@cyngn.com>2016-05-04 22:29:34 -0700
commit26c932ea37148f4d336e6a69adf057bf8ddcb09e (patch)
tree422ad2d932ed0c457b1bc8a116bcb8c708a39fb3 /packages/SystemUI/src/com/android/systemui/qs
parent8aefa3117ac6f2d50bce540ecc10e1e024e7827e (diff)
downloadframeworks_base-26c932ea37148f4d336e6a69adf057bf8ddcb09e.zip
frameworks_base-26c932ea37148f4d336e6a69adf057bf8ddcb09e.tar.gz
frameworks_base-26c932ea37148f4d336e6a69adf057bf8ddcb09e.tar.bz2
SystemUI: implement properly saving tile locations
Use new persisted key which does not use the tiles' ID (which changes usually across reboots with every tile). When the Custom tile service comes up, it will update the placeholder tiles created with their real values and the order is preserved properly. Ticket: CYNGNOS-2530 Change-Id: I5e75c739553969f1d92c249f521a476259fe0cd6 Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/qs')
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java159
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/CustomQSTile.java30
2 files changed, 119 insertions, 70 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java
index a6a824a..ce2d94c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java
@@ -68,6 +68,7 @@ import org.cyanogenmod.internal.util.QSConstants;
import org.cyanogenmod.internal.util.QSUtils;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
@@ -1901,7 +1902,8 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
final Iterator<String> i = tiles.iterator();
while (i.hasNext()) {
final String spec = i.next();
- if (QSUtils.isStaticQsTile(spec) || QSUtils.isDynamicQsTile(spec)) {
+ if (QSUtils.isStaticQsTile(spec)
+ || QSUtils.isDynamicQsTile(extractTileTagFromSpec(spec))) {
List<String> packageList = mPackageTileMap.get(PACKAGE_ANDROID);
packageList.add(spec);
} else {
@@ -1919,13 +1921,14 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
if (entry.getValue() instanceof Boolean) {
if ((Boolean)entry.getValue()) {
final String key = entry.getKey();
- if (QSUtils.isDynamicQsTile(key)) {
+ if (QSUtils.isDynamicQsTile(extractTileTagFromSpec(key))) {
mPackageTileMap.get(PACKAGE_ANDROID).add(key);
} else {
final String customTilePackage = getCustomTilePackage(key);
List<String> packageList = mPackageTileMap.get(customTilePackage);
if (packageList == null) {
- mPackageTileMap.put(customTilePackage, packageList = new ArrayList<>());
+ mPackageTileMap.put(customTilePackage,
+ packageList = new ArrayList<>());
}
packageList.add(key);
@@ -1939,8 +1942,95 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
}
private String getCustomTilePackage(String spec) {
- StatusBarPanelCustomTile sbc = mHost.getCustomTileData().get(spec).sbc;
- return sbc.getPackage();
+ if (mHost.getCustomTileData().get(spec) != null) {
+ StatusBarPanelCustomTile sbc = mHost.getCustomTileData().get(spec).sbc;
+ return sbc.getPackage();
+ } else {
+ return extractPackageFromCustomTileSpec(spec);
+ }
+ }
+
+ private static String extractPackageFromCustomTileSpec(String spec) {
+ if (spec != null && !spec.isEmpty()) {
+ final String[] split = spec.split("\\|");
+ if (split != null && split.length > 2) {
+ return split[1];
+ }
+ }
+ return null;
+ }
+
+ private static String extractTileTagFromSpec(String spec) {
+ if (spec != null && !spec.isEmpty()) {
+ final String[] split = spec.split("\\|");
+ if (split != null && split.length == 5) {
+ /** for {@link cyanogenmod.app.StatusBarPanelCustomTile#key() **/
+ return split[3];
+ } else if (split != null && split.length == 3) {
+ /** for {@link cyanogenmod.app.StatusBarPanelCustomTile#persistableKey()} **/
+ return split[2];
+ }
+ }
+ return null;
+ }
+
+ private Drawable getQSTileIcon(String spec) {
+ if (QSUtils.isDynamicQsTile(spec)) {
+ return QSTile.ResourceIcon.get(
+ QSUtils.getDynamicQSTileResIconId(mContext, UserHandle.myUserId(), spec))
+ .getDrawable(mContext);
+ } else if (QSUtils.isStaticQsTile(spec)) {
+ final int res = QSTileHost.getIconResource(spec);
+ if (res != 0) {
+ return QSTile.ResourceIcon.get(res).getDrawable(mContext);
+ } else {
+ return mContext.getPackageManager().getDefaultActivityIcon();
+ }
+ } else {
+ QSTile<?> tile = mHost.getTile(spec);
+ if (tile != null) {
+ QSTile.State state = tile.getState();
+ if (state != null && state.icon != null) {
+ return state.icon.getDrawable(mContext);
+ }
+ }
+ return getPackageDrawable(getCustomTilePackage(spec));
+ }
+ }
+
+ private String getPackageLabel(String packageName) {
+ try {
+ return mContext.getPackageManager().getApplicationLabel(
+ mContext.getPackageManager().getApplicationInfo(packageName, 0)).toString();
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ private Drawable getPackageDrawable(String packageName) {
+ try {
+ return mContext.getPackageManager().getApplicationIcon(packageName);
+ } catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ private String getQSTileLabel(String spec) {
+ if (QSUtils.isStaticQsTile(spec)) {
+ int resource = QSTileHost.getLabelResource(spec);
+ if (resource != 0) {
+ return mContext.getText(resource).toString();
+ } else {
+ return spec;
+ }
+ } else if (QSUtils.isDynamicQsTile(extractTileTagFromSpec(spec))) {
+ return QSUtils.getDynamicQSTileLabel(mContext,
+ UserHandle.myUserId(), extractTileTagFromSpec(spec));
+ } else {
+ return getPackageLabel(getCustomTilePackage(spec));
+ }
}
@Override
@@ -2042,65 +2132,6 @@ public class QSDragPanel extends QSPanel implements View.OnDragListener, View.On
return child;
}
- private String getQSTileLabel(String spec) {
- if (QSUtils.isStaticQsTile(spec)) {
- int resource = QSTileHost.getLabelResource(spec);
- if (resource != 0) {
- return mContext.getText(resource).toString();
- } else {
- return spec;
- }
- } else if (QSUtils.isDynamicQsTile(spec)) {
- return QSUtils.getDynamicQSTileLabel(mContext,
- UserHandle.myUserId(), spec);
- } else {
- return getPackageLabel(getCustomTilePackage(spec));
- }
- }
-
- private Drawable getQSTileIcon(String spec) {
- if (QSUtils.isDynamicQsTile(spec)) {
- return QSTile.ResourceIcon.get(
- QSUtils.getDynamicQSTileResIconId(mContext, UserHandle.myUserId(), spec))
- .getDrawable(mContext);
- } else if (QSUtils.isStaticQsTile(spec)) {
- final int res = QSTileHost.getIconResource(spec);
- if (res != 0) {
- return QSTile.ResourceIcon.get(res).getDrawable(mContext);
- } else {
- return mContext.getPackageManager().getDefaultActivityIcon();
- }
- } else {
- QSTile<?> tile = mHost.getTile(spec);
- if (tile != null) {
- QSTile.State state = tile.getState();
- if (state != null && state.icon != null) {
- return state.icon.getDrawable(mContext);
- }
- }
- return getPackageDrawable(getCustomTilePackage(spec));
- }
- }
-
- private String getPackageLabel(String packageName) {
- try {
- return mContext.getPackageManager().getApplicationLabel(
- mContext.getPackageManager().getApplicationInfo(packageName, 0)).toString();
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- private Drawable getPackageDrawable(String packageName) {
- try {
- return mContext.getPackageManager().getApplicationIcon(packageName);
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- }
- return null;
- }
-
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomQSTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomQSTile.java
index ca9bed4..40c7184 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomQSTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomQSTile.java
@@ -32,15 +32,12 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
-import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RemoteViews;
import android.widget.TextView;
-import com.android.internal.logging.MetricsLogger;
-
import com.android.systemui.qs.QSDetailItemsGrid;
import com.android.systemui.qs.QSDetailItemsList;
import cyanogenmod.app.CustomTile;
@@ -65,6 +62,13 @@ public class CustomQSTile extends QSTile<QSTile.State> {
private CustomQSDetailAdapter mDetailAdapter;
private boolean mCollapsePanel;
private boolean mUserRemoved;
+ private String mPersistedPlaceHolderKey;
+
+ public CustomQSTile(Host host, String persistedSpec) {
+ super(host);
+ mTile = null;
+ mPersistedPlaceHolderKey = persistedSpec;
+ }
public CustomQSTile(Host host, StatusBarPanelCustomTile tile) {
super(host);
@@ -72,8 +76,16 @@ public class CustomQSTile extends QSTile<QSTile.State> {
mUserRemoved = getIsUserRemovedPersisted();
}
+ private String getPersistableKey() {
+ if (mPersistedPlaceHolderKey != null) {
+ return mPersistedPlaceHolderKey;
+ } else {
+ return getTile().persistableKey();
+ }
+ }
+
private boolean getIsUserRemovedPersisted() {
- return getCustomQSTilePrefs(mContext).getBoolean(getTile().getKey(), false);
+ return getCustomQSTilePrefs(mContext).getBoolean(getPersistableKey(), false);
}
public boolean isUserRemoved() {
@@ -83,9 +95,9 @@ public class CustomQSTile extends QSTile<QSTile.State> {
public void setUserRemoved(boolean removed) {
if (mUserRemoved != removed) {
if (removed) {
- getCustomQSTilePrefs(mContext).edit().putBoolean(getTile().getKey(), true).apply();
+ getCustomQSTilePrefs(mContext).edit().putBoolean(getPersistableKey(), true).apply();
} else {
- getCustomQSTilePrefs(mContext).edit().remove(getTile().getKey()).apply();
+ getCustomQSTilePrefs(mContext).edit().remove(getPersistableKey()).apply();
}
mUserRemoved = removed;
refreshState();
@@ -167,8 +179,14 @@ public class CustomQSTile extends QSTile<QSTile.State> {
protected void handleUpdateState(State state, Object arg) {
if (arg instanceof StatusBarPanelCustomTile) {
mTile = (StatusBarPanelCustomTile) arg;
+ mPersistedPlaceHolderKey = null;
mUserRemoved = getIsUserRemovedPersisted();
}
+ if (mTile == null) {
+ state.visible = false;
+ // nothing to show, it's a place holder for now
+ return;
+ }
final CustomTile customTile = mTile.getCustomTile();
state.contentDescription = customTile.contentDescription;
state.label = customTile.label;