diff options
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/qs')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/QSDragPanel.java | 159 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/tiles/CustomQSTile.java | 30 |
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; |