diff options
author | Vinod Krishnan <vinodkrishnan@google.com> | 2016-03-16 00:29:09 -0700 |
---|---|---|
committer | Vinod Krishnan <vinodkrishnan@google.com> | 2016-03-18 16:18:38 -0700 |
commit | 6317f684a214b23fa3103943daaf7a47aa676914 (patch) | |
tree | cc88ac7f572482aa76d0ded31f0134a737411ded | |
parent | 5a86422a1e8c9fad2007e338dc029943c182fe82 (diff) | |
download | android_packages_apps_PackageInstaller-6317f684a214b23fa3103943daaf7a47aa676914.tar.gz android_packages_apps_PackageInstaller-6317f684a214b23fa3103943daaf7a47aa676914.tar.bz2 android_packages_apps_PackageInstaller-6317f684a214b23fa3103943daaf7a47aa676914.zip |
Wear Cleanup: Removing implicit intent & API change
- Remove a way to implicitly call Wear install service
- Also make the Service take in the package as the data, just like the
activities in PackageInstaller
Change-Id: I0c4c9cebbb7396e025cab81eed835ab1a941ca01
4 files changed, 65 insertions, 33 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7bc39a18..a750491c 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -125,15 +125,7 @@ <!-- Wearable Components --> <service android:name=".wear.WearPackageInstallerService" android:permission="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" - android:exported="true"> - <intent-filter> - <action android:name="com.android.packageinstaller.wear.INSTALL_PACKAGE"/> - <data android:scheme="content" android:mimeType="vnd.android.cursor.item/*"/> - </intent-filter> - <intent-filter> - <action android:name="com.android.packageinstaller.wear.UNINSTALL_PACKAGE"/> - </intent-filter> - </service> + android:exported="true"/> <provider android:name=".wear.WearPackageIconProvider" android:authorities="com.google.android.packageinstaller.wear.provider" diff --git a/src/com/android/packageinstaller/wear/WearPackageArgs.java b/src/com/android/packageinstaller/wear/WearPackageArgs.java index 67051da0..da49192a 100644 --- a/src/com/android/packageinstaller/wear/WearPackageArgs.java +++ b/src/com/android/packageinstaller/wear/WearPackageArgs.java @@ -25,6 +25,8 @@ import android.os.Bundle; * installing/uninstalling. */ public class WearPackageArgs { + private static final String KEY_PACKAGE_NAME = + "com.google.android.clockwork.EXTRA_PACKAGE_NAME"; private static final String KEY_ASSET_URI = "com.google.android.clockwork.EXTRA_ASSET_URI"; private static final String KEY_START_ID = @@ -45,16 +47,16 @@ public class WearPackageArgs { "com.google.android.clockwork.EXTRA_KEY_SHOULD_CHECK_GMS_DEPENDENCY"; public static String getPackageName(Bundle b) { - return b.getString(Intent.EXTRA_INSTALLER_PACKAGE_NAME); + return b.getString(KEY_PACKAGE_NAME); } - public static Uri getAssetUri(Bundle b) { - return b.getParcelable(KEY_ASSET_URI); + public static Bundle setPackageName(Bundle b, String packageName) { + b.putString(KEY_PACKAGE_NAME, packageName); + return b; } - public static Bundle setAssetUri(Bundle b, Uri assetUri) { - b.putParcelable(KEY_ASSET_URI, assetUri); - return b; + public static Uri getAssetUri(Bundle b) { + return b.getParcelable(KEY_ASSET_URI); } public static Uri getPermUri(Bundle b) { diff --git a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java index 3874c0a4..7387ed2a 100644 --- a/src/com/android/packageinstaller/wear/WearPackageInstallerService.java +++ b/src/com/android/packageinstaller/wear/WearPackageInstallerService.java @@ -66,13 +66,18 @@ import java.util.Set; * * Install Action example: * adb shell am startservice -a com.android.packageinstaller.wear.INSTALL_PACKAGE \ - * -t vnd.android.cursor.item/wearable_apk \ - * -d content://com.google.android.clockwork.home.provider/host/com.google.android.wearable.app/wearable/com.google.android.gms/apk \ + * -d package://com.google.android.gms \ + * --eu com.google.android.clockwork.EXTRA_ASSET_URI content://com.google.android.clockwork.home.provider/host/com.google.android.wearable.app/wearable/com.google.android.gms/apk \ * --es android.intent.extra.INSTALLER_PACKAGE_NAME com.google.android.gms \ * --ez com.google.android.clockwork.EXTRA_CHECK_PERMS false \ * --eu com.google.android.clockwork.EXTRA_PERM_URI content://com.google.android.clockwork.home.provider/host/com.google.android.wearable.app/permissions \ * com.android.packageinstaller/com.android.packageinstaller.wear.WearPackageInstallerService * + * Uninstall Action example: + * adb shell am startservice -a com.android.packageinstaller.wear.UNINSTALL_PACKAGE \ + * -d package://com.google.android.gms \ + * com.android.packageinstaller/com.android.packageinstaller.wear.WearPackageInstallerService + * * Retry GMS: * adb shell am startservice -a com.android.packageinstaller.wear.RETRY_GMS \ * com.android.packageinstaller/com.android.packageinstaller.wear.WearPackageInstallerService @@ -141,29 +146,49 @@ public class WearPackageInstallerService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { if (!DeviceUtils.isWear(this)) { - Log.w(TAG, "Not running on wearable"); + Log.w(TAG, "Not running on wearable."); + return START_NOT_STICKY; + } + + if (intent == null) { + Log.w(TAG, "Got null intent."); return START_NOT_STICKY; } + + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Got install/uninstall request " + intent); + } + + Uri packageUri = intent.getData(); + if (packageUri == null) { + Log.e(TAG, "No package URI in intent"); + return START_NOT_STICKY; + } + final String packageName = WearPackageUtil.getSanitizedPackageName(packageUri); + if (packageName == null) { + Log.e(TAG, "Invalid package name in URI (expected package:<pkgName>): " + packageUri); + return START_NOT_STICKY; + } + PowerManager.WakeLock lock = getLock(this.getApplicationContext()); if (!lock.isHeld()) { lock.acquire(); } - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Got install/uninstall request " + intent); + + Bundle intentBundle = intent.getExtras(); + if (intentBundle == null) { + intentBundle = new Bundle(); } - if (intent != null) { - Bundle intentBundle = intent.getExtras(); - WearPackageArgs.setStartId(intentBundle, startId); - if (Intent.ACTION_INSTALL_PACKAGE.equals(intent.getAction())) { - final Message msg = mServiceHandler.obtainMessage(START_INSTALL); - WearPackageArgs.setAssetUri(intentBundle, intent.getData()); - msg.setData(intentBundle); - mServiceHandler.sendMessage(msg); - } else if (Intent.ACTION_UNINSTALL_PACKAGE.equals(intent.getAction())) { - Message msg = mServiceHandler.obtainMessage(START_UNINSTALL); - msg.setData(intentBundle); - mServiceHandler.sendMessage(msg); - } + WearPackageArgs.setStartId(intentBundle, startId); + WearPackageArgs.setPackageName(intentBundle, packageName); + if (Intent.ACTION_INSTALL_PACKAGE.equals(intent.getAction())) { + Message msg = mServiceHandler.obtainMessage(START_INSTALL); + msg.setData(intentBundle); + mServiceHandler.sendMessage(msg); + } else if (Intent.ACTION_UNINSTALL_PACKAGE.equals(intent.getAction())) { + Message msg = mServiceHandler.obtainMessage(START_UNINSTALL); + msg.setData(intentBundle); + mServiceHandler.sendMessage(msg); } return START_NOT_STICKY; } diff --git a/src/com/android/packageinstaller/wear/WearPackageUtil.java b/src/com/android/packageinstaller/wear/WearPackageUtil.java index 688d6167..c351277e 100644 --- a/src/com/android/packageinstaller/wear/WearPackageUtil.java +++ b/src/com/android/packageinstaller/wear/WearPackageUtil.java @@ -21,6 +21,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageParser; +import android.net.Uri; import android.os.ParcelFileDescriptor; import android.system.ErrnoException; import android.system.Os; @@ -164,4 +165,16 @@ public class WearPackageUtil { + " for " + wearablePackageName); context.startService(newIntent); } + + /** + * @return com.google.com from expected formats like + * Uri: package:com.google.com, package:/com.google.com, package://com.google.com + */ + public static String getSanitizedPackageName(Uri packageUri) { + String packageName = packageUri.getEncodedSchemeSpecificPart(); + if (packageName != null) { + return packageName.replaceAll("^/+", ""); + } + return packageName; + } } |