summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Po-Chien Hsueh <pchsueh@google.com> 2019-03-21 17:16:06 +0800
committer Po-Chien Hsueh <pchsueh@google.com> 2019-03-21 17:26:20 +0800
commitc51cf0f76a2bd7ce96c3f12000ef3dbe6008396e (patch)
tree4f361758f0b77ae901dc41e93005f9f98805697a
parenta5bd084a44ab3b607a690fd219a3a9111b158eac (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
-rw-r--r--api/system-current.txt4
-rw-r--r--core/java/android/os/image/DynamicSystemClient.java13
-rw-r--r--packages/DynamicSystemInstallationService/src/com/android/dynandroid/DynamicSystemInstallationService.java6
-rw-r--r--packages/DynamicSystemInstallationService/src/com/android/dynandroid/InstallationAsyncTask.java10
-rw-r--r--packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java8
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);