Streamline: use Messages sent to a Handler subclass instead of posting Runnables

Change-Id: I0ecbd2145300962839c0f87b761768a3bca4f010
diff --git a/core/java/android/backup/RestoreSession.java b/core/java/android/backup/RestoreSession.java
index a884793..6b35fe8 100644
--- a/core/java/android/backup/RestoreSession.java
+++ b/core/java/android/backup/RestoreSession.java
@@ -21,6 +21,7 @@
 import android.backup.RestoreSet;
 import android.content.Context;
 import android.os.Handler;
+import android.os.Message;
 import android.os.RemoteException;
 import android.util.Log;
 
@@ -116,61 +117,44 @@
         final Handler mHandler;
         final RestoreObserver mAppObserver;
 
+        static final int MSG_RESTORE_STARTING = 1;
+        static final int MSG_UPDATE = 2;
+        static final int MSG_RESTORE_FINISHED = 3;
+
         RestoreObserverWrapper(Context context, RestoreObserver appObserver) {
-            mHandler = new Handler(context.getMainLooper());
+            mHandler = new Handler(context.getMainLooper()) {
+                @Override
+                public void handleMessage(Message msg) {
+                    switch (msg.what) {
+                    case MSG_RESTORE_STARTING:
+                        mAppObserver.restoreStarting(msg.arg1);
+                        break;
+                    case MSG_UPDATE:
+                        mAppObserver.onUpdate(msg.arg1);
+                        break;
+                    case MSG_RESTORE_FINISHED:
+                        mAppObserver.restoreFinished(msg.arg1);
+                        break;
+                    }
+                }
+            };
             mAppObserver = appObserver;
         }
 
-        // Wrap the IRestoreObserver -> RestoreObserver callthrough in Runnables
-        // posted to the app's main thread looper.
-        class RestoreStartingRunnable implements Runnable {
-            int mNumPackages;
-
-            RestoreStartingRunnable(int numPackages) {
-                mNumPackages = numPackages;
-            }
-
-            public void run() {
-                mAppObserver.restoreStarting(mNumPackages);
-            }
-        }
-
-        class OnUpdateRunnable implements Runnable {
-            int mNowRestoring;
-
-            OnUpdateRunnable(int nowRestoring) {
-                mNowRestoring = nowRestoring;
-            }
-
-            public void run() {
-                mAppObserver.onUpdate(mNowRestoring);
-            }
-        }
-
-        class RestoreFinishedRunnable implements Runnable {
-            int mError;
-
-            RestoreFinishedRunnable(int error) {
-                mError = error;
-            }
-
-            public void run() {
-                mAppObserver.restoreFinished(mError);
-            }
-        }
-
-        // The actual redirection code is quite simple using just the
-        // above Runnable subclasses
+        // Binder calls into this object just enqueue on the main-thread handler
         public void restoreStarting(int numPackages) {
-            mHandler.post(new RestoreStartingRunnable(numPackages));
+            mHandler.sendMessage(
+                    mHandler.obtainMessage(MSG_RESTORE_STARTING, numPackages, 0));
         }
 
         public void onUpdate(int nowBeingRestored) {
-            mHandler.post(new OnUpdateRunnable(nowBeingRestored));
+            mHandler.sendMessage(
+                    mHandler.obtainMessage(MSG_UPDATE, nowBeingRestored, 0));
         }
 
         public void restoreFinished(int error) {
-            mHandler.post(new RestoreFinishedRunnable(error));
+            mHandler.sendMessage(
+                    mHandler.obtainMessage(MSG_RESTORE_FINISHED, error, 0));
         }
     }
 }