diff --git a/packages/MediaComponents/test/runtest.sh b/packages/MediaComponents/test/runtest.sh
index bda48b0..5c0ef51 100644
--- a/packages/MediaComponents/test/runtest.sh
+++ b/packages/MediaComponents/test/runtest.sh
@@ -124,7 +124,7 @@
       if [[ "${OPTION_MIN}" != "true" ]]; then
         build_targets="${build_targets} droid"
       fi
-      m ${build_targets} -j || (echo "Build failed. stop" ; break)
+      m ${build_targets} -j || break
 
       ${adb} root
       ${adb} remount
diff --git a/packages/MediaComponents/test/src/android/media/MediaController2Test.java b/packages/MediaComponents/test/src/android/media/MediaController2Test.java
index 161a463..38d34cc 100644
--- a/packages/MediaComponents/test/src/android/media/MediaController2Test.java
+++ b/packages/MediaComponents/test/src/android/media/MediaController2Test.java
@@ -205,8 +205,8 @@
     public void testControllerCallback_sessionRejects() throws InterruptedException {
         final MediaSession2.SessionCallback sessionCallback = new SessionCallback() {
             @Override
-            public long onConnect(ControllerInfo controller) {
-                return 0;
+            public MediaSession2.CommandGroup onConnect(ControllerInfo controller) {
+                return null;
             }
         };
         sHandler.postAndSync(() -> {
diff --git a/packages/MediaComponents/test/src/android/media/MediaSession2Test.java b/packages/MediaComponents/test/src/android/media/MediaSession2Test.java
index a77fd63..f7224ea 100644
--- a/packages/MediaComponents/test/src/android/media/MediaSession2Test.java
+++ b/packages/MediaComponents/test/src/android/media/MediaSession2Test.java
@@ -209,15 +209,15 @@
         assertFalse(mPlayer.mCountDownLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
         assertFalse(mPlayer.mPauseCalled);
         assertEquals(1, callback.commands.size());
-        assertEquals(MediaSession2.COMMAND_FLAG_PLAYBACK_PAUSE,
-                (long) callback.commands.get(0));
+        assertEquals(MediaSession2.COMMAND_CODE_PLAYBACK_PAUSE,
+                (long) callback.commands.get(0).getCommandCode());
         controller.skipToNext();
         assertTrue(mPlayer.mCountDownLatch.await(WAIT_TIME_MS, TimeUnit.MILLISECONDS));
         assertTrue(mPlayer.mSkipToNextCalled);
         assertFalse(mPlayer.mPauseCalled);
         assertEquals(2, callback.commands.size());
-        assertEquals(MediaSession2.COMMAND_FLAG_PLAYBACK_SKIP_NEXT_ITEM,
-                (long) callback.commands.get(1));
+        assertEquals(MediaSession2.COMMAND_CODE_PLAYBACK_SKIP_NEXT_ITEM,
+                (long) callback.commands.get(1).getCommandCode());
     }
 
     @Test
@@ -236,28 +236,28 @@
 
     public class MockOnConnectCallback extends SessionCallback {
         @Override
-        public long onConnect(ControllerInfo controllerInfo) {
+        public MediaSession2.CommandGroup onConnect(ControllerInfo controllerInfo) {
             if (Process.myUid() != controllerInfo.getUid()) {
-                return 0;
+                return null;
             }
             assertEquals(mContext.getPackageName(), controllerInfo.getPackageName());
             assertEquals(Process.myUid(), controllerInfo.getUid());
             assertFalse(controllerInfo.isTrusted());
             // Reject all
-            return 0;
+            return null;
         }
     }
 
     public class MockOnCommandCallback extends SessionCallback {
-        public final ArrayList<Long> commands = new ArrayList<>();
+        public final ArrayList<MediaSession2.Command> commands = new ArrayList<>();
 
         @Override
-        public boolean onCommand(ControllerInfo controllerInfo, long command) {
+        public boolean onCommandRequest(ControllerInfo controllerInfo, MediaSession2.Command command) {
             assertEquals(mContext.getPackageName(), controllerInfo.getPackageName());
             assertEquals(Process.myUid(), controllerInfo.getUid());
             assertFalse(controllerInfo.isTrusted());
             commands.add(command);
-            if (command == MediaSession2.COMMAND_FLAG_PLAYBACK_PAUSE) {
+            if (command.getCommandCode() == MediaSession2.COMMAND_CODE_PLAYBACK_PAUSE) {
                 return false;
             }
             return true;
diff --git a/packages/MediaComponents/test/src/android/media/MediaSession2TestBase.java b/packages/MediaComponents/test/src/android/media/MediaSession2TestBase.java
index 80b8b79..ab842c4 100644
--- a/packages/MediaComponents/test/src/android/media/MediaSession2TestBase.java
+++ b/packages/MediaComponents/test/src/android/media/MediaSession2TestBase.java
@@ -20,6 +20,7 @@
 import static junit.framework.Assert.assertTrue;
 
 import android.content.Context;
+import android.media.MediaSession2.CommandGroup;
 import android.os.HandlerThread;
 import android.support.annotation.CallSuper;
 import android.support.annotation.NonNull;
@@ -106,7 +107,7 @@
 
         @CallSuper
         @Override
-        public void onConnected(long commands) {
+        public void onConnected(CommandGroup commands) {
             super.onConnected(commands);
             connectLatch.countDown();
         }
diff --git a/packages/MediaComponents/test/src/android/media/MediaSessionManager_MediaSession2.java b/packages/MediaComponents/test/src/android/media/MediaSessionManager_MediaSession2.java
index 552f0a6..0ee37b1 100644
--- a/packages/MediaComponents/test/src/android/media/MediaSessionManager_MediaSession2.java
+++ b/packages/MediaComponents/test/src/android/media/MediaSessionManager_MediaSession2.java
@@ -115,9 +115,9 @@
             mSession = new MediaSession2.Builder(mContext, new MockPlayer(0)).setId(TAG)
                     .setSessionCallback(new SessionCallback() {
                         @Override
-                        public long onConnect(ControllerInfo controller) {
+                        public MediaSession2.CommandGroup onConnect(ControllerInfo controller) {
                             // Reject all connection request.
-                            return 0;
+                            return null;
                         }
                     }).build();
         });
diff --git a/packages/MediaComponents/test/src/android/media/MockMediaSessionService2.java b/packages/MediaComponents/test/src/android/media/MockMediaSessionService2.java
index 0fa2f52..e4a7485 100644
--- a/packages/MediaComponents/test/src/android/media/MockMediaSessionService2.java
+++ b/packages/MediaComponents/test/src/android/media/MockMediaSessionService2.java
@@ -59,7 +59,7 @@
 
     private class MySessionCallback extends SessionCallback {
         @Override
-        public long onConnect(ControllerInfo controller) {
+        public MediaSession2.CommandGroup onConnect(ControllerInfo controller) {
             if (Process.myUid() != controller.getUid()) {
                 // It's system app wants to listen changes. Ignore.
                 return super.onConnect(controller);
