Pass exception detail to API user
Per API review, DynamicSystem installation service will also pass exceptions to users of DynamicSystemClient. Bug: 126613281 Test: build and run, verified with test app. Change-Id: I413d6137837eaa968f59550f110da34cea66d4d4
This commit is contained in:
@@ -49,6 +49,7 @@ import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Message;
|
||||
import android.os.Messenger;
|
||||
import android.os.ParcelableException;
|
||||
import android.os.PowerManager;
|
||||
import android.os.RemoteException;
|
||||
import android.os.image.DynamicSystemClient;
|
||||
@@ -170,13 +171,13 @@ public class DynamicSystemInstallationService extends Service
|
||||
@Override
|
||||
public void onProgressUpdate(long installedSize) {
|
||||
mInstalledSize = installedSize;
|
||||
postStatus(STATUS_IN_PROGRESS, CAUSE_NOT_SPECIFIED);
|
||||
postStatus(STATUS_IN_PROGRESS, CAUSE_NOT_SPECIFIED, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResult(int result) {
|
||||
public void onResult(int result, Throwable detail) {
|
||||
if (result == RESULT_OK) {
|
||||
postStatus(STATUS_READY, CAUSE_INSTALL_COMPLETED);
|
||||
postStatus(STATUS_READY, CAUSE_INSTALL_COMPLETED, null);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -185,15 +186,15 @@ public class DynamicSystemInstallationService extends Service
|
||||
|
||||
switch (result) {
|
||||
case RESULT_ERROR_IO:
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_ERROR_IO);
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_ERROR_IO, detail);
|
||||
break;
|
||||
|
||||
case RESULT_ERROR_INVALID_URL:
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_ERROR_INVALID_URL);
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_ERROR_INVALID_URL, detail);
|
||||
break;
|
||||
|
||||
case RESULT_ERROR_EXCEPTION:
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_ERROR_EXCEPTION);
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_ERROR_EXCEPTION, detail);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -201,7 +202,7 @@ public class DynamicSystemInstallationService extends Service
|
||||
@Override
|
||||
public void onCancelled() {
|
||||
resetTaskAndStop();
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED);
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
|
||||
}
|
||||
|
||||
private void executeInstallCommand(Intent intent) {
|
||||
@@ -266,7 +267,7 @@ public class DynamicSystemInstallationService extends Service
|
||||
Toast.LENGTH_LONG).show();
|
||||
|
||||
resetTaskAndStop();
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED);
|
||||
postStatus(STATUS_NOT_STARTED, CAUSE_INSTALL_CANCELLED, null);
|
||||
|
||||
mDynSystem.remove();
|
||||
}
|
||||
@@ -414,7 +415,7 @@ public class DynamicSystemInstallationService extends Service
|
||||
return VerificationActivity.isVerified(url);
|
||||
}
|
||||
|
||||
private void postStatus(int status, int cause) {
|
||||
private void postStatus(int status, int cause, Throwable detail) {
|
||||
Log.d(TAG, "postStatus(): statusCode=" + status + ", causeCode=" + cause);
|
||||
|
||||
boolean notifyOnNotificationBar = true;
|
||||
@@ -433,18 +434,24 @@ public class DynamicSystemInstallationService extends Service
|
||||
|
||||
for (int i = mClients.size() - 1; i >= 0; i--) {
|
||||
try {
|
||||
notifyOneClient(mClients.get(i), status, cause);
|
||||
notifyOneClient(mClients.get(i), status, cause, detail);
|
||||
} catch (RemoteException e) {
|
||||
mClients.remove(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void notifyOneClient(Messenger client, int status, int cause) throws RemoteException {
|
||||
private void notifyOneClient(Messenger client, int status, int cause, Throwable detail)
|
||||
throws RemoteException {
|
||||
Bundle bundle = new Bundle();
|
||||
|
||||
bundle.putLong(DynamicSystemClient.KEY_INSTALLED_SIZE, mInstalledSize);
|
||||
|
||||
if (detail != null) {
|
||||
bundle.putSerializable(DynamicSystemClient.KEY_EXCEPTION_DETAIL,
|
||||
new ParcelableException(detail));
|
||||
}
|
||||
|
||||
client.send(Message.obtain(null,
|
||||
DynamicSystemClient.MSG_POST_STATUS, status, cause, bundle));
|
||||
}
|
||||
@@ -496,7 +503,7 @@ public class DynamicSystemInstallationService extends Service
|
||||
int status = getStatus();
|
||||
|
||||
// tell just registered client my status, but do not specify cause
|
||||
notifyOneClient(client, status, CAUSE_NOT_SPECIFIED);
|
||||
notifyOneClient(client, status, CAUSE_NOT_SPECIFIED, null);
|
||||
|
||||
mClients.add(client);
|
||||
} catch (RemoteException e) {
|
||||
|
||||
@@ -31,7 +31,7 @@ import java.util.Locale;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
|
||||
class InstallationAsyncTask extends AsyncTask<String, Long, Integer> {
|
||||
class InstallationAsyncTask extends AsyncTask<String, Long, Throwable> {
|
||||
|
||||
private static final String TAG = "InstallationAsyncTask";
|
||||
|
||||
@@ -43,7 +43,6 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Integer> {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Not completed, including being cancelled */
|
||||
static final int NO_RESULT = 0;
|
||||
static final int RESULT_OK = 1;
|
||||
@@ -53,7 +52,7 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Integer> {
|
||||
|
||||
interface InstallStatusListener {
|
||||
void onProgressUpdate(long installedSize);
|
||||
void onResult(int resultCode);
|
||||
void onResult(int resultCode, Throwable detail);
|
||||
void onCancelled();
|
||||
}
|
||||
|
||||
@@ -84,7 +83,7 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Integer> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer doInBackground(String... voids) {
|
||||
protected Throwable doInBackground(String... voids) {
|
||||
Log.d(TAG, "Start doInBackground(), URL: " + mUrl);
|
||||
|
||||
try {
|
||||
@@ -108,7 +107,7 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Integer> {
|
||||
if (isCancelled()) {
|
||||
boolean aborted = mDynSystem.abort();
|
||||
Log.d(TAG, "Called DynamicSystemManager.abort(), result = " + aborted);
|
||||
return RESULT_OK;
|
||||
return null;
|
||||
}
|
||||
|
||||
GsiProgress progress = mDynSystem.getInstallationProgress();
|
||||
@@ -124,10 +123,8 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Integer> {
|
||||
|
||||
|
||||
if (mInstallationSession == null) {
|
||||
Log.e(TAG, "Failed to start installation with requested size: "
|
||||
throw new IOException("Failed to start installation with requested size: "
|
||||
+ (mSystemSize + mUserdataSize));
|
||||
|
||||
return RESULT_ERROR_IO;
|
||||
}
|
||||
|
||||
installedSize = mUserdataSize;
|
||||
@@ -157,20 +154,11 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Integer> {
|
||||
}
|
||||
}
|
||||
|
||||
return RESULT_OK;
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
return RESULT_ERROR_IO;
|
||||
|
||||
} catch (InvalidImageUrlException e) {
|
||||
e.printStackTrace();
|
||||
return RESULT_ERROR_INVALID_URL;
|
||||
return null;
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return RESULT_ERROR_EXCEPTION;
|
||||
|
||||
return e;
|
||||
} finally {
|
||||
close();
|
||||
}
|
||||
@@ -180,19 +168,24 @@ class InstallationAsyncTask extends AsyncTask<String, Long, Integer> {
|
||||
protected void onCancelled() {
|
||||
Log.d(TAG, "onCancelled(), URL: " + mUrl);
|
||||
|
||||
close();
|
||||
|
||||
mListener.onCancelled();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Integer result) {
|
||||
Log.d(TAG, "onPostExecute(), URL: " + mUrl + ", result: " + result);
|
||||
protected void onPostExecute(Throwable detail) {
|
||||
if (detail == null) {
|
||||
mResult = RESULT_OK;
|
||||
} else if (detail instanceof IOException) {
|
||||
mResult = RESULT_ERROR_IO;
|
||||
} else if (detail instanceof InvalidImageUrlException) {
|
||||
mResult = RESULT_ERROR_INVALID_URL;
|
||||
} else {
|
||||
mResult = RESULT_ERROR_EXCEPTION;
|
||||
}
|
||||
|
||||
close();
|
||||
Log.d(TAG, "onPostExecute(), URL: " + mUrl + ", result: " + mResult);
|
||||
|
||||
mResult = result;
|
||||
mListener.onResult(mResult);
|
||||
mListener.onResult(mResult, detail);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user