| <?xml version="1.0" encoding="UTF-8"?> |
| <issues format="5" by="lint 4.2.0-alpha15" client="gradle" variant="debug" version="4.2.0-alpha15"> |
| |
| <issue |
| id="SdCardPath" |
| message="Do not hardcode "/sdcard/"; use `Environment.getExternalStorageDirectory().getPath()` instead" |
| errorLine1=" private static final String TEST_VID_STASH = "/sdcard";" |
| errorLine2=" ~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="56" |
| column="50"/> |
| </issue> |
| |
| <issue |
| id="ShowToast" |
| message="Toast created but not shown: did you forget to call `show()` ?" |
| errorLine1=" Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);" |
| errorLine2=" ~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSessionService.java" |
| line="123" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="UnsafeNewApiCall" |
| message="This call is to a method from API 23, the call containing class androidx.media2.integration.testapp.VideoSelectorActivity is not annotated with @RequiresApi(x) where x is at least 23. Either annotate the containing class with at least @RequiresApi(23) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(23)." |
| errorLine1=" if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="85" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="UnsafeNewApiCall" |
| message="This call is to a method from API 23, the call containing class androidx.media2.integration.testapp.VideoSelectorActivity is not annotated with @RequiresApi(x) where x is at least 23. Either annotate the containing class with at least @RequiresApi(23) or move the call to a static method in a wrapper class annotated with at least @RequiresApi(23)." |
| errorLine1=" requestPermissions(new String[] {Manifest.permission.READ_EXTERNAL_STORAGE}," |
| errorLine2=" ~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="89" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="RestrictedApi" |
| message="MediaItem.getMediaId can only be called from within the same library group (groupId=androidx.media2)" |
| errorLine1=" && TextUtils.equals(currentItem.getMediaId(), mUri.toString())" |
| errorLine2=" ~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoPlayerActivity.java" |
| line="328" |
| column="53"/> |
| </issue> |
| |
| <issue |
| id="AllowBackup" |
| message="Should explicitly set `android:allowBackup` to `true` or `false` (it's `true` by default, and that can have some security implications for the application's data)" |
| errorLine1=" <application android:label="Video View Test"" |
| errorLine2=" ~~~~~~~~~~~"> |
| <location |
| file="src/main/AndroidManifest.xml" |
| line="27" |
| column="6"/> |
| </issue> |
| |
| <issue |
| id="StaticFieldLeak" |
| message="This `AsyncTask` class should be static or leaks might occur (androidx.media2.integration.testapp.VideoSelectorActivity.VideoItemListTask)" |
| errorLine1=" private final class VideoItemListTask extends android.os.AsyncTask<Void, Void, VideoItemList> {" |
| errorLine2=" ~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="305" |
| column="25"/> |
| </issue> |
| |
| <issue |
| id="Overdraw" |
| message="Possible overdraw: Root element paints background `#3F51B5` with a theme that also paints a background (inferred theme is `@style/Theme_AppCompat`)" |
| errorLine1=" android:background="#3F51B5">" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_player.xml" |
| line="25" |
| column="5"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` method `showErrorDialogIfFailed` of class `VideoPlayerActivity` requires synthetic accessor" |
| errorLine1=" showErrorDialogIfFailed(controller.setMediaItem(mUri.toString())," |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoPlayerActivity.java" |
| line="334" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` method `showErrorDialogIfFailed` of class `VideoPlayerActivity` requires synthetic accessor" |
| errorLine1=" showErrorDialogIfFailed(controller.prepare(), "failed to prepare " + mUri);" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoPlayerActivity.java" |
| line="336" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` method `createLaunchIntent` of class `VideoSelectorActivity` requires synthetic accessor" |
| errorLine1=" Intent launch = createLaunchIntent(" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="99" |
| column="33"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` field `mUrlText` of class `VideoSelectorActivity` requires synthetic accessor" |
| errorLine1=" mUrlText.getText().toString());" |
| errorLine2=" ~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="101" |
| column="25"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` field `mSelectItems` of class `VideoSelectorActivity` requires synthetic accessor" |
| errorLine1=" if ((position >= 0) && (position < mSelectItems.getCount())) {" |
| errorLine2=" ~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="203" |
| column="48"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` field `mSelectItems` of class `VideoSelectorActivity` requires synthetic accessor" |
| errorLine1=" VideoItem item = mSelectItems.getItem(position);" |
| errorLine2=" ~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="204" |
| column="34"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` method `createLaunchIntent` of class `VideoSelectorActivity` requires synthetic accessor" |
| errorLine1=" Intent launch = createLaunchIntent(" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="208" |
| column="37"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` constructor of class `VideoItemList` requires synthetic accessor" |
| errorLine1=" VideoItemList retVal = new VideoItemList(p, is_root);" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="250" |
| column="32"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` method `createVil` of class `VideoSelectorActivity` requires synthetic accessor" |
| errorLine1=" return createVil(mPath);" |
| errorLine2=" ~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="314" |
| column="20"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` field `mSelectItems` of class `VideoSelectorActivity` requires synthetic accessor" |
| errorLine1=" mSelectItems = items;" |
| errorLine2=" ~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="320" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` field `mSelectItems` of class `VideoSelectorActivity` requires synthetic accessor" |
| errorLine1=" mSelectList.setAdapter(mSelectItems);" |
| errorLine2=" ~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="321" |
| column="40"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` field `mSelectList` of class `VideoSelectorActivity` requires synthetic accessor" |
| errorLine1=" mSelectList.setAdapter(mSelectItems);" |
| errorLine2=" ~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="321" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` field `mMediaPlayer` of class `VideoSessionService` requires synthetic accessor" |
| errorLine1=" mMediaPlayer.reset();" |
| errorLine2=" ~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSessionService.java" |
| line="144" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` field `mAudioAttributes` of class `VideoSessionService` requires synthetic accessor" |
| errorLine1=" showToastIfFailed(mMediaPlayer.setAudioAttributes(mAudioAttributes)," |
| errorLine2=" ~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSessionService.java" |
| line="145" |
| column="63"/> |
| </issue> |
| |
| <issue |
| id="SyntheticAccessor" |
| message="Access to `private` field `mMediaPlayer` of class `VideoSessionService` requires synthetic accessor" |
| errorLine1=" showToastIfFailed(mMediaPlayer.setAudioAttributes(mAudioAttributes)," |
| errorLine2=" ~~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSessionService.java" |
| line="145" |
| column="31"/> |
| </issue> |
| |
| <issue |
| id="MissingApplicationIcon" |
| message="Should explicitly set `android:icon`, there is no default" |
| errorLine1=" <application android:label="Video View Test"" |
| errorLine2=" ~~~~~~~~~~~"> |
| <location |
| file="src/main/AndroidManifest.xml" |
| line="27" |
| column="6"/> |
| </issue> |
| |
| <issue |
| id="TextFields" |
| message="This text field does not specify an `inputType`" |
| errorLine1=" <EditText" |
| errorLine2=" ~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_selector.xml" |
| line="54" |
| column="6"/> |
| </issue> |
| |
| <issue |
| id="ClickableViewAccessibility" |
| message="Custom view ``MyVideoView`` has `setOnTouchListener` called on it but does not override `performClick`" |
| errorLine1=" mVideoView.setOnTouchListener(new View.OnTouchListener() {" |
| errorLine2=" ^"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoPlayerActivity.java" |
| line="93" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="ClickableViewAccessibility" |
| message="`onTouch` should call `View#performClick` when a click is detected" |
| errorLine1=" public boolean onTouch(View v, MotionEvent event) {" |
| errorLine2=" ~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoPlayerActivity.java" |
| line="95" |
| column="28"/> |
| </issue> |
| |
| <issue |
| id="ClickableViewAccessibility" |
| message="`onTouch` should call `View#performClick` when a click is detected" |
| errorLine1=" public boolean onTouch(View v, MotionEvent event) {" |
| errorLine2=" ~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoPlayerActivity.java" |
| line="111" |
| column="28"/> |
| </issue> |
| |
| <issue |
| id="LabelFor" |
| message="Missing accessibility label: provide either a view with an `android:labelFor` that references this view or provide an `android:hint`" |
| errorLine1=" <EditText" |
| errorLine2=" ~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_selector.xml" |
| line="54" |
| column="6"/> |
| </issue> |
| |
| <issue |
| id="RtlHardcoded" |
| message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="40dp"` to better support right-to-left layouts" |
| errorLine1=" android:layout_marginLeft="40dp"" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_player.xml" |
| line="56" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="RtlHardcoded" |
| message="Consider replacing `android:layout_marginLeft` with `android:layout_marginStart="340dp"` to better support right-to-left layouts" |
| errorLine1=" android:layout_marginLeft="340dp"" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_player.xml" |
| line="68" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="RtlHardcoded" |
| message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" |
| errorLine1=" android:layout_alignParentRight="true"" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_selector.xml" |
| line="34" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="RtlHardcoded" |
| message="Consider replacing `android:layout_toLeftOf` with `android:layout_toStartOf="@id/looping_checkbox"` to better support right-to-left layouts" |
| errorLine1=" android:layout_toLeftOf="@id/looping_checkbox"" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_selector.xml" |
| line="43" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="RtlHardcoded" |
| message="Consider replacing `android:layout_alignParentRight` with `android:layout_alignParentEnd="true"` to better support right-to-left layouts" |
| errorLine1=" android:layout_alignParentRight="true"" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_selector.xml" |
| line="51" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="RtlHardcoded" |
| message="Consider replacing `android:layout_alignParentLeft` with `android:layout_alignParentStart="true"` to better support right-to-left layouts" |
| errorLine1=" android:layout_alignParentLeft="true"" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_selector.xml" |
| line="59" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="RtlHardcoded" |
| message="Consider replacing `android:layout_toLeftOf` with `android:layout_toStartOf="@id/play_button"` to better support right-to-left layouts" |
| errorLine1=" android:layout_toLeftOf="@id/play_button" />" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="src/main/res/layout/activity_video_selector.xml" |
| line="60" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="UnknownNullness" |
| message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations" |
| errorLine1=" public void onCreate(Bundle savedInstanceState) {" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoPlayerActivity.java" |
| line="84" |
| column="26"/> |
| </issue> |
| |
| <issue |
| id="UnknownNullness" |
| message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations" |
| errorLine1=" public boolean onTouchEvent(MotionEvent ev) {" |
| errorLine2=" ~~~~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoPlayerActivity.java" |
| line="171" |
| column="33"/> |
| </issue> |
| |
| <issue |
| id="UnknownNullness" |
| message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations" |
| errorLine1=" public void onCreate(Bundle savedInstanceState) {" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="70" |
| column="26"/> |
| </issue> |
| |
| <issue |
| id="UnknownNullness" |
| message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations" |
| errorLine1=" public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {" |
| errorLine2=" ~~~~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="121" |
| column="61"/> |
| </issue> |
| |
| <issue |
| id="UnknownNullness" |
| message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations" |
| errorLine1=" public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {" |
| errorLine2=" ~~~~~"> |
| <location |
| file="src/main/java/androidx/media2/integration/testapp/VideoSelectorActivity.java" |
| line="121" |
| column="83"/> |
| </issue> |
| |
| </issues> |