Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dded214e authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 6689 into donut

* changes:
  Don't crash the app when restore agent bringup throws
parents 8440ecce d1475e03
Loading
Loading
Loading
Loading
+26 −19
Original line number Diff line number Diff line
@@ -2544,16 +2544,13 @@ public final class ActivityThread {
            }
            classname = "android.app.FullBackupAgent";
        }
        try {
            IBinder binder = null;
            try {
                java.lang.ClassLoader cl = packageInfo.getClassLoader();
                agent = (BackupAgent) cl.loadClass(data.appInfo.backupAgentName).newInstance();
        } catch (Exception e) {
            throw new RuntimeException("Unable to instantiate backup agent "
                    + data.appInfo.backupAgentName + ": " + e.toString(), e);
        }

                // set up the agent's context
        try {
                if (DEBUG_BACKUP) Log.v(TAG, "Initializing BackupAgent "
                        + data.appInfo.backupAgentName);

@@ -2561,16 +2558,26 @@ public final class ActivityThread {
                context.init(packageInfo, null, this);
                context.setOuterContext(agent);
                agent.attach(context);

                agent.onCreate();
                binder = agent.onBind();
                mBackupAgents.put(packageName, agent);
            } catch (Exception e) {
                // If this is during restore, fail silently; otherwise go
                // ahead and let the user see the crash.
                Log.e(TAG, "Agent threw during creation: " + e);
                if (data.backupMode != IApplicationThread.BACKUP_MODE_RESTORE) {
                    throw e;
                }
                // falling through with 'binder' still null
            }

            // tell the OS that we're live now
            IBinder binder = agent.onBind();
            try {
                ActivityManagerNative.getDefault().backupAgentCreated(packageName, binder);
            } catch (RemoteException e) {
                // nothing to do.
            }
            mBackupAgents.put(packageName, agent);
        } catch (Exception e) {
            throw new RuntimeException("Unable to create BackupAgent "
                    + data.appInfo.backupAgentName + ": " + e.toString(), e);