Merge "Update counters for session encryption to start at 1."
diff --git a/hostsidetests/appcompat/compatchanges/app/AndroidManifest.xml b/hostsidetests/appcompat/compatchanges/app/AndroidManifest.xml
index 08553c7..28b33d2 100644
--- a/hostsidetests/appcompat/compatchanges/app/AndroidManifest.xml
+++ b/hostsidetests/appcompat/compatchanges/app/AndroidManifest.xml
@@ -16,8 +16,10 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.cts.appcompat">
-
-    <application>
+    <!-- targetSdkVersion for this test must be below 1234 -->
+    <uses-sdk android:targetSdkVersion="29"/>
+    <application
+        android:debuggable="true">
         <uses-library android:name="android.test.runner" />
     </application>
 
diff --git a/hostsidetests/appcompat/compatchanges/app/src/com/android/cts/appcompat/CompatChangesTest.java b/hostsidetests/appcompat/compatchanges/app/src/com/android/cts/appcompat/CompatChangesTest.java
index 1c9fe1b..7025a96 100644
--- a/hostsidetests/appcompat/compatchanges/app/src/com/android/cts/appcompat/CompatChangesTest.java
+++ b/hostsidetests/appcompat/compatchanges/app/src/com/android/cts/appcompat/CompatChangesTest.java
@@ -43,6 +43,7 @@
  */
 @RunWith(AndroidJUnit4.class)
 public final class CompatChangesTest {
+  private static final long CTS_SYSTEM_API_CHANGEID = 149391281;
   @Before
   public void setUp() {
     InstrumentationRegistry.getInstrumentation().getUiAutomation()
@@ -58,40 +59,40 @@
   /* Test run by CompatChangesSystemApiTest.testIsChangeEnabled */
   @Test
   public void isChangeEnabled_changeEnabled() {
-    assertThat(CompatChanges.isChangeEnabled(1L)).isTrue();
+    assertThat(CompatChanges.isChangeEnabled(CTS_SYSTEM_API_CHANGEID)).isTrue();
   }
 
   /* Test run by CompatChangesSystemApiTest.testIsChangeEnabledPackageName */
   @Test
   public void isChangeEnabledPackageName_changeEnabled() {
     Context context = InstrumentationRegistry.getTargetContext();
-    assertThat(CompatChanges.isChangeEnabled(1L, context.getPackageName(),
+    assertThat(CompatChanges.isChangeEnabled(CTS_SYSTEM_API_CHANGEID, context.getPackageName(),
             context.getUser())).isTrue();
   }
 
   /* Test run by CompatChangesSystemApiTest.testIsChangeEnabledUid */
   @Test
   public void isChangeEnabledUid_changeEnabled() {
-    assertThat(CompatChanges.isChangeEnabled(1L, Process.myUid())).isTrue();
+    assertThat(CompatChanges.isChangeEnabled(CTS_SYSTEM_API_CHANGEID, Process.myUid())).isTrue();
   }
 
   /* Test run by CompatChangesSystemApiTest.testIsChangeDisabled */
   @Test
   public void isChangeEnabled_changeDisabled() {
-    assertThat(CompatChanges.isChangeEnabled(1L)).isFalse();
+    assertThat(CompatChanges.isChangeEnabled(CTS_SYSTEM_API_CHANGEID)).isFalse();
   }
 
   /* Test run by CompatChangesSystemApiTest.testIsChangeDisabledPackageName */
   @Test
   public void isChangeEnabledPackageName_changeDisabled() {
     Context context = InstrumentationRegistry.getTargetContext();
-    assertThat(CompatChanges.isChangeEnabled(1L, context.getPackageName(),
+    assertThat(CompatChanges.isChangeEnabled(CTS_SYSTEM_API_CHANGEID, context.getPackageName(),
             context.getUser())).isFalse();
   }
 
   /* Test run by CompatChangesSystemApiTest.testIsChangeDisabledUid */
   @Test
   public void isChangeEnabledUid_changeDisabled() {
-    assertThat(CompatChanges.isChangeEnabled(1L, Process.myUid())).isFalse();
+    assertThat(CompatChanges.isChangeEnabled(CTS_SYSTEM_API_CHANGEID, Process.myUid())).isFalse();
   }
 }
diff --git a/hostsidetests/appcompat/compatchanges/src/com/android/cts/appcompat/CompatChangesSystemApiTest.java b/hostsidetests/appcompat/compatchanges/src/com/android/cts/appcompat/CompatChangesSystemApiTest.java
index 6f57aa8..699af1a 100644
--- a/hostsidetests/appcompat/compatchanges/src/com/android/cts/appcompat/CompatChangesSystemApiTest.java
+++ b/hostsidetests/appcompat/compatchanges/src/com/android/cts/appcompat/CompatChangesSystemApiTest.java
@@ -36,6 +36,8 @@
     protected static final String TEST_APK = "CtsHostsideCompatChangeTestsApp.apk";
     protected static final String TEST_PKG = "com.android.cts.appcompat";
 
+    private static final long CTS_SYSTEM_API_CHANGEID = 149391281;
+
     @Override
     protected void setUp() throws Exception {
         installPackage(TEST_APK, true);
@@ -43,39 +45,39 @@
 
     public void testIsChangeEnabled() throws Exception {
         runDeviceCompatTest(TEST_PKG, ".CompatChangesTest", "isChangeEnabled_changeEnabled",
-                /*enabledChanges*/ImmutableSet.of(1L),
+                /*enabledChanges*/ImmutableSet.of(CTS_SYSTEM_API_CHANGEID),
                 /*disabledChanges*/ ImmutableSet.of());
     }
 
     public void testIsChangeEnabledPackageName() throws Exception {
         runDeviceCompatTest(TEST_PKG, ".CompatChangesTest",
                 "isChangeEnabledPackageName_changeEnabled",
-                /*enabledChanges*/ImmutableSet.of(1L),
+                /*enabledChanges*/ImmutableSet.of(CTS_SYSTEM_API_CHANGEID),
                 /*disabledChanges*/ ImmutableSet.of());
     }
 
     public void testIsChangeEnabledUid() throws Exception {
         runDeviceCompatTest(TEST_PKG, ".CompatChangesTest", "isChangeEnabledUid_changeEnabled",
-                /*enabledChanges*/ImmutableSet.of(1L),
+                /*enabledChanges*/ImmutableSet.of(CTS_SYSTEM_API_CHANGEID),
                 /*disabledChanges*/ ImmutableSet.of());
     }
 
     public void testIsChangeDisabled() throws Exception {
         runDeviceCompatTest(TEST_PKG, ".CompatChangesTest", "isChangeEnabled_changeDisabled",
                 /*enabledChanges*/ImmutableSet.of(),
-                /*disabledChanges*/ ImmutableSet.of(1L));
+                /*disabledChanges*/ ImmutableSet.of(CTS_SYSTEM_API_CHANGEID));
     }
 
     public void testIsChangeDisabledPackageName() throws Exception {
         runDeviceCompatTest(TEST_PKG, ".CompatChangesTest",
                 "isChangeEnabledPackageName_changeDisabled",
                 /*enabledChanges*/ImmutableSet.of(),
-                /*disabledChanges*/ ImmutableSet.of(1L));
+                /*disabledChanges*/ ImmutableSet.of(CTS_SYSTEM_API_CHANGEID));
     }
 
     public void testIsChangeDisabledUid() throws Exception {
         runDeviceCompatTest(TEST_PKG, ".CompatChangesTest", "isChangeEnabledUid_changeDisabled",
                 /*enabledChanges*/ImmutableSet.of(),
-                /*disabledChanges*/ ImmutableSet.of(1L));
+                /*disabledChanges*/ ImmutableSet.of(CTS_SYSTEM_API_CHANGEID));
     }
 }
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/CecDevice.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/CecDevice.java
index 3dac5d5..68c270a 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/CecDevice.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/CecDevice.java
@@ -21,12 +21,20 @@
 
 public enum CecDevice {
     TV(0x0),
-    RECORDING_1(0x1),
+    RECORDER_1(0x1),
+    RECORDER_2(0x2),
     TUNER_1(0x3),
     PLAYBACK_1(0x4),
     AUDIO_SYSTEM(0x5),
+    TUNER_2(0x6),
+    TUNER_3(0x7),
     PLAYBACK_2(0x8),
+    RECORDER_3(0x9),
+    TUNER_4(0xa),
     PLAYBACK_3(0xb),
+    RESERVED_1(0xc),
+    RESERVED_2(0xd),
+    SPECIFIC_USE(0xe),
     BROADCAST(0xf);
 
     private final int playerId;
@@ -53,8 +61,15 @@
                 return Integer.toString(HdmiCecConstants.CEC_DEVICE_TYPE_TV);
             case AUDIO_SYSTEM:
                 return Integer.toString(HdmiCecConstants.CEC_DEVICE_TYPE_AUDIO_SYSTEM);
-            case RECORDING_1:
-                return Integer.toString(HdmiCecConstants.CEC_DEVICE_TYPE_RECORDING_DEVICE);
+            case RECORDER_1:
+            case RECORDER_2:
+            case RECORDER_3:
+                return Integer.toString(HdmiCecConstants.CEC_DEVICE_TYPE_RECORDER);
+            case TUNER_1:
+            case TUNER_2:
+            case TUNER_3:
+            case TUNER_4:
+                return Integer.toString(HdmiCecConstants.CEC_DEVICE_TYPE_TUNER);
             default:
                 return Integer.toString(HdmiCecConstants.CEC_DEVICE_TYPE_RESERVED);
         }
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecClientWrapper.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecClientWrapper.java
index 4bbf0ec..a4bacf4 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecClientWrapper.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecClientWrapper.java
@@ -171,6 +171,21 @@
      */
     public void sendUserControlPressAndRelease(CecDevice source, CecDevice destination,
             int keycode, boolean holdKey) throws Exception {
+        sendUserControlPress(source, destination, keycode, holdKey);
+        /* Sleep less than 200ms between press and release */
+        TimeUnit.MILLISECONDS.sleep(100);
+        mOutputConsole.write("tx " + source + destination + ":" +
+                              CecMessage.USER_CONTROL_RELEASED);
+        mOutputConsole.flush();
+    }
+
+    /**
+     * Sends a <UCP> message from source to destination through the output console of the
+     * cec-communication channel with the mentioned keycode. If holdKey is true, the method will
+     * send multiple <UCP> messages to simulate a long press. No <UCR> will be sent.
+     */
+    public void sendUserControlPress(CecDevice source, CecDevice destination,
+            int keycode, boolean holdKey) throws Exception {
         checkCecClient();
         String key = String.format("%02x", keycode);
         String command = "tx " + source + destination + ":" +
@@ -182,6 +197,7 @@
             int repeat = 16;
             for (int i = 0; i < repeat; i++) {
                 mOutputConsole.write(command);
+                mOutputConsole.newLine();
                 mOutputConsole.flush();
                 TimeUnit.MILLISECONDS.sleep(300);
             }
@@ -189,10 +205,6 @@
 
         mOutputConsole.write(command);
         mOutputConsole.newLine();
-        /* Sleep less than 200ms between press and release */
-        TimeUnit.MILLISECONDS.sleep(100);
-        mOutputConsole.write("tx " + source + destination + ":" +
-                              CecMessage.USER_CONTROL_RELEASED);
         mOutputConsole.flush();
     }
 
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecConstants.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecConstants.java
index 6383a4a..0565eae 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecConstants.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecConstants.java
@@ -41,7 +41,7 @@
     public static final int UNRECOGNIZED_OPCODE = 0x0;
 
     public static final int CEC_DEVICE_TYPE_TV = 0;
-    public static final int CEC_DEVICE_TYPE_RECORDING_DEVICE = 1;
+    public static final int CEC_DEVICE_TYPE_RECORDER = 1;
     public static final int CEC_DEVICE_TYPE_RESERVED = 2;
     public static final int CEC_DEVICE_TYPE_TUNER = 3;
     public static final int CEC_DEVICE_TYPE_PLAYBACK_DEVICE = 4;
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/audio/HdmiCecRemoteControlPassThroughTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/audio/HdmiCecRemoteControlPassThroughTest.java
index 182a3cb..a90b09f 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/audio/HdmiCecRemoteControlPassThroughTest.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/audio/HdmiCecRemoteControlPassThroughTest.java
@@ -140,4 +140,38 @@
                 HdmiCecConstants.CEC_CONTROL_BACK, true);
         lookForLog("Long press KEYCODE_BACK");
     }
