diff --git a/api/current.txt b/api/current.txt index 55e81a3a796c1..3240467c1978b 100644 --- a/api/current.txt +++ b/api/current.txt @@ -34579,6 +34579,7 @@ package android.service.quicksettings { method public final void startActivityAndCollapse(android.content.Intent); method public final void unlockAndRun(java.lang.Runnable); field public static final java.lang.String ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE"; + field public static final java.lang.String ACTION_QS_TILE_PREFERENCES = "android.service.quicksettings.action.QS_TILE_PREFERENCES"; field public static final int TILE_MODE_ACTIVE = 2; // 0x2 field public static final int TILE_MODE_PASSIVE = 1; // 0x1 } diff --git a/api/system-current.txt b/api/system-current.txt index e9d47be6545fc..7dde3902ac32c 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -37134,6 +37134,7 @@ package android.service.quicksettings { method public final void startActivityAndCollapse(android.content.Intent); method public final void unlockAndRun(java.lang.Runnable); field public static final java.lang.String ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE"; + field public static final java.lang.String ACTION_QS_TILE_PREFERENCES = "android.service.quicksettings.action.QS_TILE_PREFERENCES"; field public static final int TILE_MODE_ACTIVE = 2; // 0x2 field public static final int TILE_MODE_PASSIVE = 1; // 0x1 } diff --git a/api/test-current.txt b/api/test-current.txt index 31fc5f78a0dd4..287f785e63e57 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -34594,6 +34594,7 @@ package android.service.quicksettings { method public final void startActivityAndCollapse(android.content.Intent); method public final void unlockAndRun(java.lang.Runnable); field public static final java.lang.String ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE"; + field public static final java.lang.String ACTION_QS_TILE_PREFERENCES = "android.service.quicksettings.action.QS_TILE_PREFERENCES"; field public static final int TILE_MODE_ACTIVE = 2; // 0x2 field public static final int TILE_MODE_PASSIVE = 1; // 0x1 } diff --git a/core/java/android/service/quicksettings/TileService.java b/core/java/android/service/quicksettings/TileService.java index 0cf1175f8bc50..553d539eafeea 100644 --- a/core/java/android/service/quicksettings/TileService.java +++ b/core/java/android/service/quicksettings/TileService.java @@ -16,6 +16,8 @@ package android.service.quicksettings; import android.Manifest; +import android.annotation.SdkConstant; +import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.app.Dialog; import android.app.Service; @@ -73,6 +75,14 @@ import android.view.WindowManager; */ public class TileService extends Service { + /** + * An activity that provides a user interface for adjusting TileService preferences. + * Optional but recommended for apps that implement a TileService. + */ + @SdkConstant(SdkConstantType.INTENT_CATEGORY) + public static final String ACTION_QS_TILE_PREFERENCES + = "android.service.quicksettings.action.QS_TILE_PREFERENCES"; + /** * Action that identifies a Service as being a TileService. */ 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 bcd63f1b96494..0709992c07ac9 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/CustomTile.java @@ -15,9 +15,11 @@ */ package com.android.systemui.qs.external; +import android.app.ActivityManager; import android.content.ComponentName; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.graphics.drawable.Drawable; import android.net.Uri; @@ -160,10 +162,23 @@ public class CustomTile extends QSTile { @Override public Intent getLongClickIntent() { + Intent i = new Intent(TileService.ACTION_QS_TILE_PREFERENCES); + i.setPackage(mComponent.getPackageName()); + i = resolveIntent(i); + if (i != null) { + return i; + } return new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).setData( Uri.fromParts("package", mComponent.getPackageName(), null)); } + private Intent resolveIntent(Intent i) { + ResolveInfo result = mContext.getPackageManager().resolveActivityAsUser(i, 0, + ActivityManager.getCurrentUser()); + return result != null ? new Intent(TileService.ACTION_QS_TILE_PREFERENCES) + .setClassName(result.activityInfo.packageName, result.activityInfo.name) : null; + } + @Override protected void handleClick() { if (mTile.getState() == Tile.STATE_UNAVAILABLE) {