diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java | 10 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java | 27 |
2 files changed, 23 insertions, 14 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java index d04a2fc7e148..9bc85c8a8395 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java @@ -144,14 +144,18 @@ public class TileQueryHelper { String packageName = info.serviceInfo.packageName; ComponentName componentName = new ComponentName(packageName, info.serviceInfo.name); String spec = CustomTile.toSpec(componentName); + if (info.serviceInfo.icon == 0) { + continue; + } Drawable icon = info.serviceInfo.loadIcon(pm); if (!permission.BIND_QUICK_SETTINGS_TILE.equals(info.serviceInfo.permission)) { continue; } - if (icon != null) { - icon.mutate(); - icon.setTint(mContext.getColor(android.R.color.white)); + if (icon == null) { + continue; } + icon.mutate(); + icon.setTint(mContext.getColor(android.R.color.white)); CharSequence label = info.serviceInfo.loadLabel(pm); final CharSequence appLabel = info.serviceInfo.applicationInfo.loadLabel(pm); addTile(spec, icon, label != null ? label.toString() : "null", appLabel, mContext); diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java index 6b20681a7c66..54dd0157e899 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java @@ -36,7 +36,6 @@ import android.util.Log; import android.view.IWindowManager; import android.view.WindowManager; import android.view.WindowManagerGlobal; - import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.systemui.R; @@ -59,6 +58,7 @@ public class CustomTile extends QSTile<QSTile.State> { private final IQSTileService mService; private final TileServiceManager mServiceManager; private final int mUser; + private final android.graphics.drawable.Icon mDefaultIcon; private boolean mListening; private boolean mBound; @@ -73,15 +73,19 @@ public class CustomTile extends QSTile<QSTile.State> { mService = mServiceManager.getTileService(); mTile = new Tile(mComponent); mUser = ActivityManager.getCurrentUser(); + android.graphics.drawable.Icon defaultIcon; try { PackageManager pm = mContext.getPackageManager(); ServiceInfo info = pm.getServiceInfo(mComponent, PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE); - mTile.setIcon(android.graphics.drawable.Icon - .createWithResource(mComponent.getPackageName(), info.icon)); + defaultIcon = info.icon != 0 ? android.graphics.drawable.Icon + .createWithResource(mComponent.getPackageName(), info.icon) : null; + mTile.setIcon(defaultIcon); mTile.setLabel(info.loadLabel(pm)); } catch (Exception e) { + defaultIcon = null; } + mDefaultIcon = defaultIcon; try { mService.setQSTile(mTile); } catch (RemoteException e) { @@ -91,13 +95,7 @@ public class CustomTile extends QSTile<QSTile.State> { @Override public boolean isAvailable() { - try { - ServiceInfo info = mContext.getPackageManager().getServiceInfo(mComponent, - PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE); - return true; - } catch (Exception e) { - return false; - } + return mDefaultIcon != null; } public int getUser() { @@ -227,11 +225,18 @@ public class CustomTile extends QSTile<QSTile.State> { @Override protected void handleUpdateState(State state, Object arg) { - Drawable drawable = mTile.getIcon().loadDrawable(mContext); int tileState = mTile.getState(); if (mServiceManager.hasPendingBind()) { tileState = Tile.STATE_UNAVAILABLE; } + Drawable drawable; + try { + drawable = mTile.getIcon().loadDrawable(mContext); + } catch (Exception e) { + Log.w(TAG, "Invalid icon, forcing into unavailable state"); + tileState = Tile.STATE_UNAVAILABLE; + drawable = mDefaultIcon.loadDrawable(mContext); + } int color = mContext.getColor(getColor(tileState)); drawable.setTint(color); state.icon = new DrawableIcon(drawable); |