diff options
| author | 2019-03-21 17:16:06 +0800 | |
|---|---|---|
| committer | 2019-03-21 17:26:20 +0800 | |
| commit | c51cf0f76a2bd7ce96c3f12000ef3dbe6008396e (patch) | |
| tree | 4f361758f0b77ae901dc41e93005f9f98805697a | |
| parent | a5bd084a44ab3b607a690fd219a3a9111b158eac (diff) | |
Send URL using Uri instead of String
Per API review, send the system image file path to the installation
service using Uri.
Bug: 126613281
Test: adb shell am start-activity -d URL
Change-Id: Ib46d3604c16a981b4ae1a571afa96ffdda7a7262
5 files changed, 22 insertions, 19 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index df1eab307308..5a61e8f16a1e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5642,8 +5642,8 @@ package android.os.image { method @RequiresPermission("android.permission.MANAGE_DYNAMIC_SYSTEM") public void bind(); method public void setOnStatusChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.image.DynamicSystemClient.OnStatusChangedListener); method public void setOnStatusChangedListener(@NonNull android.os.image.DynamicSystemClient.OnStatusChangedListener); - method @RequiresPermission("android.permission.MANAGE_DYNAMIC_SYSTEM") public void start(@NonNull String, long); - method @RequiresPermission("android.permission.MANAGE_DYNAMIC_SYSTEM") public void start(@NonNull String, long, long); + method @RequiresPermission("android.permission.MANAGE_DYNAMIC_SYSTEM") public void start(@NonNull android.net.Uri, long); + method @RequiresPermission("android.permission.MANAGE_DYNAMIC_SYSTEM") public void start(@NonNull android.net.Uri, long, long); method @RequiresPermission("android.permission.MANAGE_DYNAMIC_SYSTEM") public void unbind(); field public static final int CAUSE_ERROR_EXCEPTION = 6; // 0x6 field public static final int CAUSE_ERROR_INVALID_URL = 4; // 0x4 diff --git a/core/java/android/os/image/DynamicSystemClient.java b/core/java/android/os/image/DynamicSystemClient.java index 87367ac7597c..4eca8fe96353 100644 --- a/core/java/android/os/image/DynamicSystemClient.java +++ b/core/java/android/os/image/DynamicSystemClient.java @@ -26,6 +26,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -207,12 +208,6 @@ public class DynamicSystemClient { * Intent Keys */ /** - * Intent key: URL to system image. - * @hide - */ - public static final String KEY_SYSTEM_URL = "KEY_SYSTEM_URL"; - - /** * Intent key: Size of system image, in bytes. * @hide */ @@ -366,7 +361,7 @@ public class DynamicSystemClient { * @param systemSize size of system image. */ @RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM) - public void start(@NonNull String systemUrl, @BytesLong long systemSize) { + public void start(@NonNull Uri systemUrl, @BytesLong long systemSize) { start(systemUrl, systemSize, DEFAULT_USERDATA_SIZE); } @@ -383,16 +378,16 @@ public class DynamicSystemClient { * @param userdataSize bytes reserved for userdata. */ @RequiresPermission(android.Manifest.permission.MANAGE_DYNAMIC_SYSTEM) - public void start(@NonNull String systemUrl, @BytesLong long systemSize, + public void start(@NonNull Uri systemUrl, @BytesLong long systemSize, @BytesLong long userdataSize) { Intent intent = new Intent(); intent.setClassName("com.android.dynsystem", "com.android.dynsystem.VerificationActivity"); + intent.setData(systemUrl); intent.setAction(ACTION_START_INSTALL); - intent.putExtra(KEY_SYSTEM_URL, systemUrl); intent.putExtra(KEY_SYSTEM_SIZE, systemSize); intent.putExtra(KEY_USERDATA_SIZE, userdataSize); diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/DynamicSystemInstallationService.java b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/DynamicSystemInstallationService.java index e479e387b95a..2ad72eb725a9 100644 --- a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/DynamicSystemInstallationService.java +++ b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/DynamicSystemInstallationService.java @@ -221,12 +221,12 @@ public class DynamicSystemInstallationService extends Service return; } - String url = intent.getStringExtra(DynamicSystemClient.KEY_SYSTEM_URL); + String url = intent.getDataString(); mSystemSize = intent.getLongExtra(DynamicSystemClient.KEY_SYSTEM_SIZE, 0); mUserdataSize = intent.getLongExtra(DynamicSystemClient.KEY_USERDATA_SIZE, 0); mInstallTask = new InstallationAsyncTask( - url, mSystemSize, mUserdataSize, mDynSystem, this); + url, mSystemSize, mUserdataSize, this, mDynSystem, this); mInstallTask.execute(); @@ -410,7 +410,7 @@ public class DynamicSystemInstallationService extends Service } private boolean verifyRequest(Intent intent) { - String url = intent.getStringExtra(DynamicSystemClient.KEY_SYSTEM_URL); + String url = intent.getDataString(); return VerificationActivity.isVerified(url); } diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/InstallationAsyncTask.java b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/InstallationAsyncTask.java index aee5de5efd5e..b0e28a029436 100644 --- a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/InstallationAsyncTask.java +++ b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/InstallationAsyncTask.java @@ -16,7 +16,9 @@ package com.android.dynsystem; +import android.content.Context; import android.gsi.GsiProgress; +import android.net.Uri; import android.os.AsyncTask; import android.os.image.DynamicSystemManager; import android.util.Log; @@ -59,6 +61,7 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Throwable> { private final String mUrl; private final long mSystemSize; private final long mUserdataSize; + private final Context mContext; private final DynamicSystemManager mDynSystem; private final InstallStatusListener mListener; private DynamicSystemManager.Session mInstallationSession; @@ -68,11 +71,12 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Throwable> { private InputStream mStream; - InstallationAsyncTask(String url, long systemSize, long userdataSize, + InstallationAsyncTask(String url, long systemSize, long userdataSize, Context context, DynamicSystemManager dynSystem, InstallStatusListener listener) { mUrl = url; mSystemSize = systemSize; mUserdataSize = userdataSize; + mContext = context; mDynSystem = dynSystem; mListener = listener; } @@ -197,6 +201,10 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Throwable> { private void initInputStream() throws IOException, InvalidImageUrlException { if (URLUtil.isNetworkUrl(mUrl) || URLUtil.isFileUrl(mUrl)) { mStream = new BufferedInputStream(new GZIPInputStream(new URL(mUrl).openStream())); + } else if (URLUtil.isContentUrl(mUrl)) { + Uri uri = Uri.parse(mUrl); + mStream = new BufferedInputStream(new GZIPInputStream( + mContext.getContentResolver().openInputStream(uri))); } else { throw new InvalidImageUrlException( String.format(Locale.US, "Unsupported file source: %s", mUrl)); diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java index f05930f8ec07..269645d8016b 100644 --- a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java +++ b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java @@ -17,13 +17,13 @@ package com.android.dynsystem; import static android.os.image.DynamicSystemClient.KEY_SYSTEM_SIZE; -import static android.os.image.DynamicSystemClient.KEY_SYSTEM_URL; import static android.os.image.DynamicSystemClient.KEY_USERDATA_SIZE; import android.app.Activity; import android.app.KeyguardManager; import android.content.Context; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.os.UserHandle; import android.os.image.DynamicSystemClient; @@ -81,16 +81,16 @@ public class VerificationActivity extends Activity { // retrieve data from calling intent Intent callingIntent = getIntent(); - String url = callingIntent.getStringExtra(KEY_SYSTEM_URL); + Uri url = callingIntent.getData(); long systemSize = callingIntent.getLongExtra(KEY_SYSTEM_SIZE, 0); long userdataSize = callingIntent.getLongExtra(KEY_USERDATA_SIZE, 0); - sVerifiedUrl = url; + sVerifiedUrl = url.toString(); // start service Intent intent = new Intent(this, DynamicSystemInstallationService.class); + intent.setData(url); intent.setAction(DynamicSystemClient.ACTION_START_INSTALL); - intent.putExtra(KEY_SYSTEM_URL, url); intent.putExtra(KEY_SYSTEM_SIZE, systemSize); intent.putExtra(KEY_USERDATA_SIZE, userdataSize); |