summaryrefslogtreecommitdiffstats
path: root/packages/SystemUI/src/com/android/systemui/qs
diff options
context:
space:
mode:
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;