Merge Android 14 QPR3 to AOSP main

Bug: 346855327
Merged-In: I2f337eff0a553ab8dd9e69e8970248095a29a8e0
Change-Id: I18cb2b0740701b37c0f0f107f6ad8f7b2c469412
diff --git a/Android.bp b/Android.bp
index 463c5e2..50ed06f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -34,11 +34,12 @@
 version_name = "1.24-asop"
 version_code = "417000452"
 
-android_app {
-    name: "LiveTv",
-
+java_defaults {
+    name: "LiveTv_defaults",
     srcs: ["src/**/*.java"],
 
+    manifest: "AndroidManifest_common.xml",
+
     // TODO(b/122608868) turn proguard back on
     optimize: {
         enabled: false,
@@ -113,6 +114,21 @@
         "--extra-packages",
         "com.android.tv.common",
     ],
+}
+
+android_app {
+    name: "LiveTv",
+    defaults: ["LiveTv_defaults"],
+    additional_manifests: ["AndroidManifest_all_inputs.xml"],
+    lint: {
+        baseline_filename: "lint-baseline.xml",
+    },
+}
+
+android_app {
+    name: "LiveTvNonPassthrough",
+    defaults: ["LiveTv_defaults"],
+    additional_manifests: ["AndroidManifest_non_passthrough.xml"],
     lint: {
         baseline_filename: "lint-baseline.xml",
     },
diff --git a/AndroidManifest_all_inputs.xml b/AndroidManifest_all_inputs.xml
new file mode 100644
index 0000000..85f5b88
--- /dev/null
+++ b/AndroidManifest_all_inputs.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2015 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.
+-->
+<!-- This manifest is for LiveTv -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+     xmlns:tools="http://schemas.android.com/tools"
+     package="com.android.tv">
+
+    <application android:name="com.android.tv.app.LiveTvApplication"
+         android:allowBackup="true"
+         android:appComponentFactory="android.support.v4.app.CoreComponentFactory"
+         android:banner="@drawable/live_tv_banner"
+         android:icon="@drawable/ic_tv_app"
+         android:label="@string/app_name"
+         android:supportsRtl="true"
+         android:theme="@style/Theme.TV"
+         tools:replace="android:appComponentFactory">
+
+        <!-- providers are listed here to keep them separate from the internal versions -->
+        <provider android:name="com.android.tv.search.LocalSearchProvider"
+            android:authorities="com.android.tv.search"
+            android:enabled="true"
+            android:exported="true">
+            <meta-data android:name="SupportedSwitchActionType"
+                android:value="CHANNEL|TVINPUT"/>
+        </provider>
+
+        <activity android:name="com.android.tv.MainActivity"
+             android:configChanges="keyboard|keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
+             android:launchMode="singleTask"
+             android:resizeableActivity="true"
+             android:screenOrientation="landscape"
+             android:supportsPictureInPicture="true"
+             android:theme="@style/Theme.TV.MainActivity"
+             android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+                <data android:mimeType="vnd.android.cursor.item/program"/>
+                <data android:mimeType="vnd.android.cursor.dir/program"/>
+                <data android:mimeType="vnd.android.cursor.item/channel"/>
+                <data android:mimeType="vnd.android.cursor.dir/channel"/>
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.media.tv.action.SETUP_INPUTS"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH"/>
+            </intent-filter>
+            <meta-data android:name="supports_leanback"
+                 android:value="true"/>
+            <meta-data android:name="android.app.searchable"
+                 android:resource="@xml/searchable"/>
+        </activity>
+    </application>
+
+</manifest>
diff --git a/AndroidManifest.xml b/AndroidManifest_common.xml
similarity index 85%
rename from AndroidManifest.xml
rename to AndroidManifest_common.xml
index 5d9492a..24e05d0 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest_common.xml
@@ -87,14 +87,6 @@
          android:theme="@style/Theme.TV"
          tools:replace="android:appComponentFactory">
 
-        <!-- providers are listed here to keep them separate from the internal versions -->
-        <provider android:name="com.android.tv.search.LocalSearchProvider"
-             android:authorities="com.android.tv.search"
-             android:enabled="true"
-             android:exported="true">
-            <meta-data android:name="SupportedSwitchActionType"
-                 android:value="CHANNEL|TVINPUT"/>
-        </provider>
         <provider android:name="com.android.tv.common.CommonPreferenceProvider"
              android:authorities="com.android.tv.common.preferences"
              android:exported="false"
@@ -108,10 +100,9 @@
                 <action android:name="android.intent.action.GLOBAL_BUTTON"/>
             </intent-filter>
 
-            <!--
-                             Not directly related to GlobalKeyReceiver but needed to be able to provide our
-                            content rating definitions to the system service.
-                            -->
+            <!-- Not directly related to GlobalKeyReceiver but needed to be able to provide our
+                 content rating definitions to the system service.
+            -->
             <intent-filter>
                 <action android:name="android.media.tv.action.QUERY_CONTENT_RATING_SYSTEMS"/>
             </intent-filter>
@@ -131,38 +122,6 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
-        <activity android:name="com.android.tv.MainActivity"
-             android:configChanges="keyboard|keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
-             android:launchMode="singleTask"
-             android:resizeableActivity="true"
-             android:screenOrientation="landscape"
-             android:supportsPictureInPicture="true"
-             android:theme="@style/Theme.TV.MainActivity"
-             android:exported="true">
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW"/>
-
-                <category android:name="android.intent.category.DEFAULT"/>
-
-                <data android:mimeType="vnd.android.cursor.item/channel"/>
-                <data android:mimeType="vnd.android.cursor.dir/channel"/>
-                <data android:mimeType="vnd.android.cursor.item/program"/>
-                <data android:mimeType="vnd.android.cursor.dir/program"/>
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.media.tv.action.SETUP_INPUTS"/>
-
-                <category android:name="android.intent.category.DEFAULT"/>
-            </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH"/>
-            </intent-filter>
-
-            <meta-data android:name="supports_leanback"
-                 android:value="true"/>
-            <meta-data android:name="android.app.searchable"
-                 android:resource="@xml/searchable"/>
-        </activity>
         <activity android:name="com.android.tv.LauncherActivity"
              android:exported="false"
              android:configChanges="keyboard|keyboardHidden"
diff --git a/AndroidManifest_non_passthrough.xml b/AndroidManifest_non_passthrough.xml
new file mode 100644
index 0000000..c4633ed
--- /dev/null
+++ b/AndroidManifest_non_passthrough.xml
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2015 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.
+-->
+<!-- This manifest is for LiveTv -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+     xmlns:tools="http://schemas.android.com/tools"
+     package="com.android.tv">
+
+    <application android:name="com.android.tv.app.LiveTvApplication"
+         android:allowBackup="true"
+         android:appComponentFactory="android.support.v4.app.CoreComponentFactory"
+         android:banner="@drawable/live_tv_banner"
+         android:icon="@drawable/ic_tv_app"
+         android:label="@string/app_name"
+         android:supportsRtl="true"
+         android:theme="@style/Theme.TV"
+         tools:replace="android:appComponentFactory">
+
+        <!-- providers are listed here to keep them separate from the internal versions -->
+        <provider android:name="com.android.tv.search.LocalSearchProvider"
+            android:authorities="com.android.tv.search"
+            android:enabled="true"
+            android:exported="true">
+            <meta-data android:name="SupportedSwitchActionType"
+                android:value="CHANNEL"/>
+        </provider>
+
+        <activity android:name="com.android.tv.MainActivity"
+             android:configChanges="keyboard|keyboardHidden|screenSize|smallestScreenSize|screenLayout|orientation"
+             android:launchMode="singleTask"
+             android:resizeableActivity="true"
+             android:screenOrientation="landscape"
+             android:supportsPictureInPicture="true"
+             android:theme="@style/Theme.TV.MainActivity"
+             android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+                <data android:mimeType="vnd.android.cursor.item/program"
+                      android:scheme="content"
+                      android:host="android.media.tv"
+                      android:pathPrefix="/program" />
+                <data android:mimeType="vnd.android.cursor.dir/program"
+                     android:scheme="content"
+                      android:host="android.media.tv"
+                      android:pathPrefix="/program" />
+                <data android:mimeType="vnd.android.cursor.item/channel"
+                      android:scheme="content"
+                      android:host="android.media.tv"
+                      android:pathPrefix="/channel" />
+                 <data android:mimeType="vnd.android.cursor.dir/channel"
+                      android:scheme="content"
+                      android:host="android.media.tv"
+                      android:pathPrefix="/channel" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.media.tv.action.SETUP_INPUTS"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH"/>
+            </intent-filter>
+            <meta-data android:name="supports_leanback"
+                 android:value="true"/>
+            <meta-data android:name="android.app.searchable"
+                 android:resource="@xml/searchable"/>
+        </activity>
+    </application>
+
+</manifest>
diff --git a/common/lint-baseline.xml b/common/lint-baseline.xml
index b6f9dfc..10fd161 100644
--- a/common/lint-baseline.xml
+++ b/common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+<issues format="6" by="lint 8.4.0-alpha01" type="baseline" client="" dependencies="true" name="" variant="all" version="8.4.0-alpha01">
 
     <issue
         id="NewApi"
@@ -12,4 +12,4 @@
             column="30"/>
     </issue>
 
-</issues>
+</issues>
\ No newline at end of file
diff --git a/lint-baseline.xml b/lint-baseline.xml
index 29aff21..6fdd609 100644
--- a/lint-baseline.xml
+++ b/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.1.0" client="cli" variant="all" version="4.1.0">
+<issues format="6" by="lint 8.4.0-alpha01" type="baseline" client="" dependencies="true" name="" variant="all" version="8.4.0-alpha01">
 
     <issue
         id="NewApi"
@@ -25,6 +25,28 @@
 
     <issue
         id="NewApi"
+        message="Call requires API level 26 (current min is 23): `android.content.Context#registerReceiver`"
+        errorLine1="        mContext.registerReceiver(mReceiver, new IntentFilter(AudioManager.ACTION_HDMI_AUDIO_PLUG),"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/TV/src/com/android/tv/receiver/AudioCapabilitiesReceiver.java"
+            line="70"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `updateAndStartServiceIfNeeded`"
+        errorLine1="            scheduler.updateAndStartServiceIfNeeded();"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/TV/src/com/android/tv/receiver/BootCompletedReceiver.java"
+            line="95"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
         message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputInfo#canRecord`"
         errorLine1="                if (info.canRecord()) {"
         errorLine2="                         ~~~~~~~~~">
@@ -80,6 +102,39 @@
 
     <issue
         id="NewApi"
+        message="Call requires API level 26 (current min is 23): `android.content.ContextWrapper#registerReceiver`"
+        errorLine1="        registerReceiver(mBroadcastReceiver, SYSTEM_INTENT_FILTER, Context.RECEIVER_EXPORTED);"
+        errorLine2="        ~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/TV/src/com/android/tv/MainActivity.java"
+            line="874"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Method reference requires API level 24 (current min is 23): `MainActivity.super::enterPictureInPictureMode`"
+        errorLine1="            mHandler.post(MainActivity.super::enterPictureInPictureMode);"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/TV/src/com/android/tv/MainActivity.java"
+            line="2462"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputInfo#getTunerCount`"
+        errorLine1="                                input.getTunerCount(),"
+        errorLine2="                                      ~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/TV/src/com/android/tv/ui/TunableTvView.java"
+            line="1227"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
         message="Call requires API level 24 (current min is 23): `createScheduler`"
         errorLine1="                mRecordingScheduler = RecordingScheduler.createScheduler(this);"
         errorLine2="                                                         ~~~~~~~~~~~~~~~">
@@ -100,28 +155,4 @@
             column="34"/>
     </issue>
 
-    <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputInfo#getTunerCount`">
-        <location
-            file="packages/apps/TV/src/com/android/tv/ui/TunableTvView.java"
-            line="1205"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 24 (current min is 23): `updateAndStartServiceIfNeeded`">
-        <location
-            file="packages/apps/TV/src/com/android/tv/receiver/BootCompletedReceiver.java"
-            line="95"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Method reference requires API level 24 (current min is 23): `MainActivity.super::enterPictureInPictureMode`">
-        <location
-            file="packages/apps/TV/src/com/android/tv/MainActivity.java"
-            line="2435"/>
-    </issue>
-
 </issues>
\ No newline at end of file
diff --git a/src/com/android/tv/features/TvFeatures.java b/src/com/android/tv/features/TvFeatures.java
index c4e388a..75bfabe 100644
--- a/src/com/android/tv/features/TvFeatures.java
+++ b/src/com/android/tv/features/TvFeatures.java
@@ -28,8 +28,7 @@
 import android.content.pm.PackageManager;
 import android.os.Build;
 
-import androidx.core.R;
-
+import com.android.tv.R;
 import com.android.tv.common.feature.CommonFeatures;
 import com.android.tv.common.feature.Feature;
 import com.android.tv.common.feature.FeatureUtils;
diff --git a/src/com/android/tv/ui/KeypadChannelSwitchView.java b/src/com/android/tv/ui/KeypadChannelSwitchView.java
index a26175a..262c350 100644
--- a/src/com/android/tv/ui/KeypadChannelSwitchView.java
+++ b/src/com/android/tv/ui/KeypadChannelSwitchView.java
@@ -35,6 +35,7 @@
 import android.widget.LinearLayout;
 import android.widget.ListView;
 import android.widget.TextView;
+
 import com.android.tv.MainActivity;
 import com.android.tv.R;
 import com.android.tv.TvSingletons;
@@ -43,6 +44,7 @@
 import com.android.tv.common.util.DurationTimer;
 import com.android.tv.data.ChannelNumber;
 import com.android.tv.data.api.Channel;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -50,7 +52,7 @@
         implements TvTransitionManager.TransitionLayout {
     private static final String TAG = "KeypadChannelSwitchView";
 
-    private static final int MAX_CHANNEL_NUMBER_DIGIT = 4;
+    private static final int MAX_CHANNEL_NUMBER_DIGIT = 5;
     private static final int MAX_MINOR_CHANNEL_NUMBER_DIGIT = 3;
     private static final int MAX_CHANNEL_ITEM = 8;
     private static final String CHANNEL_DELIMITERS_REGEX = "[-\\.\\s]";
@@ -248,13 +250,26 @@
     public void onNumberKeyUp(int num) {
         // Reset typed channel number in some cases.
         if (mTypedChannelNumber.majorNumber == null) {
+            Log.i(TAG, "Channel number reset because majorNumber is null");
             mTypedChannelNumber.reset();
         } else if (!mTypedChannelNumber.hasDelimiter
                 && mTypedChannelNumber.majorNumber.length() >= MAX_CHANNEL_NUMBER_DIGIT) {
+            Log.i(
+                    TAG,
+                    "Channel number reset because majorNumber.length = "
+                            + mTypedChannelNumber.majorNumber.length()
+                            + " >= MAX_CHANNEL_NUMBER_DIGIT = "
+                            + MAX_CHANNEL_NUMBER_DIGIT);
             mTypedChannelNumber.reset();
         } else if (mTypedChannelNumber.hasDelimiter
                 && mTypedChannelNumber.minorNumber != null
                 && mTypedChannelNumber.minorNumber.length() >= MAX_MINOR_CHANNEL_NUMBER_DIGIT) {
+            Log.i(
+                    TAG,
+                    "Channel number reset because minorNumber.length = "
+                            + mTypedChannelNumber.minorNumber.length()
+                            + " >= MAX_MINOR_CHANNEL_NUMBER_DIGIT = "
+                            + MAX_MINOR_CHANNEL_NUMBER_DIGIT);
             mTypedChannelNumber.reset();
         }
 
diff --git a/tuner/lint-baseline.xml b/tuner/lint-baseline.xml
index f359c6b..807d727 100644
--- a/tuner/lint-baseline.xml
+++ b/tuner/lint-baseline.xml
@@ -1,188 +1,257 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 7.2.0-dev" client="cli" variant="all" version="4.1.0">
+<issues format="6" by="lint 8.4.0-alpha01" type="baseline" client="" dependencies="true" name="" variant="all" version="8.4.0-alpha01">
 
     <issue
         id="NewApi"
-        message="Call requires API level 26 (current min is 23): `android.app.NotificationManager#createNotificationChannel`">
+        message="Call requires API level 26 (current min is 23): `android.app.NotificationManager#createNotificationChannel`"
+        errorLine1="        notificationManager.createNotificationChannel("
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/setup/BaseTunerSetupActivity.java"
-            line="399"/>
+            line="399"
+            column="29"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 26 (current min is 23): `new android.app.NotificationChannel`">
+        message="Call requires API level 26 (current min is 23): `new android.app.NotificationChannel`"
+        errorLine1="                new NotificationChannel("
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/setup/BaseTunerSetupActivity.java"
-            line="400"/>
+            line="400"
+            column="17"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 26 (current min is 23): `new android.app.Notification.Builder`">
+        message="Call requires API level 26 (current min is 23): `new android.app.Notification.Builder`"
+        errorLine1="                new Notification.Builder(context, TUNER_SET_UP_NOTIFICATION_CHANNEL_ID)"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/setup/BaseTunerSetupActivity.java"
-            line="406"/>
+            line="406"
+            column="17"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `android.app.job.JobScheduler#getPendingJob`">
+        message="Call requires API level 26 (current min is 23): `new android.app.Notification.TvExtender`"
+        errorLine1="                        .extend(new Notification.TvExtender())"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/TV/tuner/src/com/android/tv/tuner/setup/BaseTunerSetupActivity.java"
+            line="416"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `TvExtender` to `Extender` requires API level 26 (current min is 23)"
+        errorLine1="                        .extend(new Notification.TvExtender())"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="packages/apps/TV/tuner/src/com/android/tv/tuner/setup/BaseTunerSetupActivity.java"
+            line="416"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `android.app.job.JobScheduler#getPendingJob`"
+        errorLine1="            JobInfo pendingJob = jobScheduler.getPendingJob(DVR_STORAGE_CLEANUP_JOB_ID);"
+        errorLine2="                                              ~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/BaseTunerTvInputService.java"
-            line="94"/>
+            line="94"
+            column="47"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Extending RecordingSessionCompat requires API level 24 (current min is 23): `RecordingSessionCompat`">
+        message="Extending RecordingSessionCompat requires API level 24 (current min is 23): `RecordingSessionCompat`"
+        errorLine1="public class TunerRecordingSession extends RecordingSessionCompat {"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSession.java"
-            line="39"/>
+            line="39"
+            column="44"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `RecordingSessionCompat`">
+        message="Call requires API level 24 (current min is 23): `RecordingSessionCompat`"
+        errorLine1="        super(context);"
+        errorLine2="        ~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSession.java"
-            line="54"/>
+            line="54"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyTuned`">
+        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyTuned`"
+        errorLine1="        notifyTuned(channelUri);"
+        errorLine2="        ~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSession.java"
-            line="107"/>
+            line="107"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `notifyRecordingStarted`">
+        message="Call requires API level 24 (current min is 23): `notifyRecordingStarted`"
+        errorLine1="        notifyRecordingStarted(recUri);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSession.java"
-            line="116"/>
+            line="116"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyRecordingStopped`">
+        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyRecordingStopped`"
+        errorLine1="        notifyRecordingStopped(recordedProgramUri);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSession.java"
-            line="125"/>
+            line="125"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyError`">
+        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyError`"
+        errorLine1="        notifyError(reason);"
+        errorLine2="        ~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSession.java"
-            line="131"/>
+            line="131"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Extending RecordingSessionCompat requires API level 24 (current min is 23): `RecordingSessionCompat`">
+        message="Extending RecordingSessionCompat requires API level 24 (current min is 23): `RecordingSessionCompat`"
+        errorLine1="public class TunerRecordingSessionExoV2 extends RecordingSessionCompat {"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionExoV2.java"
-            line="39"/>
+            line="39"
+            column="49"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `RecordingSessionCompat`">
+        message="Call requires API level 24 (current min is 23): `RecordingSessionCompat`"
+        errorLine1="        super(context);"
+        errorLine2="        ~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionExoV2.java"
-            line="54"/>
+            line="54"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyTuned`">
+        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyTuned`"
+        errorLine1="        notifyTuned(channelUri);"
+        errorLine2="        ~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionExoV2.java"
-            line="107"/>
+            line="107"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `notifyRecordingStarted`">
+        message="Call requires API level 24 (current min is 23): `notifyRecordingStarted`"
+        errorLine1="        notifyRecordingStarted(recUri);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionExoV2.java"
-            line="116"/>
+            line="116"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyRecordingStopped`">
+        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyRecordingStopped`"
+        errorLine1="        notifyRecordingStopped(recordedProgramUri);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionExoV2.java"
-            line="125"/>
+            line="125"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyError`">
+        message="Call requires API level 24 (current min is 23): `android.media.tv.TvInputService.RecordingSession#notifyError`"
+        errorLine1="        notifyError(reason);"
+        errorLine2="        ~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionExoV2.java"
-            line="131"/>
+            line="131"
+            column="9"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`">
+        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`"
+        errorLine1="                .insert(TvContract.RecordedPrograms.CONTENT_URI, values);"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionWorker.java"
-            line="616"/>
+            line="616"
+            column="25"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`">
+        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`"
+        errorLine1="        Uri uri = TvContract.RecordedPrograms.CONTENT_URI;"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionWorker.java"
-            line="689"/>
+            line="689"
+            column="19"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`">
+        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`"
+        errorLine1="                .insert(TvContract.RecordedPrograms.CONTENT_URI, values);"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionWorkerExoV2.java"
-            line="619"/>
+            line="619"
+            column="25"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`">
+        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`"
+        errorLine1="        Uri uri = TvContract.RecordedPrograms.CONTENT_URI;"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionWorkerExoV2.java"
-            line="692"/>
+            line="692"
+            column="19"/>
     </issue>
 
     <issue
         id="NewApi"
-        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`">
+        message="Field requires API level 24 (current min is 23): `android.media.tv.TvContract.RecordedPrograms#CONTENT_URI`"
+        errorLine1="                            TvContract.RecordedPrograms.CONTENT_URI,"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="packages/apps/TV/tuner/src/com/android/tv/tuner/tvinput/TunerStorageCleanUpService.java"
-            line="101"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Call requires API level 26 (current min is 23): `new android.app.Notification.TvExtender`">
-        <location
-            file="packages/apps/TV/tuner/src/com/android/tv/tuner/setup/BaseTunerSetupActivity.java"
-            line="416"/>
-    </issue>
-
-    <issue
-        id="NewApi"
-        message="Cast from `TvExtender` to `Extender` requires API level 26 (current min is 23)">
-        <location
-            file="packages/apps/TV/tuner/src/com/android/tv/tuner/setup/BaseTunerSetupActivity.java"
-            line="416"/>
+            line="101"
+            column="29"/>
     </issue>
 
 </issues>
\ No newline at end of file