+
+    /**
+     * Test 11.2.13-3
+     * Tests that the device responds correctly to a <User Control Pressed> message for press and
+     * hold operations when no <User Control Released> is sent.
+     */
+    @Test
+    public void cect_11_2_13_3_UserControlPressAndHoldWithNoRelease() throws Exception {
+        ITestDevice device = getDevice();
+        // Clear activity
+        device.executeShellCommand(CLEAR_COMMAND);
+        // Clear logcat.
+        device.executeAdbCommand("logcat", "-c");
+        // Start the APK and wait for it to complete.
+        device.executeShellCommand(START_COMMAND);
+        hdmiCecClient.sendUserControlPress(CecDevice.TV, CecDevice.AUDIO_SYSTEM,
+                HdmiCecConstants.CEC_CONTROL_UP, true);
+        lookForLog("Long press KEYCODE_DPAD_UP");
+        hdmiCecClient.sendUserControlPress(CecDevice.TV, CecDevice.AUDIO_SYSTEM,
+                HdmiCecConstants.CEC_CONTROL_DOWN, true);
+        lookForLog("Long press KEYCODE_DPAD_DOWN");
+        hdmiCecClient.sendUserControlPress(CecDevice.TV, CecDevice.AUDIO_SYSTEM,
+                HdmiCecConstants.CEC_CONTROL_LEFT, true);
+        lookForLog("Long press KEYCODE_DPAD_LEFT");
+        hdmiCecClient.sendUserControlPress(CecDevice.TV, CecDevice.AUDIO_SYSTEM,
+                HdmiCecConstants.CEC_CONTROL_RIGHT, true);
+        lookForLog("Long press KEYCODE_DPAD_RIGHT");
+        hdmiCecClient.sendUserControlPress(CecDevice.TV, CecDevice.AUDIO_SYSTEM,
+                HdmiCecConstants.CEC_CONTROL_SELECT, true);
+        lookForLog("Long press KEYCODE_DPAD_CENTER");
+        hdmiCecClient.sendUserControlPress(CecDevice.TV, CecDevice.AUDIO_SYSTEM,
+                HdmiCecConstants.CEC_CONTROL_BACK, true);
+        lookForLog("Long press KEYCODE_BACK");
+    }
 }
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecSystemInformationTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecSystemInformationTest.java
index e5ab1d9..c6df9f7 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecSystemInformationTest.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecSystemInformationTest.java
@@ -172,7 +172,7 @@
         final String originalLanguage = extractLanguage(locale);
         final String language = originalLanguage.equals("spa") ? "eng" : "spa";
         try {
-            hdmiCecClient.sendCecMessage(CecDevice.RECORDING_1, CecDevice.BROADCAST,
+            hdmiCecClient.sendCecMessage(CecDevice.RECORDER_1, CecDevice.BROADCAST,
                     CecMessage.SET_MENU_LANGUAGE, hdmiCecClient.convertStringToHexParams(language));
             assertEquals(originalLanguage, extractLanguage(getSystemLocale()));
         } finally {
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecSystemStandbyTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecSystemStandbyTest.java
index 3f51843..1aa8fe4 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecSystemStandbyTest.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/playback/HdmiCecSystemStandbyTest.java
@@ -87,7 +87,7 @@
             checkDeviceAsleepAfterStandbySent(CecDevice.TV, CecDevice.BROADCAST);
             /* Wake up the TV */
             hdmiCecClient.sendConsoleMessage("on " + CecDevice.TV);
-            checkDeviceAsleepAfterStandbySent(CecDevice.RECORDING_1, CecDevice.BROADCAST);
+            checkDeviceAsleepAfterStandbySent(CecDevice.RECORDER_1, CecDevice.BROADCAST);
             /* Wake up the TV */
             hdmiCecClient.sendConsoleMessage("on " + CecDevice.TV);
             checkDeviceAsleepAfterStandbySent(CecDevice.AUDIO_SYSTEM, CecDevice.BROADCAST);
@@ -109,7 +109,7 @@
         getDevice().executeShellCommand("reboot");
         getDevice().waitForBootComplete(HdmiCecConstants.REBOOT_TIMEOUT);
         checkDeviceAsleepAfterStandbySent(CecDevice.TV, CecDevice.PLAYBACK_1);
-        checkDeviceAsleepAfterStandbySent(CecDevice.RECORDING_1, CecDevice.PLAYBACK_1);
+        checkDeviceAsleepAfterStandbySent(CecDevice.RECORDER_1, CecDevice.PLAYBACK_1);
         checkDeviceAsleepAfterStandbySent(CecDevice.AUDIO_SYSTEM, CecDevice.PLAYBACK_1);
         checkDeviceAsleepAfterStandbySent(CecDevice.PLAYBACK_2, CecDevice.PLAYBACK_1);
         checkDeviceAsleepAfterStandbySent(CecDevice.BROADCAST, CecDevice.PLAYBACK_1);
diff --git a/tests/camera/libctscamera2jni/native-camera-jni.cpp b/tests/camera/libctscamera2jni/native-camera-jni.cpp
index 3cf318c..5daccb7 100644
--- a/tests/camera/libctscamera2jni/native-camera-jni.cpp
+++ b/tests/camera/libctscamera2jni/native-camera-jni.cpp
@@ -2721,10 +2721,12 @@
             goto cleanup;
         }
 
+        StaticInfo staticInfo(chars);
         ACameraMetadata_const_entry sessionParamKeys{};
         ret = ACameraMetadata_getConstEntry(chars, ACAMERA_REQUEST_AVAILABLE_SESSION_KEYS,
                 &sessionParamKeys);
-        if ((ret != ACAMERA_OK) || (sessionParamKeys.count == 0)) {
+        if ((ret != ACAMERA_OK) || (sessionParamKeys.count == 0) ||
+                !staticInfo.isColorOutputSupported()) {
             ACameraMetadata_free(chars);
             chars = nullptr;
             continue;
diff --git a/tests/media/src/android/mediav2/cts/ExtractorUnitTest.java b/tests/media/src/android/mediav2/cts/ExtractorUnitTest.java
new file mode 100644
index 0000000..84122cd
--- /dev/null
+++ b/tests/media/src/android/mediav2/cts/ExtractorUnitTest.java
@@ -0,0 +1,793 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.mediav2.cts;
+
+import android.content.res.AssetFileDescriptor;
+import android.media.MediaDataSource;
+import android.media.MediaExtractor;
+import android.os.ParcelFileDescriptor;
+
+import androidx.test.filters.SmallTest;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.runners.Enclosed;
+import org.junit.rules.TestName;
+import org.junit.runner.RunWith;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+@RunWith(Enclosed.class)
+public class ExtractorUnitTest {
+    private static final int MAX_SAMPLE_SIZE = 4 * 1024 * 1024;
+    private static final String mInpPrefix = WorkDir.getMediaDirString();
+    private static final String mInpMedia = "ForBiggerEscapes.mp4";
+
+    @SmallTest
+    public static class TestApi {
+        @Rule
+        public TestName testName = new TestName();
+
+        @Test
+        public void testGetTrackCountBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                assertTrue("received valid trackCount before setDataSource",
+                        extractor.getTrackCount() <= 0);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetTrackCountAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.getTrackCount();
+                fail("getTrackCount succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testSelectTrackBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                extractor.selectTrack(0);
+                fail("selectTrack succeeds before setDataSource");
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testSelectTrackForInvalidIndex() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                try {
+                    extractor.selectTrack(-1);
+                    fail("selectTrack succeeds for track index: -1");
+                } catch (Exception e) {
+                    // expected
+                }
+                try {
+                    extractor.selectTrack(extractor.getTrackCount());
+                    fail("selectTrack succeeds for out of bounds track index: " +
+                            extractor.getTrackCount());
+                } catch (Exception e) {
+                    // expected
+                }
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testIdempotentSelectTrack() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                extractor.selectTrack(0);
+                extractor.selectTrack(0);
+            } catch (Exception e) {
+                fail("multiple selection of same track has failed");
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testSelectTrackAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.selectTrack(0);
+                fail("selectTrack succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testUnselectTrackBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                extractor.unselectTrack(0);
+                fail("unselectTrack succeeds before setDataSource");
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testUnselectTrackForInvalidIndex() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                try {
+                    extractor.unselectTrack(-1);
+                    fail("unselectTrack succeeds for track index: -1");
+                } catch (Exception e) {
+                    // expected
+                }
+                try {
+                    extractor.unselectTrack(extractor.getTrackCount());
+                    fail("unselectTrack succeeds for out of bounds track index: " +
+                            extractor.getTrackCount());
+                } catch (Exception e) {
+                    // expected
+                }
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testUnselectTrackForUnSelectedTrackIndex() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                extractor.unselectTrack(0);
+            } catch (Exception e) {
+                fail("un-selection of non-selected track has failed");
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testIdempotentUnselectTrack() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                extractor.selectTrack(0);
+                extractor.unselectTrack(0);
+                extractor.unselectTrack(0);
+            } catch (Exception e) {
+                fail("multiple un-selection of selected track has failed");
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testUnselectTrackAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.unselectTrack(0);
+                fail("unselectTrack succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testSeekToBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                extractor.seekTo(33000, MediaExtractor.SEEK_TO_CLOSEST_SYNC);
+                if (extractor.getSampleTime() != -1 || extractor.getSampleSize() != -1 ||
+                        extractor.getSampleFlags() != -1) {
+                    fail("seekTo() succeeds before setting data source, returns non-negative " +
+                            "sampleTime / sampleSize / sampleFlags");
+                }
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testSeekToBeforeSelectTrack() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                extractor.seekTo(33000, MediaExtractor.SEEK_TO_CLOSEST_SYNC);
+                if (extractor.getSampleTime() != -1 || extractor.getSampleSize() != -1 ||
+                        extractor.getSampleFlags() != -1) {
+                    fail("seekTo() succeeds before selectTrack, returns non-negative " +
+                            "sampleTime / sampleSize / sampleFlags");
+                }
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testSeekToForInvalidMode() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            extractor.selectTrack(0);
+            long pts = 33000;
+            try {
+                extractor.seekTo(pts, (int) pts);
+                fail("seekTo() succeeds for invalid mode: " + pts);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testSeekToAfterRelease() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            extractor.release();
+            try {
+                extractor.seekTo(33000, MediaExtractor.SEEK_TO_CLOSEST_SYNC);
+                fail("seekTo() succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        @Ignore("TODO(b/148205432)")
+        public void testGetCachedDurationBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                assertTrue("received valid cachedDuration before setDataSource",
+                        extractor.getCachedDuration() == -1);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetCachedDurationAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.getCachedDuration();
+                fail("cachedDuration succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        @Ignore("TODO(b/148204634)")
+        public void testHasCacheReachedEOSBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                assertTrue("unexpected value received from hasCacheReachedEndOfStream before" +
+                        " setDataSource", !extractor.hasCacheReachedEndOfStream());
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testHasCacheReachedEOSAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.hasCacheReachedEndOfStream();
+                fail("hasCacheReachedEndOfStream succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testGetMetricsBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                assertTrue("received valid metrics before setDataSource",
+                        extractor.getMetrics() == null);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetMetricsAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.getMetrics();
+                fail("getMetrics() succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testIdempotentRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                extractor.release();
+                extractor.release();
+            } catch (Exception e) {
+                fail(e.getMessage());
+            }
+        }
+
+        @Test
+        public void testAdvanceBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                assertTrue("advance succeeds before setDataSource", !extractor.advance());
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testAdvanceBeforeSelectTrack() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                assertTrue("advance succeeds without any active tracks", !extractor.advance());
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testAdvanceAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.advance();
+                fail("advance succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testGetSampleFlagsBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                assertTrue("received valid sampleFlag before setDataSource",
+                        extractor.getSampleFlags() == -1);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetSampleFlagsBeforeSelectTrack() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                assertTrue("received valid sampleFlag without any active tracks",
+                        extractor.getSampleFlags() == -1);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetSampleFlagsAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.getSampleFlags();
+                fail("getSampleFlags succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testGetSampleTimeBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                assertTrue("received valid sampleTime before setDataSource",
+                        extractor.getSampleTime() == -1);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetSampleTimeBeforeSelectTrack() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                assertTrue("received valid sampleTime without any active tracks",
+                        extractor.getSampleTime() == -1);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetSampleTimeAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.getSampleTime();
+                fail("getSampleTime succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testGetSampleSizeBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                assertTrue("received valid sampleSize before setDataSource",
+                        extractor.getSampleSize() == -1);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetSampleSizeBeforeSelectTrack() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                assertTrue("received valid sampleSize without any active tracks",
+                        extractor.getSampleSize() == -1);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetSampleSizeAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.getSampleSize();
+                fail("getSampleSize succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testGetSampleTrackIndexBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                assertTrue("received valid sampleTrackIndex before setDataSource",
+                        extractor.getSampleTrackIndex() == -1);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetSampleTrackIndexBeforeSelectTrack() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                assertTrue("received valid sampleTrackIndex without any active tracks",
+                        extractor.getSampleTrackIndex() == -1);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetSampleTrackIndexAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.getSampleTrackIndex();
+                fail("getSampleTrackIndex succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testGetTrackFormatBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                extractor.getTrackFormat(0);
+                fail("getTrackFormat succeeds before setDataSource");
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetTrackFormatForInvalidIndex() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                try {
+                    extractor.getTrackFormat(-1);
+                    fail("getTrackFormat succeeds for track index: -1");
+                } catch (Exception e) {
+                    // expected
+                }
+                try {
+                    extractor.getTrackFormat(extractor.getTrackCount());
+                    fail("getTrackFormat succeeds for out of bounds track index: " +
+                            extractor.getTrackCount());
+                } catch (Exception e) {
+                    // expected
+                }
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testGetTrackFormatAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            extractor.release();
+            try {
+                extractor.getTrackFormat(0);
+                fail("getTrackFormat succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testReadSampleDataBeforeSetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            ByteBuffer byteBuffer = ByteBuffer.allocate(MAX_SAMPLE_SIZE);
+            try {
+                assertTrue("readSampleData returns val >= 0 before setDataSource",
+                        extractor.readSampleData(byteBuffer, 0) < 0);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testReadSampleDataBeforeSelectTrack() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            ByteBuffer byteBuffer = ByteBuffer.allocate(MAX_SAMPLE_SIZE);
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            try {
+                assertTrue("readSampleData returns val >= 0 without any active tracks",
+                        extractor.readSampleData(byteBuffer, 0) < 0);
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testIfInvalidOffsetIsRejectedByReadSampleData() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            ByteBuffer byteBuffer = ByteBuffer.allocate(MAX_SAMPLE_SIZE);
+            extractor.setDataSource(mInpPrefix + mInpMedia);
+            extractor.selectTrack(0);
+            try {
+                // readSampleData with negative offset
+                try {
+                    extractor.readSampleData(byteBuffer, -1);
+                    fail("readSampleData succeeds with negative offset");
+                } catch (Exception e) {
+                    // expected
+                }
+
+                // readSampleData with byteBuffer's capacity - offset < frame size
+                int sampleSize = (int) extractor.getSampleSize();
+                try {
+                    extractor.readSampleData(byteBuffer, MAX_SAMPLE_SIZE - sampleSize + 1);
+                    fail("readSampleData succeeds when available size of byteBuffer is less than " +
+                            "frame size");
+                } catch (Exception e) {
+                    // expected
+                }
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testReadSampleDataAfterRelease() {
+            MediaExtractor extractor = new MediaExtractor();
+            ByteBuffer byteBuffer = ByteBuffer.allocate(MAX_SAMPLE_SIZE);
+            extractor.release();
+            try {
+                extractor.readSampleData(byteBuffer, 0);
+                fail("readSampleData succeeds after release");
+            } catch (Exception e) {
+                // expected
+            }
+        }
+
+        @Test
+        public void testIfInvalidDataSourceIsRejectedBySetDataSource() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            TestMediaDataSource dataSource =
+                    TestMediaDataSource.fromString(mInpPrefix + mInpMedia, true, false);
+            try {
+                try {
+                    extractor.setDataSource(dataSource);
+                    fail("setDataSource succeeds with malformed media data source");
+                } catch (Exception e) {
+                    // expected
+                }
+                assertTrue(dataSource.isClosed());
+                dataSource = TestMediaDataSource.fromString(mInpPrefix + mInpMedia, false, true);
+
+                try {
+                    extractor.setDataSource(dataSource);
+                    fail("setDataSource succeeds with malformed media data source");
+                } catch (Exception e) {
+                    // expected
+                }
+            } finally {
+                assertTrue(dataSource.isClosed());
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testIfNullFDIsRejectedBySetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                extractor.setDataSource((FileDescriptor) null);
+                fail("setDataSource succeeds with null fd");
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testIfWriteOnlyAssetFDIsRejectedBySetDataSource() throws IOException {
+            File inpFile = File.createTempFile("ExtractorTestApisetDSAFD", ".in");
+            MediaExtractor extractor = new MediaExtractor();
+            try (ParcelFileDescriptor parcelFD = ParcelFileDescriptor
+                    .open(inpFile, ParcelFileDescriptor.MODE_WRITE_ONLY);
+                 AssetFileDescriptor afd = new AssetFileDescriptor(parcelFD, 0,
+                         AssetFileDescriptor.UNKNOWN_LENGTH)) {
+                extractor.setDataSource(afd);
+                fail("setDataSource succeeds write only afd");
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+            inpFile.delete();
+        }
+
+        @Test
+        public void testIfWriteOnlyFDIsRejectedBySetDataSource() throws IOException {
+            MediaExtractor extractor = new MediaExtractor();
+            File inpFile = File.createTempFile("ExtractorTestApisetDSFD", ".in");
+            try (FileOutputStream fOut = new FileOutputStream(inpFile)) {
+                extractor.setDataSource(fOut.getFD());
+                fail("setDataSource succeeds write only fd");
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+            inpFile.delete();
+        }
+
+        @Test
+        public void testIfNullMediaDataSourceIsRejectedBySetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                extractor.setDataSource((MediaDataSource) null);
+                fail("setDataSource succeeds with null data source");
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testIfNullFileIsRejectedBySetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                extractor.setDataSource((String) null);
+                fail("setDataSource succeeds with null file path");
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+
+        @Test
+        public void testIfNullAssetFDIsRejectedBySetDataSource() {
+            MediaExtractor extractor = new MediaExtractor();
+            try {
+                extractor.setDataSource((AssetFileDescriptor) null);
+                fail("setDataSource succeeds with null asset fd");
+            } catch (Exception e) {
+                // expected
+            } finally {
+                extractor.release();
+            }
+        }
+    }
+}
diff --git a/tests/tests/media/res/raw/a_4_haptic.ogg b/tests/tests/media/res/raw/a_4_haptic.ogg
index e8287a8..3c94c8d 100644
--- a/tests/tests/media/res/raw/a_4_haptic.ogg
+++ b/tests/tests/media/res/raw/a_4_haptic.ogg
Binary files differ
diff --git a/tests/tests/media/res/raw/b_5_haptic.ogg b/tests/tests/media/res/raw/b_5_haptic.ogg
index cb4df5a..90ab939 100644
--- a/tests/tests/media/res/raw/b_5_haptic.ogg
+++ b/tests/tests/media/res/raw/b_5_haptic.ogg
Binary files differ
diff --git a/tests/tests/media/res/raw/c_sharp_5_haptic.ogg b/tests/tests/media/res/raw/c_sharp_5_haptic.ogg
index 7950552..57c46ea 100644
--- a/tests/tests/media/res/raw/c_sharp_5_haptic.ogg
+++ b/tests/tests/media/res/raw/c_sharp_5_haptic.ogg
Binary files differ
diff --git a/tests/tests/media/res/raw/e_5_haptic.ogg b/tests/tests/media/res/raw/e_5_haptic.ogg
index 7c7f4cd..98289dc 100644
--- a/tests/tests/media/res/raw/e_5_haptic.ogg
+++ b/tests/tests/media/res/raw/e_5_haptic.ogg
Binary files differ
diff --git a/tests/tests/media/res/raw/g_sharp_5_haptic.ogg b/tests/tests/media/res/raw/g_sharp_5_haptic.ogg
index ecf9439..6fb7388 100644
--- a/tests/tests/media/res/raw/g_sharp_5_haptic.ogg
+++ b/tests/tests/media/res/raw/g_sharp_5_haptic.ogg
Binary files differ
diff --git a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
index 6a10e40..1b4d4e2 100644
--- a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
@@ -1255,49 +1255,6 @@
         mMediaPlayer.stop();
     }
 
-    public void testMkvWithoutCueSeek() throws Exception {
-        if (!checkLoadResource(
-                R.raw.video_1280x720_mkv_h265_500kbps_25fps_aac_stereo_128kbps_44100hz_withoutcues)) {
-            return; // skip
-        }
-
-        mMediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
-            @Override
-            public void onSeekComplete(MediaPlayer mp) {
-                mOnSeekCompleteCalled.signal();
-            }
-        });
-        mMediaPlayer.setDisplay(mActivity.getSurfaceHolder());
-        mMediaPlayer.prepare();
-        mOnSeekCompleteCalled.reset();
-        mMediaPlayer.start();
-
-        final int seekPosMs = 3000;
-        final int syncTime2Ms = 5960;
-
-        int cp = runSeekMode(MediaPlayer.SEEK_CLOSEST, seekPosMs);
-        Log.d(LOG_TAG, "runSeekMode SEEK_CLOSEST cp: " + cp);
-        assertTrue("MediaPlayer seek fail with SEEK_CLOSEST mode.",
-                  cp > seekPosMs && cp < syncTime2Ms);
-
-        cp = runSeekMode(MediaPlayer.SEEK_PREVIOUS_SYNC, seekPosMs);
-        Log.d(LOG_TAG, "runSeekMode SEEK_PREVIOUS_SYNC cp: " + cp);
-        assertTrue("MediaPlayer seek fail with SEEK_PREVIOUS_SYNC mode.",
-                cp >= syncTime2Ms);
-
-        cp = runSeekMode(MediaPlayer.SEEK_NEXT_SYNC, seekPosMs);
-        Log.d(LOG_TAG, "runSeekMode SEEK_NEXT_SYNC cp: " + cp);
-        assertTrue("MediaPlayer seek fail with SEEK_NEXT_SYNC mode.",
-                cp >= syncTime2Ms);
-
-        cp = runSeekMode(MediaPlayer.SEEK_CLOSEST_SYNC, seekPosMs);
-        Log.d(LOG_TAG, "runSeekMode SEEK_CLOSEST_SYNC cp: " + cp);
-        assertTrue("MediaPlayer seek fail with SEEK_CLOSEST_SYNC mode.",
-                cp >= syncTime2Ms);
-
-        mMediaPlayer.stop();
-    }
-
     public void testSeekModes() throws Exception {
         // This clip has 2 I frames at 66687us and 4299687us.
         if (!checkLoadResource(
diff --git a/tests/tests/telecom/src/android/telecom/cts/CallDetailsTest.java b/tests/tests/telecom/src/android/telecom/cts/CallDetailsTest.java
index 6b1444a..a6fe2bf 100644
--- a/tests/tests/telecom/src/android/telecom/cts/CallDetailsTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/CallDetailsTest.java
@@ -283,8 +283,8 @@
         mConnection.setConnectionProperties(Connection.PROPERTY_IS_RTT);
         assertCallProperties(mCall, Call.Details.PROPERTY_RTT);
 
-        mConnection.setConnectionProperties(Connection.PROPERTY_ASSISTED_DIALING_USED);
-        assertCallProperties(mCall, Call.Details.PROPERTY_ASSISTED_DIALING_USED);
+        mConnection.setConnectionProperties(Connection.PROPERTY_ASSISTED_DIALING);
+        assertCallProperties(mCall, Call.Details.PROPERTY_ASSISTED_DIALING);
 
         mConnection.setConnectionProperties(Connection.PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL);
         assertCallProperties(mCall, Call.Details.PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL);
diff --git a/tests/tests/telecom/src/android/telecom/cts/ConferenceTest.java b/tests/tests/telecom/src/android/telecom/cts/ConferenceTest.java
index 771f09bc..cb0d769 100644
--- a/tests/tests/telecom/src/android/telecom/cts/ConferenceTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/ConferenceTest.java
@@ -199,7 +199,7 @@
         // Consumed internally in Telecom; no verifiable manner to see the end point of this data
         // through public APIs.
         mConferenceObject.setConnectionTime(0);
-        mConferenceObject.setConnectionStartElapsedRealTime(0);
+        mConferenceObject.setConnectionStartElapsedRealtimeMillis(0);
 
         Bundle extras = new Bundle();
         extras.putString(TelecomManager.EXTRA_CALL_DISCONNECT_MESSAGE, "Test");
diff --git a/tests/tests/telecom/src/android/telecom/cts/ConnectionServiceTest.java b/tests/tests/telecom/src/android/telecom/cts/ConnectionServiceTest.java
index e0bb29e..08931eb 100755
--- a/tests/tests/telecom/src/android/telecom/cts/ConnectionServiceTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/ConnectionServiceTest.java
@@ -272,8 +272,8 @@
         connection.setCallDirection(Call.Details.DIRECTION_OUTGOING);
         connection.setConnectTimeMillis(1000L);
         assertEquals(1000L, connection.getConnectTimeMillis());
-        connection.setConnectionStartElapsedRealTime(100L);
-        assertEquals(100L, connection.getConnectElapsedTimeMillis());
+        connection.setConnectionStartElapsedRealtimeMillis(100L);
+        assertEquals(100L, connection.getConnectionStartElapsedRealtimeMillis());
 
         CtsConnectionService.addExistingConnectionToTelecom(TEST_PHONE_ACCOUNT_HANDLE, connection);
         assertNumCalls(mInCallCallbacks.getService(), 2);
diff --git a/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java b/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java
index ec0a280..9bdf6f7 100644
--- a/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java
@@ -97,7 +97,7 @@
         assertEquals(TestUtils.PACKAGE, mTelecomManager.getDefaultDialerPackage());
         assertEquals(mTelecomManager.getDefaultDialerPackage(),
                 ShellIdentityUtils.invokeMethodWithShellPermissions(mTelecomManager,
-                        tm -> tm.getDefaultDialerPackage(Process.myUserHandle().getIdentifier())));
+                        tm -> tm.getDefaultDialerPackage(Process.myUserHandle())));
     }
 
     /** Default dialer should be the default package handling ACTION_DIAL. */
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java b/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java
index ab6937f..e1589b2 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/CellInfoTest.java
@@ -324,8 +324,9 @@
         assertTrue("Invalid timestamp in CellInfo: " + info.getTimeStamp(),
                 info.getTimeStamp() > 0 && info.getTimeStamp() < Long.MAX_VALUE);
 
-        assertTrue("Invalid timestamp in CellInfo: " + info.getTimestampNanos(),
-                info.getTimestampNanos() > 0 && info.getTimestampNanos() < Long.MAX_VALUE);
+        long curTime = SystemClock.elapsedRealtime();
+        assertTrue("Invalid timestamp in CellInfo: " + info.getTimestampMillis(),
+                info.getTimestampMillis() > 0 && info.getTimestampMillis() <= curTime);
 
         if (mRadioHalVersion >= RADIO_HAL_VERSION_1_2) {
             // In HAL 1.2 or greater, the connection status must be reported
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/NetworkRegistrationInfoTest.java b/tests/tests/telephony/current/src/android/telephony/cts/NetworkRegistrationInfoTest.java
index 427ede3..a5e75c5 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/NetworkRegistrationInfoTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/NetworkRegistrationInfoTest.java
@@ -15,17 +15,18 @@
  */
 package android.telephony.cts;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-
 import android.telephony.AccessNetworkConstants;
 import android.telephony.NetworkRegistrationInfo;
 import android.telephony.TelephonyManager;
 
-import java.util.Arrays;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
 
+import java.util.Arrays;
+
 public class NetworkRegistrationInfoTest {
 
     @Test
@@ -87,6 +88,30 @@
     }
 
     @Test
+    public void testGetEmergencyServices() {
+        NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
+                .setAvailableServices(Arrays.asList(NetworkRegistrationInfo.SERVICE_TYPE_EMERGENCY,
+                        NetworkRegistrationInfo.SERVICE_TYPE_VOICE))
+                .build();
+        assertEquals(Arrays.asList(NetworkRegistrationInfo.SERVICE_TYPE_EMERGENCY,
+                NetworkRegistrationInfo.SERVICE_TYPE_VOICE), nri.getAvailableServices());
+    }
+
+     /**
+     * Basic test to ensure {@link NetworkRegistrationInfo#isSearching()} does not throw any
+     * exception.
+     */
+    @Test
+    public void testNetworkRegistrationInfoIsSearching() {
+        NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
+                .setRegistrationState(
+                    NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_SEARCHING)
+                .build();
+        assertTrue(nri.isSearching());
+    }
+
+
+    @Test
     public void testGetDomain() {
         NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
                 .setDomain(NetworkRegistrationInfo.DOMAIN_CS)
diff --git a/tests/tests/telephony/current/src/android/telephony/cts/SignalStrengthTest.java b/tests/tests/telephony/current/src/android/telephony/cts/SignalStrengthTest.java
index 3077bbb..0849b64 100644
--- a/tests/tests/telephony/current/src/android/telephony/cts/SignalStrengthTest.java
+++ b/tests/tests/telephony/current/src/android/telephony/cts/SignalStrengthTest.java
@@ -38,13 +38,13 @@
 import android.telephony.TelephonyManager;
 import android.util.Log;
 
+import org.junit.Before;
+import org.junit.Test;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import org.junit.Before;
-import org.junit.Test;
-
 /**
  * Test SignalStrength to ensure that valid data is being reported and that invalid data is
  * not reported.
@@ -81,10 +81,10 @@
         SignalStrength ss = mTm.getSignalStrength();
         assertNotNull("TelephonyManager.getSignalStrength() returned NULL!", ss);
 
-        long curTime = SystemClock.elapsedRealtimeNanos();
-        assertTrue("Invalid timestamp in SignalStrength: " + ss.getTimestampNanos(),
-                ss.getTimestampNanos() > 0 && ss.getTimestampNanos() < curTime);
-        Log.d(TAG, "Timestamp of SignalStrength: " + Long.toString(ss.getTimestampNanos()));
+        long curTime = SystemClock.elapsedRealtime();
+        assertTrue("Invalid timestamp in SignalStrength: " + ss.getTimestampMillis(),
+                ss.getTimestampMillis() > 0 && ss.getTimestampMillis() <= curTime);
+        Log.d(TAG, "Timestamp of SignalStrength: " + Long.toString(ss.getTimestampMillis()));
 
         List<CellSignalStrength> signalStrengths = ss.getCellSignalStrengths();