diff --git a/AccessibilityDemo/build.gradle b/AccessibilityDemo/build.gradle
index 7c351bbcd..2a6ad0467 100644
--- a/AccessibilityDemo/build.gradle
+++ b/AccessibilityDemo/build.gradle
@@ -3,7 +3,7 @@
buildscript {
repositories {
google()
- jcenter()
+ mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.3'
@@ -15,7 +15,7 @@ buildscript {
allprojects {
repositories {
google()
- jcenter()
+ mavenCentral()
}
}
diff --git a/ClassicsKotlin/build.gradle b/ClassicsKotlin/build.gradle
index 5d63f1264..04df9aa3e 100755
--- a/ClassicsKotlin/build.gradle
+++ b/ClassicsKotlin/build.gradle
@@ -21,7 +21,7 @@ buildscript {
repositories {
google()
- jcenter()
+ mavenCentral()
}
dependencies {
@@ -37,7 +37,7 @@ buildscript {
allprojects {
repositories {
google()
- jcenter()
+ mavenCentral()
}
}
diff --git a/Leanback/README.md b/Leanback/README.md
deleted file mode 100644
index 60beea6c8..000000000
--- a/Leanback/README.md
+++ /dev/null
@@ -1,110 +0,0 @@
-# Android TV Leanback Support Library sample - Videos by Google
-
-This sample is a Videos By Google app, designed to run on an Android TV device, which demonstrates how to use the Leanback Support library which enables you to easily develop beautiful Android TV apps with a user-friendly UI that complies with the UX guidelines of Android TV.
-
-
-## Getting Started
-
-- Clone this repo:
-
-```sh
-git clone https://github.com/android/tv-samples.git
-```
-
-- Open the Leanback project within tv-samples in [Android Studio][studio].
-- Compile and deploy to your Android TV emulator or device (such as an ADT-2 or ADT-3).
-
-Need more information about getting started with Android TV? Check the [official getting started guide][getting-started].
-
-## Explore the sample
-
-- Choose a layout
- - Videos grouped by [category][mainfragment] (See BrowseFragment in [screenshots][screenshots])
- - Freeform [vertical grid][verticalgridfragment] of videos (See Vertical Grid Fragment in [screenshots][screenshots])
-- Customize video cards with a [Card Presenter][cardpresenter] (See Card Views in [screenshots][screenshots])
-- Display in-depth [details][detailsfragment] about your video
-- Play a video
- - [Playback with ExoPlayer2][playbackfragment]
- - [Add extra buttons to control playback][videoplayerglue]
-- [Display an error][errorfragment]
-- Make your app globally searchable
- - Review searchable training [document][searchable]
- - Creating a [content provider][videoprovider]
- - Defining [searchable.xml][searchable.xml]
- - Receive search intent in [manifest][manifestsearch]
-- [Search][searchfragment] within your app
-- [Onboard][onboardingfragment] new users (explain new features)
-- Customize [preference and settings][settingsfragment]
-- Add a wizard with [guided steps][guidedstep]
-
-[screenshots]: https://github.com/googlesamples/androidtv-Leanback#screenshots
-
-[manifestsearch]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/AndroidManifest.xml#L79
-
-[searchfragment]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/ui/SearchFragment.java
-
-[cardpresenter]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/presenter/CardPresenter.java
-
-[searchable.xml]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/res/xml/searchable.xml
-
-[searchable]: https://developer.android.com/training/tv/discovery/searchable.html
-
-[videoprovider]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/data/VideoProvider.java
-
-[errorfragment]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/ui/BrowseErrorFragment.java
-
-[mainfragment]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/ui/MainFragment.java
-
-[detailsfragment]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/ui/VideoDetailsFragment.java
-
-[verticalgridfragment]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/ui/VerticalGridFragment.java
-
-[guidedstep]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/ui/GuidedStepActivity.java
-
-[onboardingfragment]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/ui/OnboardingFragment.java
-
-[settingsfragment]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/ui/SettingsFragment.java
-
-[videoplayerglue]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/player/VideoPlayerGlue.java
-
-[playbackfragment]: https://github.com/googlesamples/androidtv-Leanback/blob/master/app/src/main/java/com/example/android/tvleanback/ui/PlaybackFragment.java
-
-## Additonal Resouroces
-
-- [Android TV Introduction](http://www.android.com/tv/)
-- [Android TV Developer Documentation](http://developer.android.com/tv)
-- [Android TV Apps in Google Play Store][store-apps]
-
-
-## Screenshots
-
-[](https://raw.githubusercontent.com/googlesamples/androidtv-Leanback/master/screenshots/atv-leanback-all.png)
-
-## Support
-
-If you need additional help, our community might be able to help.
-
-- Stack Overflow: [http://stackoverflow.com/questions/tagged/android-tv](http://stackoverflow.com/questions/tagged/android-tv)
-
-## Dependencies
-
-If you use Android Studio as recommended, the following dependencies will **automatically** be installed by Gradle.
-
-- Android SDK v7 appcompat library
-- Android SDK v17 leanback support library
-- Android SDK v7 recyclerview library
-
-## Contributing
-
-We love contributions! :smile: Please follow the steps in the [CONTRIBUTING guide][contributing] to get started. If you found a bug, please file it [here][bugs].
-
-## License
-
-See the [LICENSE file][license] for details.
-
-[store-apps]: https://play.google.com/store/apps/collection/promotion_3000e26_androidtv_apps_all
-[studio]: https://developer.android.com/tools/studio/index.html
-[getting-started]: https://developer.android.com/training/tv/start/start.html
-[bugs]: https://github.com/googlesamples/androidtv-Leanback/issues/new
-[contributing]: ../CONTRIBUTING.md
-[license]: ../LICENSE
diff --git a/Leanback/app/build.gradle b/Leanback/app/build.gradle
deleted file mode 100644
index 0a6c1cb0b..000000000
--- a/Leanback/app/build.gradle
+++ /dev/null
@@ -1,44 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- compileSdkVersion 28
- defaultConfig {
- applicationId "com.example.android.tvleanback"
- minSdkVersion 21
- targetSdkVersion 28
- versionCode 2
- versionName "1.3"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
-}
-
-dependencies {
- implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation 'androidx.recyclerview:recyclerview:1.0.0'
- implementation 'androidx.leanback:leanback:1.0.0'
- implementation 'androidx.recommendation:recommendation:1.0.0'
- implementation 'androidx.leanback:leanback-preference:1.0.0'
- implementation 'androidx.annotation:annotation:1.0.1'
-
- implementation 'com.github.bumptech.glide:glide:4.3.1'
-
- implementation 'com.google.android.exoplayer:exoplayer:2.6.1'
- implementation 'com.google.android.exoplayer:extension-leanback:2.6.1'
-
- testImplementation 'junit:junit:4.12'
- testImplementation 'org.robolectric:robolectric:3.8'
- androidTestImplementation "androidx.test.ext:junit:1.1.0"
- androidTestImplementation "androidx.test.ext:truth:1.1.0"
- androidTestImplementation 'androidx.test:runner:1.1.1'
- androidTestImplementation 'androidx.test:rules:1.1.1'
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/player/VideoPlayerGlue.java b/Leanback/app/src/main/java/com/example/android/tvleanback/player/VideoPlayerGlue.java
deleted file mode 100644
index 1f774c30b..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/player/VideoPlayerGlue.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2017 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 com.example.android.tvleanback.player;
-
-import android.content.Context;
-import androidx.leanback.media.PlaybackTransportControlGlue;
-import androidx.leanback.widget.Action;
-import androidx.leanback.widget.ArrayObjectAdapter;
-import androidx.leanback.widget.PlaybackControlsRow;
-
-import com.google.android.exoplayer2.ext.leanback.LeanbackPlayerAdapter;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * Manages customizing the actions in the {@link PlaybackControlsRow}. Adds and manages the
- * following actions to the primary and secondary controls:
- *
- *
- * - {@link androidx.leanback.widget.PlaybackControlsRow.RepeatAction}
- *
- {@link androidx.leanback.widget.PlaybackControlsRow.ThumbsDownAction}
- *
- {@link androidx.leanback.widget.PlaybackControlsRow.ThumbsUpAction}
- *
- {@link androidx.leanback.widget.PlaybackControlsRow.SkipPreviousAction}
- *
- {@link androidx.leanback.widget.PlaybackControlsRow.SkipNextAction}
- *
- {@link androidx.leanback.widget.PlaybackControlsRow.FastForwardAction}
- *
- {@link androidx.leanback.widget.PlaybackControlsRow.RewindAction}
- *
- *
- * Note that the superclass, {@link PlaybackTransportControlGlue}, manages the playback controls
- * row.
- */
-public class VideoPlayerGlue extends PlaybackTransportControlGlue {
-
- private static final long TEN_SECONDS = TimeUnit.SECONDS.toMillis(10);
-
- /** Listens for when skip to next and previous actions have been dispatched. */
- public interface OnActionClickedListener {
-
- /** Skip to the previous item in the queue. */
- void onPrevious();
-
- /** Skip to the next item in the queue. */
- void onNext();
- }
-
- private final OnActionClickedListener mActionListener;
-
- private PlaybackControlsRow.RepeatAction mRepeatAction;
- private PlaybackControlsRow.ThumbsUpAction mThumbsUpAction;
- private PlaybackControlsRow.ThumbsDownAction mThumbsDownAction;
- private PlaybackControlsRow.SkipPreviousAction mSkipPreviousAction;
- private PlaybackControlsRow.SkipNextAction mSkipNextAction;
- private PlaybackControlsRow.FastForwardAction mFastForwardAction;
- private PlaybackControlsRow.RewindAction mRewindAction;
-
- public VideoPlayerGlue(
- Context context,
- LeanbackPlayerAdapter playerAdapter,
- OnActionClickedListener actionListener) {
- super(context, playerAdapter);
-
- mActionListener = actionListener;
-
- mSkipPreviousAction = new PlaybackControlsRow.SkipPreviousAction(context);
- mSkipNextAction = new PlaybackControlsRow.SkipNextAction(context);
- mFastForwardAction = new PlaybackControlsRow.FastForwardAction(context);
- mRewindAction = new PlaybackControlsRow.RewindAction(context);
-
- mThumbsUpAction = new PlaybackControlsRow.ThumbsUpAction(context);
- mThumbsUpAction.setIndex(PlaybackControlsRow.ThumbsUpAction.INDEX_OUTLINE);
- mThumbsDownAction = new PlaybackControlsRow.ThumbsDownAction(context);
- mThumbsDownAction.setIndex(PlaybackControlsRow.ThumbsDownAction.INDEX_OUTLINE);
- mRepeatAction = new PlaybackControlsRow.RepeatAction(context);
- }
-
- @Override
- protected void onCreatePrimaryActions(ArrayObjectAdapter adapter) {
- // Order matters, super.onCreatePrimaryActions() will create the play / pause action.
- // Will display as follows:
- // play/pause, previous, rewind, fast forward, next
- // > /|| |< << >> >|
- super.onCreatePrimaryActions(adapter);
- adapter.add(mSkipPreviousAction);
- adapter.add(mRewindAction);
- adapter.add(mFastForwardAction);
- adapter.add(mSkipNextAction);
- }
-
- @Override
- protected void onCreateSecondaryActions(ArrayObjectAdapter adapter) {
- super.onCreateSecondaryActions(adapter);
- adapter.add(mThumbsDownAction);
- adapter.add(mThumbsUpAction);
- adapter.add(mRepeatAction);
- }
-
- @Override
- public void onActionClicked(Action action) {
- if (shouldDispatchAction(action)) {
- dispatchAction(action);
- return;
- }
- // Super class handles play/pause and delegates to abstract methods next()/previous().
- super.onActionClicked(action);
- }
-
- // Should dispatch actions that the super class does not supply callbacks for.
- private boolean shouldDispatchAction(Action action) {
- return action == mRewindAction
- || action == mFastForwardAction
- || action == mThumbsDownAction
- || action == mThumbsUpAction
- || action == mRepeatAction;
- }
-
- private void dispatchAction(Action action) {
- // Primary actions are handled manually.
- if (action == mRewindAction) {
- rewind();
- } else if (action == mFastForwardAction) {
- fastForward();
- } else if (action instanceof PlaybackControlsRow.MultiAction) {
- PlaybackControlsRow.MultiAction multiAction = (PlaybackControlsRow.MultiAction) action;
- multiAction.nextIndex();
- // Notify adapter of action changes to handle secondary actions, such as, thumbs up/down
- // and repeat.
- notifyActionChanged(
- multiAction,
- (ArrayObjectAdapter) getControlsRow().getSecondaryActionsAdapter());
- }
- }
-
- private void notifyActionChanged(
- PlaybackControlsRow.MultiAction action, ArrayObjectAdapter adapter) {
- if (adapter != null) {
- int index = adapter.indexOf(action);
- if (index >= 0) {
- adapter.notifyArrayItemRangeChanged(index, 1);
- }
- }
- }
-
- @Override
- public void next() {
- mActionListener.onNext();
- }
-
- @Override
- public void previous() {
- mActionListener.onPrevious();
- }
-
- /** Skips backwards 10 seconds. */
- public void rewind() {
- long newPosition = getCurrentPosition() - TEN_SECONDS;
- newPosition = (newPosition < 0) ? 0 : newPosition;
- getPlayerAdapter().seekTo(newPosition);
- }
-
- /** Skips forward 10 seconds. */
- public void fastForward() {
- if (getDuration() > -1) {
- long newPosition = getCurrentPosition() + TEN_SECONDS;
- newPosition = (newPosition > getDuration()) ? getDuration() : newPosition;
- getPlayerAdapter().seekTo(newPosition);
- }
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/CardPresenter.java b/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/CardPresenter.java
deleted file mode 100644
index 72984c31a..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/CardPresenter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.
- */
-
-package com.example.android.tvleanback.presenter;
-
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import androidx.leanback.widget.ImageCardView;
-import androidx.leanback.widget.Presenter;
-import androidx.core.content.ContextCompat;
-import android.view.ViewGroup;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.RequestOptions;
-import com.example.android.tvleanback.R;
-import com.example.android.tvleanback.model.Video;
-
-/*
- * A CardPresenter is used to generate Views and bind Objects to them on demand.
- * It contains an Image CardView
- */
-public class CardPresenter extends Presenter {
- private int mSelectedBackgroundColor = -1;
- private int mDefaultBackgroundColor = -1;
- private Drawable mDefaultCardImage;
-
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent) {
- mDefaultBackgroundColor =
- ContextCompat.getColor(parent.getContext(), R.color.default_background);
- mSelectedBackgroundColor =
- ContextCompat.getColor(parent.getContext(), R.color.selected_background);
- mDefaultCardImage = parent.getResources().getDrawable(R.drawable.movie, null);
-
- ImageCardView cardView = new ImageCardView(parent.getContext()) {
- @Override
- public void setSelected(boolean selected) {
- updateCardBackgroundColor(this, selected);
- super.setSelected(selected);
- }
- };
-
- cardView.setFocusable(true);
- cardView.setFocusableInTouchMode(true);
- updateCardBackgroundColor(cardView, false);
- return new ViewHolder(cardView);
- }
-
- private void updateCardBackgroundColor(ImageCardView view, boolean selected) {
- int color = selected ? mSelectedBackgroundColor : mDefaultBackgroundColor;
-
- // Both background colors should be set because the view's
- // background is temporarily visible during animations.
- view.setBackgroundColor(color);
- view.findViewById(R.id.info_field).setBackgroundColor(color);
- }
-
- @Override
- public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
- Video video = (Video) item;
-
- ImageCardView cardView = (ImageCardView) viewHolder.view;
- cardView.setTitleText(video.title);
- cardView.setContentText(video.studio);
-
- if (video.cardImageUrl != null) {
- // Set card size from dimension resources.
- Resources res = cardView.getResources();
- int width = res.getDimensionPixelSize(R.dimen.card_width);
- int height = res.getDimensionPixelSize(R.dimen.card_height);
- cardView.setMainImageDimensions(width, height);
-
- Glide.with(cardView.getContext())
- .load(video.cardImageUrl)
- .apply(RequestOptions.errorOf(mDefaultCardImage))
- .into(cardView.getMainImageView());
- }
- }
-
- @Override
- public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
- ImageCardView cardView = (ImageCardView) viewHolder.view;
-
- // Remove references to images so that the garbage collector can free up memory.
- cardView.setBadgeImage(null);
- cardView.setMainImage(null);
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/DetailsDescriptionPresenter.java b/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/DetailsDescriptionPresenter.java
deleted file mode 100644
index 7fd69559a..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/DetailsDescriptionPresenter.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.
- */
-
-package com.example.android.tvleanback.presenter;
-
-import androidx.leanback.widget.AbstractDetailsDescriptionPresenter;
-
-import com.example.android.tvleanback.model.Video;
-
-public class DetailsDescriptionPresenter extends AbstractDetailsDescriptionPresenter {
-
- @Override
- protected void onBindDescription(ViewHolder viewHolder, Object item) {
- Video video = (Video) item;
-
- if (video != null) {
- viewHolder.getTitle().setText(video.title);
- viewHolder.getSubtitle().setText(video.studio);
- viewHolder.getBody().setText(video.description);
- }
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/GridItemPresenter.java b/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/GridItemPresenter.java
deleted file mode 100644
index c11878e94..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/GridItemPresenter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.
- */
-
-package com.example.android.tvleanback.presenter;
-
-import android.content.res.Resources;
-import android.graphics.Color;
-import androidx.leanback.widget.Presenter;
-import androidx.core.content.ContextCompat;
-import android.view.Gravity;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.example.android.tvleanback.R;
-import com.example.android.tvleanback.ui.MainFragment;
-
-public class GridItemPresenter extends Presenter {
- private final MainFragment mainFragment;
-
- public GridItemPresenter(MainFragment mainFragment) {
- this.mainFragment = mainFragment;
- }
-
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent) {
- TextView view = new TextView(parent.getContext());
-
- Resources res = parent.getResources();
- int width = res.getDimensionPixelSize(R.dimen.grid_item_width);
- int height = res.getDimensionPixelSize(R.dimen.grid_item_height);
-
- view.setLayoutParams(new ViewGroup.LayoutParams(width, height));
- view.setFocusable(true);
- view.setFocusableInTouchMode(true);
- view.setBackgroundColor(ContextCompat.getColor(parent.getContext(),
- R.color.default_background));
- view.setTextColor(Color.WHITE);
- view.setGravity(Gravity.CENTER);
- return new ViewHolder(view);
- }
-
- @Override
- public void onBindViewHolder(ViewHolder viewHolder, Object item) {
- ((TextView) viewHolder.view).setText((String) item);
- }
-
- @Override
- public void onUnbindViewHolder(ViewHolder viewHolder) {
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/IconHeaderItemPresenter.java b/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/IconHeaderItemPresenter.java
deleted file mode 100644
index 9034a44c0..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/presenter/IconHeaderItemPresenter.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2016 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 com.example.android.tvleanback.presenter;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import androidx.leanback.widget.HeaderItem;
-import androidx.leanback.widget.ListRow;
-import androidx.leanback.widget.Presenter;
-import androidx.leanback.widget.RowHeaderPresenter;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.example.android.tvleanback.R;
-
-public class IconHeaderItemPresenter extends RowHeaderPresenter {
-
- private float mUnselectedAlpha;
-
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup viewGroup) {
- mUnselectedAlpha = viewGroup.getResources()
- .getFraction(R.fraction.lb_browse_header_unselect_alpha, 1, 1);
- LayoutInflater inflater = (LayoutInflater) viewGroup.getContext()
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
- View view = inflater.inflate(R.layout.icon_header_item, null);
- view.setAlpha(mUnselectedAlpha); // Initialize icons to be at half-opacity.
-
- return new ViewHolder(view);
- }
-
- @Override
- public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
- HeaderItem headerItem = ((ListRow) item).getHeaderItem();
- View rootView = viewHolder.view;
- rootView.setFocusable(true);
-
- ImageView iconView = (ImageView) rootView.findViewById(R.id.header_icon);
- Drawable icon = rootView.getResources().getDrawable(R.drawable.android_header, null);
- iconView.setImageDrawable(icon);
-
- TextView label = (TextView) rootView.findViewById(R.id.header_label);
- label.setText(headerItem.getName());
- }
-
- @Override
- public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) {
- // no op
- }
-
- // TODO: This is a temporary fix. Remove me when leanback onCreateViewHolder no longer sets the
- // mUnselectAlpha, and also assumes the xml inflation will return a RowHeaderView.
- @Override
- protected void onSelectLevelChanged(RowHeaderPresenter.ViewHolder holder) {
- holder.view.setAlpha(mUnselectedAlpha + holder.getSelectLevel() *
- (1.0f - mUnselectedAlpha));
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/recommendation/RecommendationReceiver.java b/Leanback/app/src/main/java/com/example/android/tvleanback/recommendation/RecommendationReceiver.java
deleted file mode 100644
index 523749ac3..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/recommendation/RecommendationReceiver.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-
-package com.example.android.tvleanback.recommendation;
-
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-/*
- * This class extends BroadcastReceiver and publishes Recommendations when received.
- */
-public class RecommendationReceiver extends BroadcastReceiver {
- private static final long INITIAL_DELAY = 5000;
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
- scheduleRecommendationUpdate(context);
- }
- }
-
- private void scheduleRecommendationUpdate(Context context) {
- AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- Intent recommendationIntent = new Intent(context, UpdateRecommendationsService.class);
- PendingIntent alarmIntent = PendingIntent.getService(context, 0, recommendationIntent, 0);
-
- alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, INITIAL_DELAY,
- AlarmManager.INTERVAL_HALF_HOUR, alarmIntent);
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/recommendation/UpdateRecommendationsService.java b/Leanback/app/src/main/java/com/example/android/tvleanback/recommendation/UpdateRecommendationsService.java
deleted file mode 100644
index 38b31e555..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/recommendation/UpdateRecommendationsService.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * 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.
- */
-
-package com.example.android.tvleanback.recommendation;
-
-import android.app.IntentService;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.preference.PreferenceManager;
-import androidx.recommendation.app.ContentRecommendation;
-import android.util.Log;
-
-import com.bumptech.glide.Glide;
-import com.example.android.tvleanback.BuildConfig;
-import com.example.android.tvleanback.R;
-import com.example.android.tvleanback.data.VideoContract;
-import com.example.android.tvleanback.model.Video;
-import com.example.android.tvleanback.model.VideoCursorMapper;
-import com.example.android.tvleanback.ui.VideoDetailsActivity;
-
-import java.util.concurrent.ExecutionException;
-
-/*
- * This class builds up to MAX_RECOMMENDATIONS of ContentRecommendations and defines what happens
- * when they're selected from Recommendations section on the Home screen by creating an Intent.
- */
-public class UpdateRecommendationsService extends IntentService {
- private static final String TAG = "RecommendationService";
- private static final int MAX_RECOMMENDATIONS = 3;
- private static final VideoCursorMapper mVideoCursorMapper = new VideoCursorMapper();
-
- private NotificationManager mNotifManager;
-
- public UpdateRecommendationsService() {
- super(TAG);
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
-
- if (mNotifManager == null) {
- mNotifManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- }
- }
-
- @Override
- protected void onHandleIntent(Intent intent) {
- // Generate recommendations, but only if recommendations are enabled
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- if (!sharedPreferences.getBoolean(getString(R.string.pref_key_recommendations), true)) {
- Log.d(TAG, "Recommendations disabled");
- mNotifManager.cancelAll();
- return;
- }
- Resources res = getResources();
- int cardWidth = res.getDimensionPixelSize(R.dimen.card_width);
- int cardHeight = res.getDimensionPixelSize(R.dimen.card_height);
- ContentRecommendation.Builder builder = new ContentRecommendation.Builder()
- .setBadgeIcon(R.drawable.videos_by_google_icon);
-
- Cursor cursor = getContentResolver().query(
- VideoContract.VideoEntry.CONTENT_URI,
- null, // projection
- null, // selection
- null, // selection clause
- "RANDOM() LIMIT " + MAX_RECOMMENDATIONS // sort order
- );
-
- if (cursor != null && cursor.moveToNext()) {
- try {
- do {
- Video video = (Video) mVideoCursorMapper.convert(cursor);
- int id = Long.valueOf(video.id).hashCode();
-
- builder.setIdTag("Video" + id)
- .setTitle(video.title)
- .setText(getString(R.string.popular_header))
- .setContentIntentData(ContentRecommendation.INTENT_TYPE_ACTIVITY,
- buildPendingIntent(video, id), 0, null);
-
- Bitmap bitmap = Glide.with(getApplication())
- .asBitmap()
- .load(video.cardImageUrl)
- .submit(cardWidth, cardHeight) // Only use for synchronous .get()
- .get();
- builder.setContentImage(bitmap);
-
- // Create an object holding all the information used to recommend the content.
- ContentRecommendation rec = builder.build();
- Notification notification = rec.getNotificationObject(getApplicationContext());
-
- if (BuildConfig.DEBUG) Log.d(TAG, "Recommending video " + video.title);
-
- // Recommend the content by publishing the notification.
- mNotifManager.notify(id, notification);
- } while (cursor.moveToNext());
- } catch (InterruptedException | ExecutionException e) {
- Log.e(TAG, "Could not create recommendation.", e);
- } finally {
- cursor.close();
- }
- }
- }
-
- private Intent buildPendingIntent(Video video, int id) {
- Intent detailsIntent = new Intent(this, VideoDetailsActivity.class);
- detailsIntent.putExtra(VideoDetailsActivity.VIDEO, video);
- detailsIntent.putExtra(VideoDetailsActivity.NOTIFICATION_ID, id);
- detailsIntent.setAction(Long.toString(video.id));
-
- return detailsIntent;
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/AuthenticationActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/AuthenticationActivity.java
deleted file mode 100644
index 4eeaa408f..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/AuthenticationActivity.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2016 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 com.example.android.tvleanback.ui;
-
-import android.app.Activity;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.leanback.app.GuidedStepFragment;
-import androidx.leanback.widget.GuidanceStylist;
-import androidx.leanback.widget.GuidedAction;
-import android.text.InputType;
-import android.widget.Toast;
-
-import com.example.android.tvleanback.R;
-
-import java.util.List;
-
-public class AuthenticationActivity extends Activity {
- private static final int CONTINUE = 2;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (null == savedInstanceState) {
- GuidedStepFragment.addAsRoot(this, new FirstStepFragment(), android.R.id.content);
- }
- }
-
- public static class FirstStepFragment extends GuidedStepFragment {
- @Override
- public int onProvideTheme() {
- return R.style.Theme_Example_Leanback_GuidedStep_First;
- }
-
- @Override
- @NonNull
- public GuidanceStylist.Guidance onCreateGuidance(@NonNull Bundle savedInstanceState) {
- String title = getString(R.string.pref_title_screen_signin);
- String description = getString(R.string.pref_title_login_description);
- Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon);
- return new GuidanceStylist.Guidance(title, description, "", icon);
- }
-
- @Override
- public void onCreateActions(@NonNull List actions, Bundle savedInstanceState) {
- GuidedAction enterUsername = new GuidedAction.Builder()
- .title(getString(R.string.pref_title_username))
- .descriptionEditable(true)
- .build();
- GuidedAction enterPassword = new GuidedAction.Builder()
- .title(getString(R.string.pref_title_password))
- .descriptionEditable(true)
- .descriptionInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT)
- .build();
- GuidedAction login = new GuidedAction.Builder()
- .id(CONTINUE)
- .title(getString(R.string.guidedstep_continue))
- .build();
- actions.add(enterUsername);
- actions.add(enterPassword);
- actions.add(login);
- }
-
- @Override
- public void onGuidedActionClicked(GuidedAction action) {
- if (action.getId() == CONTINUE) {
- // TODO Authenticate your account
- // Assume the user was logged in
- Toast.makeText(getActivity(), "Welcome!", Toast.LENGTH_SHORT).show();
- getActivity().finishAfterTransition();
- }
- }
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/BrowseErrorFragment.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/BrowseErrorFragment.java
deleted file mode 100644
index b9de1a7f1..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/BrowseErrorFragment.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.os.Handler;
-import androidx.leanback.app.ErrorSupportFragment;
-import androidx.fragment.app.Fragment;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.ProgressBar;
-
-import com.example.android.tvleanback.R;
-
-/*
- * This class demonstrates how to extend ErrorFragment to create an error dialog.
- */
-public class BrowseErrorFragment extends ErrorSupportFragment {
- private static final boolean TRANSLUCENT = true;
- private static final int TIMER_DELAY = 1000;
-
- private final Handler mHandler = new Handler();
- private SpinnerFragment mSpinnerFragment;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setTitle(getResources().getString(R.string.app_name));
-
- mSpinnerFragment = new SpinnerFragment();
- getFragmentManager().beginTransaction().add(R.id.main_frame, mSpinnerFragment).commit();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- getFragmentManager().beginTransaction().remove(mSpinnerFragment).commit();
- setErrorContent();
- }
- }, TIMER_DELAY);
- }
-
- @Override
- public void onStop() {
- super.onStop();
- mHandler.removeCallbacksAndMessages(null);
- getFragmentManager().beginTransaction().remove(mSpinnerFragment).commit();
- }
-
- private void setErrorContent() {
- setImageDrawable(getResources().getDrawable(R.drawable.lb_ic_sad_cloud, null));
- setMessage(getResources().getString(R.string.error_fragment_message));
- setDefaultBackground(TRANSLUCENT);
-
- setButtonText(getResources().getString(R.string.dismiss_error));
- setButtonClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- getFragmentManager().beginTransaction().remove(BrowseErrorFragment.this).commit();
- getFragmentManager().popBackStack();
- }
- });
- }
-
- public static class SpinnerFragment extends Fragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- ProgressBar progressBar = new ProgressBar(container.getContext());
- if (container instanceof FrameLayout) {
- Resources res = getResources();
- int width = res.getDimensionPixelSize(R.dimen.spinner_width);
- int height = res.getDimensionPixelSize(R.dimen.spinner_height);
- FrameLayout.LayoutParams layoutParams =
- new FrameLayout.LayoutParams(width, height, Gravity.CENTER);
- progressBar.setLayoutParams(layoutParams);
- }
- return progressBar;
- }
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/GuidedStepActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/GuidedStepActivity.java
deleted file mode 100644
index a8d7c6570..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/GuidedStepActivity.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import androidx.annotation.NonNull;
-import androidx.leanback.app.GuidedStepSupportFragment;
-import androidx.leanback.widget.GuidanceStylist;
-import androidx.leanback.widget.GuidanceStylist.Guidance;
-import androidx.leanback.widget.GuidedAction;
-import androidx.fragment.app.FragmentActivity;
-import androidx.fragment.app.FragmentManager;
-
-import com.example.android.tvleanback.R;
-
-import java.util.List;
-
-/**
- * Activity that showcases different aspects of GuidedStepFragments.
- */
-public class GuidedStepActivity extends FragmentActivity {
-
- private static final int CONTINUE = 0;
- private static final int BACK = 1;
- private static final int OPTION_CHECK_SET_ID = 10;
- private static final String[] OPTION_NAMES = {
- "Option A",
- "Option B",
- "Option C"
- };
- private static final String[] OPTION_DESCRIPTIONS = {
- "Here's one thing you can do",
- "Here's another thing you can do",
- "Here's one more thing you can do"
- };
- private static final int[] OPTION_DRAWABLES = {R.drawable.ic_guidedstep_option_a,
- R.drawable.ic_guidedstep_option_b, R.drawable.ic_guidedstep_option_c};
- private static final boolean[] OPTION_CHECKED = {true, false, false};
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (null == savedInstanceState) {
- GuidedStepSupportFragment.addAsRoot(this, new FirstStepFragment(), android.R.id.content);
- }
- }
-
- private static void addAction(
- Context context,
- List actions,
- long id,
- String title,
- String desc) {
- actions.add(new GuidedAction.Builder(context)
- .id(id)
- .title(title)
- .description(desc)
- .build());
- }
-
- private static void addCheckedAction(
- Context context,
- List actions,
- int iconResId,
- String title,
- String desc,
- boolean checked) {
- GuidedAction guidedAction = new GuidedAction.Builder(context)
- .title(title)
- .description(desc)
- .checkSetId(OPTION_CHECK_SET_ID)
- .icon(iconResId)
- .build();
- guidedAction.setChecked(checked);
- actions.add(guidedAction);
- }
-
- public static class FirstStepFragment extends GuidedStepSupportFragment {
- @Override
- public int onProvideTheme() {
- return R.style.Theme_Example_Leanback_GuidedStep_First;
- }
-
- @Override
- @NonNull
- public Guidance onCreateGuidance(@NonNull Bundle savedInstanceState) {
- String title = getString(R.string.guidedstep_first_title);
- String breadcrumb = getString(R.string.guidedstep_first_breadcrumb);
- String description = getString(R.string.guidedstep_first_description);
- Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon);
- return new Guidance(title, description, breadcrumb, icon);
- }
-
- @Override
- public void onCreateActions(@NonNull List actions,
- Bundle savedInstanceState) {
- addAction(getContext(),
- actions,
- CONTINUE,
- getResources().getString(R.string.guidedstep_continue),
- getResources().getString(R.string.guidedstep_letsdoit));
- addAction(getContext(),
- actions,
- BACK,
- getResources().getString(R.string.guidedstep_cancel),
- getResources().getString(R.string.guidedstep_nevermind));
- }
-
- @Override
- public void onGuidedActionClicked(GuidedAction action) {
- FragmentManager fm = getFragmentManager();
- if (action.getId() == CONTINUE) {
- GuidedStepSupportFragment.add(fm, new SecondStepFragment());
- } else {
- getActivity().finishAfterTransition();
- }
- }
- }
-
- public static class SecondStepFragment extends GuidedStepSupportFragment {
-
- @Override
- @NonNull
- public Guidance onCreateGuidance(Bundle savedInstanceState) {
- String title = getString(R.string.guidedstep_second_title);
- String breadcrumb = getString(R.string.guidedstep_second_breadcrumb);
- String description = getString(R.string.guidedstep_second_description);
- Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon);
- return new Guidance(title, description, breadcrumb, icon);
- }
-
- @Override
- public GuidanceStylist onCreateGuidanceStylist() {
- return new GuidanceStylist() {
- @Override
- public int onProvideLayoutId() {
- return R.layout.guidedstep_second_guidance;
- }
- };
- }
-
- @Override
- public void onCreateActions(@NonNull List actions,
- Bundle savedInstanceState) {
- String desc = getResources().getString(R.string.guidedstep_action_description);
- actions.add(new GuidedAction.Builder()
- .title(getResources().getString(R.string.guidedstep_action_title))
- .description(desc)
- .multilineDescription(true)
- .infoOnly(true)
- .enabled(false)
- .build());
- for (int i = 0; i < OPTION_NAMES.length; i++) {
- addCheckedAction(getContext(),
- actions,
- OPTION_DRAWABLES[i],
- OPTION_NAMES[i],
- OPTION_DESCRIPTIONS[i],
- OPTION_CHECKED[i]);
- }
- }
-
- @Override
- public void onGuidedActionClicked(GuidedAction action) {
- FragmentManager fm = getFragmentManager();
- ThirdStepFragment next = ThirdStepFragment.newInstance(getSelectedActionPosition() - 1);
- GuidedStepSupportFragment.add(fm, next);
- }
-
- }
-
- public static class ThirdStepFragment extends GuidedStepSupportFragment {
- private final static String ARG_OPTION_IDX = "arg.option.idx";
-
- public static ThirdStepFragment newInstance(final int option) {
- final ThirdStepFragment f = new ThirdStepFragment();
- final Bundle args = new Bundle();
- args.putInt(ARG_OPTION_IDX, option);
- f.setArguments(args);
- return f;
- }
-
- @Override
- @NonNull
- public Guidance onCreateGuidance(Bundle savedInstanceState) {
- String title = getString(R.string.guidedstep_third_title);
- String breadcrumb = getString(R.string.guidedstep_third_breadcrumb);
- String description = getString(R.string.guidedstep_third_command)
- + OPTION_NAMES[getArguments().getInt(ARG_OPTION_IDX)];
- Drawable icon = getActivity().getDrawable(R.drawable.ic_main_icon);
- return new Guidance(title, description, breadcrumb, icon);
- }
-
- @Override
- public void onCreateActions(@NonNull List actions,
- Bundle savedInstanceState) {
- addAction(getContext(), actions, CONTINUE, "Done", "All finished");
- addAction(getContext(), actions, BACK, "Back", "Forgot something...");
- }
-
- @Override
- public void onGuidedActionClicked(GuidedAction action) {
- if (action.getId() == CONTINUE) {
- getActivity().finishAfterTransition();
- } else {
- getFragmentManager().popBackStack();
- }
- }
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/LeanbackActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/LeanbackActivity.java
deleted file mode 100644
index 8abbb7861..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/LeanbackActivity.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2019 Google LLC
- *
- * 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 com.example.android.tvleanback.ui;
-
-import android.content.Intent;
-import androidx.fragment.app.FragmentActivity;
-
-/**
- * This parent class contains common methods that run in every activity such as search.
- */
-public abstract class LeanbackActivity extends FragmentActivity {
- @Override
- public boolean onSearchRequested() {
- startActivity(new Intent(this, SearchActivity.class));
- return true;
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/MainActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/MainActivity.java
deleted file mode 100644
index 448c82a7a..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/MainActivity.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-
-import com.example.android.tvleanback.R;
-
-/*
- * MainActivity class that loads MainFragment.
- */
-public class MainActivity extends LeanbackActivity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- if(!sharedPreferences.getBoolean(OnboardingFragment.COMPLETED_ONBOARDING, false)) {
- // This is the first time running the app, let's go to onboarding
- startActivity(new Intent(this, OnboardingActivity.class));
- }
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/MainFragment.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/MainFragment.java
deleted file mode 100644
index 3d560481b..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/MainFragment.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import androidx.leanback.app.BackgroundManager;
-import androidx.leanback.app.BrowseSupportFragment;
-import androidx.leanback.widget.ArrayObjectAdapter;
-import androidx.leanback.widget.CursorObjectAdapter;
-import androidx.leanback.widget.HeaderItem;
-import androidx.leanback.widget.ImageCardView;
-import androidx.leanback.widget.ListRow;
-import androidx.leanback.widget.ListRowPresenter;
-import androidx.leanback.widget.OnItemViewClickedListener;
-import androidx.leanback.widget.OnItemViewSelectedListener;
-import androidx.leanback.widget.Presenter;
-import androidx.leanback.widget.PresenterSelector;
-import androidx.leanback.widget.Row;
-import androidx.leanback.widget.RowPresenter;
-import androidx.core.app.ActivityOptionsCompat;
-import androidx.loader.app.LoaderManager;
-import androidx.core.content.ContextCompat;
-import androidx.loader.content.CursorLoader;
-import androidx.loader.content.Loader;
-import android.util.DisplayMetrics;
-import android.view.View;
-import android.widget.Toast;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.RequestOptions;
-import com.bumptech.glide.request.target.SimpleTarget;
-import com.bumptech.glide.request.transition.Transition;
-import com.example.android.tvleanback.R;
-import com.example.android.tvleanback.data.FetchVideoService;
-import com.example.android.tvleanback.data.VideoContract;
-import com.example.android.tvleanback.model.Video;
-import com.example.android.tvleanback.model.VideoCursorMapper;
-import com.example.android.tvleanback.presenter.CardPresenter;
-import com.example.android.tvleanback.presenter.GridItemPresenter;
-import com.example.android.tvleanback.presenter.IconHeaderItemPresenter;
-import com.example.android.tvleanback.recommendation.UpdateRecommendationsService;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/*
- * Main class to show BrowseFragment with header and rows of videos
- */
-public class MainFragment extends BrowseSupportFragment
- implements LoaderManager.LoaderCallbacks {
-
- private static final int BACKGROUND_UPDATE_DELAY = 300;
- private final Handler mHandler = new Handler();
- private ArrayObjectAdapter mCategoryRowAdapter;
- private Drawable mDefaultBackground;
- private DisplayMetrics mMetrics;
- private Runnable mBackgroundTask;
- private Uri mBackgroundURI;
- private BackgroundManager mBackgroundManager;
- private LoaderManager mLoaderManager;
- private static final int CATEGORY_LOADER = 123; // Unique ID for Category Loader.
-
- // Maps a Loader Id to its CursorObjectAdapter.
- private Map mVideoCursorAdapters;
-
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
-
- // Create a list to contain all the CursorObjectAdapters.
- // Each adapter is used to render a specific row of videos in the MainFragment.
- mVideoCursorAdapters = new HashMap<>();
-
- // Start loading the categories from the database.
- mLoaderManager = LoaderManager.getInstance(this);
- mLoaderManager.initLoader(CATEGORY_LOADER, null, this);
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- // Final initialization, modifying UI elements.
- super.onActivityCreated(savedInstanceState);
-
- // Prepare the manager that maintains the same background image between activities.
- prepareBackgroundManager();
-
- setupUIElements();
- setupEventListeners();
- prepareEntranceTransition();
-
- // Map category results from the database to ListRow objects.
- // This Adapter is used to render the MainFragment sidebar labels.
- mCategoryRowAdapter = new ArrayObjectAdapter(new ListRowPresenter());
- setAdapter(mCategoryRowAdapter);
-
- updateRecommendations();
- }
-
- @Override
- public void onDestroy() {
- mHandler.removeCallbacks(mBackgroundTask);
- mBackgroundManager = null;
- super.onDestroy();
- }
-
- @Override
- public void onStop() {
- mBackgroundManager.release();
- super.onStop();
- }
-
- private void prepareBackgroundManager() {
- mBackgroundManager = BackgroundManager.getInstance(getActivity());
- mBackgroundManager.attach(getActivity().getWindow());
- mDefaultBackground = getResources().getDrawable(R.drawable.default_background, null);
- mBackgroundTask = new UpdateBackgroundTask();
- mMetrics = new DisplayMetrics();
- getActivity().getWindowManager().getDefaultDisplay().getMetrics(mMetrics);
- }
-
- private void setupUIElements() {
- setBadgeDrawable(
- getActivity().getResources().getDrawable(R.drawable.videos_by_google_banner, null));
- setTitle(getString(R.string.browse_title)); // Badge, when set, takes precedent over title
- setHeadersState(HEADERS_ENABLED);
- setHeadersTransitionOnBackEnabled(true);
-
- // Set fastLane (or headers) background color
- setBrandColor(ContextCompat.getColor(getActivity(), R.color.fastlane_background));
-
- // Set search icon color.
- setSearchAffordanceColor(ContextCompat.getColor(getActivity(), R.color.search_opaque));
-
- setHeaderPresenterSelector(new PresenterSelector() {
- @Override
- public Presenter getPresenter(Object o) {
- return new IconHeaderItemPresenter();
- }
- });
- }
-
- private void setupEventListeners() {
- setOnSearchClickedListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View view) {
- Intent intent = new Intent(getActivity(), SearchActivity.class);
- startActivity(intent);
- }
- });
-
- setOnItemViewClickedListener(new ItemViewClickedListener());
- setOnItemViewSelectedListener(new ItemViewSelectedListener());
- }
-
- private void updateBackground(String uri) {
- int width = mMetrics.widthPixels;
- int height = mMetrics.heightPixels;
-
- RequestOptions options = new RequestOptions()
- .centerCrop()
- .error(mDefaultBackground);
-
- Glide.with(this)
- .asBitmap()
- .load(uri)
- .apply(options)
- .into(new SimpleTarget(width, height) {
- @Override
- public void onResourceReady(
- Bitmap resource,
- Transition super Bitmap> transition) {
- mBackgroundManager.setBitmap(resource);
- }
- });
- }
-
- private void startBackgroundTimer() {
- mHandler.removeCallbacks(mBackgroundTask);
- mHandler.postDelayed(mBackgroundTask, BACKGROUND_UPDATE_DELAY);
- }
-
- private void updateRecommendations() {
- Intent recommendationIntent = new Intent(getActivity(), UpdateRecommendationsService.class);
- getActivity().startService(recommendationIntent);
- }
-
- @Override
- public Loader onCreateLoader(int id, Bundle args) {
- if (id == CATEGORY_LOADER) {
- return new CursorLoader(
- getContext(),
- VideoContract.VideoEntry.CONTENT_URI, // Table to query
- new String[]{"DISTINCT " + VideoContract.VideoEntry.COLUMN_CATEGORY},
- // Only categories
- null, // No selection clause
- null, // No selection arguments
- null // Default sort order
- );
- } else {
- // Assume it is for a video.
- String category = args.getString(VideoContract.VideoEntry.COLUMN_CATEGORY);
-
- // This just creates a CursorLoader that gets all videos.
- return new CursorLoader(
- getContext(),
- VideoContract.VideoEntry.CONTENT_URI, // Table to query
- null, // Projection to return - null means return all fields
- VideoContract.VideoEntry.COLUMN_CATEGORY + " = ?", // Selection clause
- new String[]{category}, // Select based on the category id.
- null // Default sort order
- );
- }
- }
-
- @Override
- public void onLoadFinished(Loader loader, Cursor data) {
- if (data != null && data.moveToFirst()) {
- final int loaderId = loader.getId();
-
- if (loaderId == CATEGORY_LOADER) {
-
- // Every time we have to re-get the category loader, we must re-create the sidebar.
- mCategoryRowAdapter.clear();
-
- // Iterate through each category entry and add it to the ArrayAdapter.
- while (!data.isAfterLast()) {
-
- int categoryIndex =
- data.getColumnIndex(VideoContract.VideoEntry.COLUMN_CATEGORY);
- String category = data.getString(categoryIndex);
-
- // Create header for this category.
- HeaderItem header = new HeaderItem(category);
-
- int videoLoaderId = category.hashCode(); // Create unique int from category.
- CursorObjectAdapter existingAdapter = mVideoCursorAdapters.get(videoLoaderId);
- if (existingAdapter == null) {
-
- // Map video results from the database to Video objects.
- CursorObjectAdapter videoCursorAdapter =
- new CursorObjectAdapter(new CardPresenter());
- videoCursorAdapter.setMapper(new VideoCursorMapper());
- mVideoCursorAdapters.put(videoLoaderId, videoCursorAdapter);
-
- ListRow row = new ListRow(header, videoCursorAdapter);
- mCategoryRowAdapter.add(row);
-
- // Start loading the videos from the database for a particular category.
- Bundle args = new Bundle();
- args.putString(VideoContract.VideoEntry.COLUMN_CATEGORY, category);
- mLoaderManager.initLoader(videoLoaderId, args, this);
- } else {
- ListRow row = new ListRow(header, existingAdapter);
- mCategoryRowAdapter.add(row);
- }
-
- data.moveToNext();
- }
-
- // Create a row for this special case with more samples.
- HeaderItem gridHeader = new HeaderItem(getString(R.string.more_samples));
- GridItemPresenter gridPresenter = new GridItemPresenter(this);
- ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter(gridPresenter);
- gridRowAdapter.add(getString(R.string.grid_view));
- gridRowAdapter.add(getString(R.string.guidedstep_first_title));
- gridRowAdapter.add(getString(R.string.error_fragment));
- gridRowAdapter.add(getString(R.string.personal_settings));
- ListRow row = new ListRow(gridHeader, gridRowAdapter);
- mCategoryRowAdapter.add(row);
-
- startEntranceTransition(); // TODO: Move startEntranceTransition to after all
- // cursors have loaded.
- } else {
- // The CursorAdapter contains a Cursor pointing to all videos.
- mVideoCursorAdapters.get(loaderId).changeCursor(data);
- }
- } else {
- // Start an Intent to fetch the videos.
- Intent serviceIntent = new Intent(getActivity(), FetchVideoService.class);
- getActivity().startService(serviceIntent);
- }
- }
-
- @Override
- public void onLoaderReset(Loader loader) {
- int loaderId = loader.getId();
- if (loaderId != CATEGORY_LOADER) {
- mVideoCursorAdapters.get(loaderId).changeCursor(null);
- } else {
- mCategoryRowAdapter.clear();
- }
- }
-
- private class UpdateBackgroundTask implements Runnable {
-
- @Override
- public void run() {
- if (mBackgroundURI != null) {
- updateBackground(mBackgroundURI.toString());
- }
- }
- }
-
- private final class ItemViewClickedListener implements OnItemViewClickedListener {
- @Override
- public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
- RowPresenter.ViewHolder rowViewHolder, Row row) {
-
- if (item instanceof Video) {
- Video video = (Video) item;
- Intent intent = new Intent(getActivity(), VideoDetailsActivity.class);
- intent.putExtra(VideoDetailsActivity.VIDEO, video);
-
- Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
- getActivity(),
- ((ImageCardView) itemViewHolder.view).getMainImageView(),
- VideoDetailsActivity.SHARED_ELEMENT_NAME).toBundle();
- getActivity().startActivity(intent, bundle);
- } else if (item instanceof String) {
- if (((String) item).contains(getString(R.string.grid_view))) {
- Intent intent = new Intent(getActivity(), VerticalGridActivity.class);
- Bundle bundle =
- ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
- .toBundle();
- startActivity(intent, bundle);
- } else if (((String) item).contains(getString(R.string.guidedstep_first_title))) {
- Intent intent = new Intent(getActivity(), GuidedStepActivity.class);
- Bundle bundle =
- ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
- .toBundle();
- startActivity(intent, bundle);
- } else if (((String) item).contains(getString(R.string.error_fragment))) {
- BrowseErrorFragment errorFragment = new BrowseErrorFragment();
- getFragmentManager().beginTransaction().replace(R.id.main_frame, errorFragment)
- .addToBackStack(null).commit();
- } else if(((String) item).contains(getString(R.string.personal_settings))) {
- Intent intent = new Intent(getActivity(), SettingsActivity.class);
- Bundle bundle =
- ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity())
- .toBundle();
- startActivity(intent, bundle);
- } else {
- Toast.makeText(getActivity(), ((String) item), Toast.LENGTH_SHORT)
- .show();
- }
- }
- }
- }
-
- private final class ItemViewSelectedListener implements OnItemViewSelectedListener {
- @Override
- public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
- RowPresenter.ViewHolder rowViewHolder, Row row) {
- if (item instanceof Video) {
- mBackgroundURI = Uri.parse(((Video) item).bgImageUrl);
- startBackgroundTimer();
- }
-
- }
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/OnboardingActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/OnboardingActivity.java
deleted file mode 100644
index 7aefe412d..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/OnboardingActivity.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2016 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 com.example.android.tvleanback.ui;
-
-import android.os.Bundle;
-import androidx.fragment.app.FragmentActivity;
-
-import com.example.android.tvleanback.R;
-
-/*
- * OnboardingActivity for OnboardingFragment
- */
-public class OnboardingActivity extends FragmentActivity {
-
- /**
- * Called when the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.onboarding);
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/OnboardingFragment.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/OnboardingFragment.java
deleted file mode 100644
index 5091a28c8..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/OnboardingFragment.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (c) 2016 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 com.example.android.tvleanback.ui;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.graphics.drawable.AnimationDrawable;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-import androidx.annotation.Nullable;
-import androidx.leanback.app.OnboardingSupportFragment;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import com.example.android.tvleanback.R;
-
-import java.util.ArrayList;
-
-public class OnboardingFragment extends OnboardingSupportFragment {
- public static final String COMPLETED_ONBOARDING = "completed_onboarding";
-
- private static final int[] pageTitles = {
- R.string.onboarding_title_welcome,
- R.string.onboarding_title_design,
- R.string.onboarding_title_simple,
- R.string.onboarding_title_project
- };
- private static final int[] pageDescriptions = {
- R.string.onboarding_description_welcome,
- R.string.onboarding_description_design,
- R.string.onboarding_description_simple,
- R.string.onboarding_description_project
- };
- private final int[] pageImages = {
- R.drawable.tv_animation_a,
- R.drawable.tv_animation_b,
- R.drawable.tv_animation_c,
- R.drawable.tv_animation_d
- };
- private static final long ANIMATION_DURATION = 500;
- private Animator mContentAnimator;
- private ImageView mContentView;
-
- @Nullable
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- // Set the logo to display a splash animation
- setLogoResourceId(R.drawable.videos_by_google_banner);
- return super.onCreateView(inflater, container, savedInstanceState);
- }
-
- @Override
- protected void onFinishFragment() {
- super.onFinishFragment();
- // Our onboarding is done
- // Update the shared preferences
- SharedPreferences.Editor sharedPreferencesEditor =
- PreferenceManager.getDefaultSharedPreferences(getActivity()).edit();
- sharedPreferencesEditor.putBoolean(COMPLETED_ONBOARDING, true);
- sharedPreferencesEditor.apply();
- // Let's go back to the MainActivity
- getActivity().finish();
- }
-
- @Override
- protected int getPageCount() {
- return pageTitles.length;
- }
-
- @Override
- protected String getPageTitle(int pageIndex) {
- return getString(pageTitles[pageIndex]);
- }
-
- @Override
- protected String getPageDescription(int pageIndex) {
- return getString(pageDescriptions[pageIndex]);
- }
-
- @Nullable
- @Override
- protected View onCreateBackgroundView(LayoutInflater inflater, ViewGroup container) {
- View bgView = new View(getActivity());
- bgView.setBackgroundColor(getResources().getColor(R.color.fastlane_background));
- return bgView;
- }
-
- @Nullable
- @Override
- protected View onCreateContentView(LayoutInflater inflater, ViewGroup container) {
- mContentView = new ImageView(getActivity());
- mContentView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
- mContentView.setPadding(0, 32, 0, 32);
- return mContentView;
- }
-
- @Nullable
- @Override
- protected View onCreateForegroundView(LayoutInflater inflater, ViewGroup container) {
- return null;
- }
-
- @Override
- protected void onPageChanged(final int newPage, int previousPage) {
- if (mContentAnimator != null) {
- mContentAnimator.end();
- }
- ArrayList animators = new ArrayList<>();
- Animator fadeOut = createFadeOutAnimator(mContentView);
-
- fadeOut.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mContentView.setImageDrawable(getResources().getDrawable(pageImages[newPage]));
- ((AnimationDrawable) mContentView.getDrawable()).start();
- }
- });
- animators.add(fadeOut);
- animators.add(createFadeInAnimator(mContentView));
- AnimatorSet set = new AnimatorSet();
- set.playSequentially(animators);
- set.start();
- mContentAnimator = set;
- }
- @Override
- protected Animator onCreateEnterAnimation() {
- mContentView.setImageDrawable(getResources().getDrawable(pageImages[0]));
- ((AnimationDrawable) mContentView.getDrawable()).start();
- mContentAnimator = createFadeInAnimator(mContentView);
- return mContentAnimator;
- }
- private Animator createFadeInAnimator(View view) {
- return ObjectAnimator.ofFloat(view, View.ALPHA, 0.0f, 1.0f).setDuration(ANIMATION_DURATION);
- }
-
- private Animator createFadeOutAnimator(View view) {
- return ObjectAnimator.ofFloat(view, View.ALPHA, 1.0f, 0.0f).setDuration(ANIMATION_DURATION);
- }
-}
\ No newline at end of file
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/PlaybackActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/PlaybackActivity.java
deleted file mode 100644
index 9c9893b0b..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/PlaybackActivity.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.os.Bundle;
-import androidx.fragment.app.Fragment;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-
-import com.example.android.tvleanback.R;
-
-/**
- * Loads PlaybackFragment and delegates input from a game controller.
- *
- * For more information on game controller capabilities with leanback, review the
- * docs.
- */
-public class PlaybackActivity extends LeanbackActivity {
- private static final float GAMEPAD_TRIGGER_INTENSITY_ON = 0.5f;
- // Off-condition slightly smaller for button debouncing.
- private static final float GAMEPAD_TRIGGER_INTENSITY_OFF = 0.45f;
- private boolean gamepadTriggerPressed = false;
- private PlaybackFragment mPlaybackFragment;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_playback);
- Fragment fragment =
- getSupportFragmentManager().findFragmentByTag(getString(R.string.playback_tag));
- if (fragment instanceof PlaybackFragment) {
- mPlaybackFragment = (PlaybackFragment) fragment;
- }
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- finish();
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BUTTON_R1) {
- mPlaybackFragment.skipToNext();
- return true;
- } else if (keyCode == KeyEvent.KEYCODE_BUTTON_L1) {
- mPlaybackFragment.skipToPrevious();
- return true;
- } else if (keyCode == KeyEvent.KEYCODE_BUTTON_L2) {
- mPlaybackFragment.rewind();
- } else if (keyCode == KeyEvent.KEYCODE_BUTTON_R2) {
- mPlaybackFragment.fastForward();
- }
-
- return super.onKeyDown(keyCode, event);
- }
-
- @Override
- public boolean onGenericMotionEvent(MotionEvent event) {
- // This method will handle gamepad events.
- if (event.getAxisValue(MotionEvent.AXIS_LTRIGGER) > GAMEPAD_TRIGGER_INTENSITY_ON
- && !gamepadTriggerPressed) {
- mPlaybackFragment.rewind();
- gamepadTriggerPressed = true;
- } else if (event.getAxisValue(MotionEvent.AXIS_RTRIGGER) > GAMEPAD_TRIGGER_INTENSITY_ON
- && !gamepadTriggerPressed) {
- mPlaybackFragment.fastForward();
- gamepadTriggerPressed = true;
- } else if (event.getAxisValue(MotionEvent.AXIS_LTRIGGER) < GAMEPAD_TRIGGER_INTENSITY_OFF
- && event.getAxisValue(MotionEvent.AXIS_RTRIGGER) < GAMEPAD_TRIGGER_INTENSITY_OFF) {
- gamepadTriggerPressed = false;
- }
- return super.onGenericMotionEvent(event);
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/PlaybackFragment.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/PlaybackFragment.java
deleted file mode 100644
index 5803b8012..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/PlaybackFragment.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Copyright (C) 2017 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 com.example.android.tvleanback.ui;
-
-import android.annotation.TargetApi;
-import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Build;
-import android.os.Bundle;
-import androidx.leanback.app.VideoFragment;
-import androidx.leanback.app.VideoFragmentGlueHost;
-import androidx.leanback.app.VideoSupportFragment;
-import androidx.leanback.app.VideoSupportFragmentGlueHost;
-import androidx.leanback.media.PlaybackGlue;
-import androidx.leanback.widget.ArrayObjectAdapter;
-import androidx.leanback.widget.ClassPresenterSelector;
-import androidx.leanback.widget.CursorObjectAdapter;
-import androidx.leanback.widget.HeaderItem;
-import androidx.leanback.widget.ImageCardView;
-import androidx.leanback.widget.ListRow;
-import androidx.leanback.widget.ListRowPresenter;
-import androidx.leanback.widget.OnItemViewClickedListener;
-import androidx.leanback.widget.Presenter;
-import androidx.leanback.widget.Row;
-import androidx.leanback.widget.RowPresenter;
-import androidx.core.app.ActivityOptionsCompat;
-import androidx.loader.app.LoaderManager;
-import androidx.loader.content.CursorLoader;
-import androidx.loader.content.Loader;
-
-import com.example.android.tvleanback.R;
-import com.example.android.tvleanback.data.VideoContract;
-import com.example.android.tvleanback.model.Playlist;
-import com.example.android.tvleanback.model.Video;
-import com.example.android.tvleanback.model.VideoCursorMapper;
-import com.example.android.tvleanback.player.VideoPlayerGlue;
-import com.example.android.tvleanback.presenter.CardPresenter;
-import com.google.android.exoplayer2.ExoPlayerFactory;
-import com.google.android.exoplayer2.SimpleExoPlayer;
-import com.google.android.exoplayer2.ext.leanback.LeanbackPlayerAdapter;
-import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
-import com.google.android.exoplayer2.source.ExtractorMediaSource;
-import com.google.android.exoplayer2.source.MediaSource;
-import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
-import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
-import com.google.android.exoplayer2.trackselection.TrackSelection;
-import com.google.android.exoplayer2.trackselection.TrackSelector;
-import com.google.android.exoplayer2.upstream.BandwidthMeter;
-import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
-import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
-import com.google.android.exoplayer2.util.Util;
-
-import static com.example.android.tvleanback.ui.PlaybackFragment.VideoLoaderCallbacks.RELATED_VIDEOS_LOADER;
-
-/**
- * Plays selected video, loads playlist and related videos, and delegates playback to {@link
- * VideoPlayerGlue}.
- */
-public class PlaybackFragment extends VideoSupportFragment {
-
- private static final int UPDATE_DELAY = 16;
-
- private VideoPlayerGlue mPlayerGlue;
- private LeanbackPlayerAdapter mPlayerAdapter;
- private SimpleExoPlayer mPlayer;
- private TrackSelector mTrackSelector;
- private PlaylistActionListener mPlaylistActionListener;
-
- private Video mVideo;
- private Playlist mPlaylist;
- private VideoLoaderCallbacks mVideoLoaderCallbacks;
- private CursorObjectAdapter mVideoCursorAdapter;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mVideo = getActivity().getIntent().getParcelableExtra(VideoDetailsActivity.VIDEO);
- mPlaylist = new Playlist();
-
- mVideoLoaderCallbacks = new VideoLoaderCallbacks(mPlaylist);
-
- // Loads the playlist.
- Bundle args = new Bundle();
- args.putString(VideoContract.VideoEntry.COLUMN_CATEGORY, mVideo.category);
- getLoaderManager()
- .initLoader(VideoLoaderCallbacks.QUEUE_VIDEOS_LOADER, args, mVideoLoaderCallbacks);
-
- mVideoCursorAdapter = setupRelatedVideosCursor();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- if (Util.SDK_INT > 23) {
- initializePlayer();
- }
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if ((Util.SDK_INT <= 23 || mPlayer == null)) {
- initializePlayer();
- }
- }
-
- /** Pauses the player. */
- @TargetApi(Build.VERSION_CODES.N)
- @Override
- public void onPause() {
- super.onPause();
-
- if (mPlayerGlue != null && mPlayerGlue.isPlaying()) {
- mPlayerGlue.pause();
- }
- if (Util.SDK_INT <= 23) {
- releasePlayer();
- }
- }
-
- @Override
- public void onStop() {
- super.onStop();
- if (Util.SDK_INT > 23) {
- releasePlayer();
- }
- }
-
- private void initializePlayer() {
- BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
- TrackSelection.Factory videoTrackSelectionFactory =
- new AdaptiveTrackSelection.Factory(bandwidthMeter);
- mTrackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
-
- mPlayer = ExoPlayerFactory.newSimpleInstance(getActivity(), mTrackSelector);
- mPlayerAdapter = new LeanbackPlayerAdapter(getActivity(), mPlayer, UPDATE_DELAY);
- mPlaylistActionListener = new PlaylistActionListener(mPlaylist);
- mPlayerGlue = new VideoPlayerGlue(getActivity(), mPlayerAdapter, mPlaylistActionListener);
- mPlayerGlue.setHost(new VideoSupportFragmentGlueHost(this));
- mPlayerGlue.playWhenPrepared();
-
- play(mVideo);
-
- ArrayObjectAdapter mRowsAdapter = initializeRelatedVideosRow();
- setAdapter(mRowsAdapter);
- }
-
- private void releasePlayer() {
- if (mPlayer != null) {
- mPlayer.release();
- mPlayer = null;
- mTrackSelector = null;
- mPlayerGlue = null;
- mPlayerAdapter = null;
- mPlaylistActionListener = null;
- }
- }
-
- private void play(Video video) {
- mPlayerGlue.setTitle(video.title);
- mPlayerGlue.setSubtitle(video.description);
- prepareMediaForPlaying(Uri.parse(video.videoUrl));
- mPlayerGlue.play();
- }
-
- private void prepareMediaForPlaying(Uri mediaSourceUri) {
- String userAgent = Util.getUserAgent(getActivity(), "VideoPlayerGlue");
- MediaSource mediaSource =
- new ExtractorMediaSource(
- mediaSourceUri,
- new DefaultDataSourceFactory(getActivity(), userAgent),
- new DefaultExtractorsFactory(),
- null,
- null);
-
- mPlayer.prepare(mediaSource);
- }
-
- private ArrayObjectAdapter initializeRelatedVideosRow() {
- /*
- * To add a new row to the mPlayerAdapter and not lose the controls row that is provided by the
- * glue, we need to compose a new row with the controls row and our related videos row.
- *
- * We start by creating a new {@link ClassPresenterSelector}. Then add the controls row from
- * the media player glue, then add the related videos row.
- */
- ClassPresenterSelector presenterSelector = new ClassPresenterSelector();
- presenterSelector.addClassPresenter(
- mPlayerGlue.getControlsRow().getClass(), mPlayerGlue.getPlaybackRowPresenter());
- presenterSelector.addClassPresenter(ListRow.class, new ListRowPresenter());
-
- ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(presenterSelector);
-
- rowsAdapter.add(mPlayerGlue.getControlsRow());
-
- HeaderItem header = new HeaderItem(getString(R.string.related_movies));
- ListRow row = new ListRow(header, mVideoCursorAdapter);
- rowsAdapter.add(row);
-
- setOnItemViewClickedListener(new ItemViewClickedListener());
-
- return rowsAdapter;
- }
-
- private CursorObjectAdapter setupRelatedVideosCursor() {
- CursorObjectAdapter videoCursorAdapter = new CursorObjectAdapter(new CardPresenter());
- videoCursorAdapter.setMapper(new VideoCursorMapper());
-
- Bundle args = new Bundle();
- args.putString(VideoContract.VideoEntry.COLUMN_CATEGORY, mVideo.category);
- getLoaderManager().initLoader(RELATED_VIDEOS_LOADER, args, mVideoLoaderCallbacks);
-
- return videoCursorAdapter;
- }
-
- public void skipToNext() {
- mPlayerGlue.next();
- }
-
- public void skipToPrevious() {
- mPlayerGlue.previous();
- }
-
- public void rewind() {
- mPlayerGlue.rewind();
- }
-
- public void fastForward() {
- mPlayerGlue.fastForward();
- }
-
- /** Opens the video details page when a related video has been clicked. */
- private final class ItemViewClickedListener implements OnItemViewClickedListener {
- @Override
- public void onItemClicked(
- Presenter.ViewHolder itemViewHolder,
- Object item,
- RowPresenter.ViewHolder rowViewHolder,
- Row row) {
-
- if (item instanceof Video) {
- Video video = (Video) item;
-
- Intent intent = new Intent(getActivity(), VideoDetailsActivity.class);
- intent.putExtra(VideoDetailsActivity.VIDEO, video);
-
- Bundle bundle =
- ActivityOptionsCompat.makeSceneTransitionAnimation(
- getActivity(),
- ((ImageCardView) itemViewHolder.view).getMainImageView(),
- VideoDetailsActivity.SHARED_ELEMENT_NAME)
- .toBundle();
- getActivity().startActivity(intent, bundle);
- }
- }
- }
-
- /** Loads a playlist with videos from a cursor and also updates the related videos cursor. */
- protected class VideoLoaderCallbacks implements LoaderManager.LoaderCallbacks {
-
- static final int RELATED_VIDEOS_LOADER = 1;
- static final int QUEUE_VIDEOS_LOADER = 2;
-
- private final VideoCursorMapper mVideoCursorMapper = new VideoCursorMapper();
-
- private final Playlist playlist;
-
- private VideoLoaderCallbacks(Playlist playlist) {
- this.playlist = playlist;
- }
-
- @Override
- public Loader onCreateLoader(int id, Bundle args) {
- // When loading related videos or videos for the playlist, query by category.
- String category = args.getString(VideoContract.VideoEntry.COLUMN_CATEGORY);
- return new CursorLoader(
- getActivity(),
- VideoContract.VideoEntry.CONTENT_URI,
- null,
- VideoContract.VideoEntry.COLUMN_CATEGORY + " = ?",
- new String[] {category},
- null);
- }
-
- @Override
- public void onLoadFinished(Loader loader, Cursor cursor) {
- if (cursor == null || !cursor.moveToFirst()) {
- return;
- }
- int id = loader.getId();
- if (id == QUEUE_VIDEOS_LOADER) {
- playlist.clear();
- do {
- Video video = (Video) mVideoCursorMapper.convert(cursor);
-
- // Set the current position to the selected video.
- if (video.id == mVideo.id) {
- playlist.setCurrentPosition(playlist.size());
- }
-
- playlist.add(video);
-
- } while (cursor.moveToNext());
- } else if (id == RELATED_VIDEOS_LOADER) {
- mVideoCursorAdapter.changeCursor(cursor);
- }
- }
-
- @Override
- public void onLoaderReset(Loader loader) {
- mVideoCursorAdapter.changeCursor(null);
- }
- }
-
- class PlaylistActionListener implements VideoPlayerGlue.OnActionClickedListener {
-
- private Playlist mPlaylist;
-
- PlaylistActionListener(Playlist playlist) {
- this.mPlaylist = playlist;
- }
-
- @Override
- public void onPrevious() {
- play(mPlaylist.previous());
- }
-
- @Override
- public void onNext() {
- play(mPlaylist.next());
- }
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SearchActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SearchActivity.java
deleted file mode 100644
index 75b7183d3..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SearchActivity.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.KeyEvent;
-
-import com.example.android.tvleanback.R;
-
-/*
- * SearchActivity for SearchFragment
- */
-public class SearchActivity extends LeanbackActivity {
- private SearchFragment mFragment;
-
- /**
- * Called when the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.search);
- mFragment = (SearchFragment) getSupportFragmentManager()
- .findFragmentById(R.id.search_fragment);
- }
-
- @Override
- public boolean onSearchRequested() {
- if (mFragment.hasResults()) {
- startActivity(new Intent(this, SearchActivity.class));
- } else {
- mFragment.startRecognition();
- }
- return true;
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- // If there are no results found, press the left key to reselect the microphone
- if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT && !mFragment.hasResults()) {
- mFragment.focusOnSearch();
- }
- return super.onKeyDown(keyCode, event);
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SearchFragment.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SearchFragment.java
deleted file mode 100644
index 61ad024a4..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SearchFragment.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.Manifest;
-import android.app.Activity;
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.os.Handler;
-import androidx.leanback.app.SearchSupportFragment;
-import androidx.leanback.widget.ArrayObjectAdapter;
-import androidx.leanback.widget.CursorObjectAdapter;
-import androidx.leanback.widget.HeaderItem;
-import androidx.leanback.widget.ImageCardView;
-import androidx.leanback.widget.ListRow;
-import androidx.leanback.widget.ListRowPresenter;
-import androidx.leanback.widget.ObjectAdapter;
-import androidx.leanback.widget.OnItemViewClickedListener;
-import androidx.leanback.widget.Presenter;
-import androidx.leanback.widget.Row;
-import androidx.leanback.widget.RowPresenter;
-import androidx.leanback.widget.SpeechRecognitionCallback;
-import androidx.core.app.ActivityOptionsCompat;
-import androidx.loader.app.LoaderManager;
-import androidx.loader.content.CursorLoader;
-import androidx.loader.content.Loader;
-import android.text.TextUtils;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.example.android.tvleanback.BuildConfig;
-import com.example.android.tvleanback.R;
-import com.example.android.tvleanback.data.VideoContract;
-import com.example.android.tvleanback.model.Video;
-import com.example.android.tvleanback.model.VideoCursorMapper;
-import com.example.android.tvleanback.presenter.CardPresenter;
-
-/*
- * This class demonstrates how to do in-app search
- */
-public class SearchFragment extends SearchSupportFragment
- implements SearchSupportFragment.SearchResultProvider,
- LoaderManager.LoaderCallbacks {
- private static final String TAG = "SearchFragment";
- private static final boolean DEBUG = BuildConfig.DEBUG;
- private static final boolean FINISH_ON_RECOGNIZER_CANCELED = true;
- private static final int REQUEST_SPEECH = 0x00000010;
-
- private final Handler mHandler = new Handler();
- private ArrayObjectAdapter mRowsAdapter;
- private String mQuery;
- private final CursorObjectAdapter mVideoCursorAdapter =
- new CursorObjectAdapter(new CardPresenter());
-
- private int mSearchLoaderId = 1;
- private boolean mResultsFound = false;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mRowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
- mVideoCursorAdapter.setMapper(new VideoCursorMapper());
-
- setSearchResultProvider(this);
- setOnItemViewClickedListener(new ItemViewClickedListener());
- if (DEBUG) {
- Log.d(TAG, "User is initiating a search. Do we have RECORD_AUDIO permission? " +
- hasPermission(Manifest.permission.RECORD_AUDIO));
- }
- if (!hasPermission(Manifest.permission.RECORD_AUDIO)) {
- if (DEBUG) {
- Log.d(TAG, "Does not have RECORD_AUDIO, using SpeechRecognitionCallback");
- }
- // SpeechRecognitionCallback is not required and if not provided recognition will be
- // handled using internal speech recognizer, in which case you must have RECORD_AUDIO
- // permission
- setSpeechRecognitionCallback(new SpeechRecognitionCallback() {
- @Override
- public void recognizeSpeech() {
- try {
- startActivityForResult(getRecognizerIntent(), REQUEST_SPEECH);
- } catch (ActivityNotFoundException e) {
- Log.e(TAG, "Cannot find activity for speech recognizer", e);
- }
- }
- });
- } else if (DEBUG) {
- Log.d(TAG, "We DO have RECORD_AUDIO");
- }
- }
-
- @Override
- public void onPause() {
- mHandler.removeCallbacksAndMessages(null);
- super.onPause();
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- switch (requestCode) {
- case REQUEST_SPEECH:
- switch (resultCode) {
- case Activity.RESULT_OK:
- setSearchQuery(data, true);
- break;
- default:
- // If recognizer is canceled or failed, keep focus on the search orb
- if (FINISH_ON_RECOGNIZER_CANCELED) {
- if (!hasResults()) {
- if (DEBUG) Log.v(TAG, "Voice search canceled");
- getView().findViewById(R.id.lb_search_bar_speech_orb).requestFocus();
- }
- }
- break;
- }
- break;
- }
- }
-
- @Override
- public ObjectAdapter getResultsAdapter() {
- return mRowsAdapter;
- }
-
- @Override
- public boolean onQueryTextChange(String newQuery) {
- if (DEBUG) Log.i(TAG, String.format("Search text changed: %s", newQuery));
- loadQuery(newQuery);
- return true;
- }
-
- @Override
- public boolean onQueryTextSubmit(String query) {
- if (DEBUG) Log.i(TAG, String.format("Search text submitted: %s", query));
- loadQuery(query);
- return true;
- }
-
- public boolean hasResults() {
- return mRowsAdapter.size() > 0 && mResultsFound;
- }
-
- private boolean hasPermission(final String permission) {
- final Context context = getActivity();
- return PackageManager.PERMISSION_GRANTED == context.getPackageManager().checkPermission(
- permission, context.getPackageName());
- }
-
- private void loadQuery(String query) {
- if (!TextUtils.isEmpty(query) && !query.equals("nil")) {
- mQuery = query;
- getLoaderManager().initLoader(mSearchLoaderId++, null, this);
- }
- }
-
- public void focusOnSearch() {
- getView().findViewById(R.id.lb_search_bar).requestFocus();
- }
-
- @Override
- public Loader onCreateLoader(int id, Bundle args) {
- String query = mQuery;
- return new CursorLoader(
- getActivity(),
- VideoContract.VideoEntry.CONTENT_URI,
- null, // Return all fields.
- VideoContract.VideoEntry.COLUMN_NAME + " LIKE ? OR " +
- VideoContract.VideoEntry.COLUMN_DESC + " LIKE ?",
- new String[]{"%" + query + "%", "%" + query + "%"},
- null // Default sort order
- );
- }
-
- @Override
- public void onLoadFinished(Loader loader, Cursor cursor) {
- int titleRes;
- if (cursor != null && cursor.moveToFirst()) {
- mResultsFound = true;
- titleRes = R.string.search_results;
- } else {
- mResultsFound = false;
- titleRes = R.string.no_search_results;
- }
- mVideoCursorAdapter.changeCursor(cursor);
- HeaderItem header = new HeaderItem(getString(titleRes, mQuery));
- mRowsAdapter.clear();
- ListRow row = new ListRow(header, mVideoCursorAdapter);
- mRowsAdapter.add(row);
- }
-
- @Override
- public void onLoaderReset(Loader loader) {
- mVideoCursorAdapter.changeCursor(null);
- }
-
- private final class ItemViewClickedListener implements OnItemViewClickedListener {
- @Override
- public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
- RowPresenter.ViewHolder rowViewHolder, Row row) {
-
- if (item instanceof Video) {
- Video video = (Video) item;
- Intent intent = new Intent(getActivity(), VideoDetailsActivity.class);
- intent.putExtra(VideoDetailsActivity.VIDEO, video);
-
- Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
- getActivity(),
- ((ImageCardView) itemViewHolder.view).getMainImageView(),
- VideoDetailsActivity.SHARED_ELEMENT_NAME).toBundle();
- getActivity().startActivity(intent, bundle);
- } else {
- Toast.makeText(getActivity(), ((String) item), Toast.LENGTH_SHORT).show();
- }
- }
- }
-
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SettingsActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SettingsActivity.java
deleted file mode 100644
index 7e54470b1..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SettingsActivity.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2016 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 com.example.android.tvleanback.ui;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-import com.example.android.tvleanback.R;
-
-public class SettingsActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.settings_fragment);
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SettingsFragment.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SettingsFragment.java
deleted file mode 100644
index 6f203876c..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/SettingsFragment.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2016 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 com.example.android.tvleanback.ui;
-
-import android.content.Intent;
-import android.os.Bundle;
-import androidx.preference.PreferenceFragment;
-import androidx.leanback.preference.LeanbackPreferenceFragment;
-import androidx.leanback.preference.LeanbackSettingsFragment;
-import androidx.preference.DialogPreference;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-
-import com.example.android.tvleanback.R;
-
-public class SettingsFragment extends LeanbackSettingsFragment
- implements DialogPreference.TargetFragment {
- private final static String PREFERENCE_RESOURCE_ID = "preferenceResource";
- private final static String PREFERENCE_ROOT = "root";
- private PreferenceFragment mPreferenceFragment;
-
- @Override
- public void onPreferenceStartInitialScreen() {
- mPreferenceFragment = buildPreferenceFragment(R.xml.settings, null);
- startPreferenceFragment(mPreferenceFragment);
- }
-
- @Override
- public boolean onPreferenceStartFragment(PreferenceFragment preferenceFragment,
- Preference preference) {
- return false;
- }
-
- @Override
- public boolean onPreferenceStartScreen(PreferenceFragment preferenceFragment,
- PreferenceScreen preferenceScreen) {
- PreferenceFragment frag = buildPreferenceFragment(R.xml.settings,
- preferenceScreen.getKey());
- startPreferenceFragment(frag);
- return true;
- }
-
- @Override
- public Preference findPreference(CharSequence charSequence) {
- return mPreferenceFragment.findPreference(charSequence);
- }
-
- private PreferenceFragment buildPreferenceFragment(int preferenceResId, String root) {
- PreferenceFragment fragment = new PrefFragment();
- Bundle args = new Bundle();
- args.putInt(PREFERENCE_RESOURCE_ID, preferenceResId);
- args.putString(PREFERENCE_ROOT, root);
- fragment.setArguments(args);
- return fragment;
- }
-
- public static class PrefFragment extends LeanbackPreferenceFragment {
-
- @Override
- public void onCreatePreferences(Bundle bundle, String s) {
- String root = getArguments().getString(PREFERENCE_ROOT, null);
- int prefResId = getArguments().getInt(PREFERENCE_RESOURCE_ID);
- if (root == null) {
- addPreferencesFromResource(prefResId);
- } else {
- setPreferencesFromResource(prefResId, root);
- }
- }
-
- @Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (preference.getKey().equals(getString(R.string.pref_key_login))) {
- // Open an AuthenticationActivity
- startActivity(new Intent(getActivity(), AuthenticationActivity.class));
- }
- return super.onPreferenceTreeClick(preference);
- }
- }
-}
\ No newline at end of file
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VerticalGridActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VerticalGridActivity.java
deleted file mode 100644
index f91e6f6f6..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VerticalGridActivity.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.os.Bundle;
-
-import com.example.android.tvleanback.R;
-
-/*
- * VerticalGridActivity that loads VerticalGridFragment
- */
-public class VerticalGridActivity extends LeanbackActivity {
- /**
- * Called when the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.vertical_grid);
- getWindow().setBackgroundDrawableResource(R.drawable.grid_bg);
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VerticalGridFragment.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VerticalGridFragment.java
deleted file mode 100644
index 3c98768d1..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VerticalGridFragment.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.content.Intent;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.os.Handler;
-import androidx.leanback.app.VerticalGridSupportFragment;
-import androidx.leanback.widget.CursorObjectAdapter;
-import androidx.leanback.widget.ImageCardView;
-import androidx.leanback.widget.OnItemViewClickedListener;
-import androidx.leanback.widget.OnItemViewSelectedListener;
-import androidx.leanback.widget.Presenter;
-import androidx.leanback.widget.Row;
-import androidx.leanback.widget.RowPresenter;
-import androidx.leanback.widget.VerticalGridPresenter;
-import androidx.core.app.ActivityOptionsCompat;
-import androidx.loader.app.LoaderManager;
-import androidx.loader.content.CursorLoader;
-import androidx.loader.content.Loader;
-import android.view.View;
-
-import com.example.android.tvleanback.R;
-import com.example.android.tvleanback.data.VideoContract;
-import com.example.android.tvleanback.model.Video;
-import com.example.android.tvleanback.model.VideoCursorMapper;
-import com.example.android.tvleanback.presenter.CardPresenter;
-
-/*
- * VerticalGridFragment shows a grid of videos that can be scrolled vertically.
- */
-public class VerticalGridFragment extends VerticalGridSupportFragment
- implements LoaderManager.LoaderCallbacks {
-
- private static final int NUM_COLUMNS = 5;
- private final CursorObjectAdapter mVideoCursorAdapter =
- new CursorObjectAdapter(new CardPresenter());
- private static final int ALL_VIDEOS_LOADER = 1;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mVideoCursorAdapter.setMapper(new VideoCursorMapper());
- setAdapter(mVideoCursorAdapter);
-
- setTitle(getString(R.string.vertical_grid_title));
-
- if (savedInstanceState == null) {
- prepareEntranceTransition();
- }
- setupFragment();
- }
-
- private void setupFragment() {
- VerticalGridPresenter gridPresenter = new VerticalGridPresenter();
- gridPresenter.setNumberOfColumns(NUM_COLUMNS);
- setGridPresenter(gridPresenter);
-
- getLoaderManager().initLoader(ALL_VIDEOS_LOADER, null, this);
-
- // After 500ms, start the animation to transition the cards into view.
- new Handler().postDelayed(new Runnable() {
- public void run() {
- startEntranceTransition();
- }
- }, 500);
-
- setOnSearchClickedListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Intent intent = new Intent(getActivity(), SearchActivity.class);
- startActivity(intent);
- }
- });
-
- setOnItemViewClickedListener(new ItemViewClickedListener());
- setOnItemViewSelectedListener(new ItemViewSelectedListener());
- }
-
- @Override
- public Loader onCreateLoader(int id, Bundle args) {
- return new CursorLoader(
- getActivity(),
- VideoContract.VideoEntry.CONTENT_URI,
- null, // projection
- null, // selection
- null, // selection clause
- null // sort order
- );
- }
-
- @Override
- public void onLoadFinished(Loader loader, Cursor cursor) {
- if (loader.getId() == ALL_VIDEOS_LOADER && cursor != null && cursor.moveToFirst()) {
- mVideoCursorAdapter.changeCursor(cursor);
- }
- }
-
- @Override
- public void onLoaderReset(Loader loader) {
- mVideoCursorAdapter.changeCursor(null);
- }
-
- private final class ItemViewClickedListener implements OnItemViewClickedListener {
- @Override
- public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
- RowPresenter.ViewHolder rowViewHolder, Row row) {
-
- if (item instanceof Video) {
- Video video = (Video) item;
-
- Intent intent = new Intent(getActivity(), VideoDetailsActivity.class);
- intent.putExtra(VideoDetailsActivity.VIDEO, video);
-
- Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
- getActivity(),
- ((ImageCardView) itemViewHolder.view).getMainImageView(),
- VideoDetailsActivity.SHARED_ELEMENT_NAME).toBundle();
- getActivity().startActivity(intent, bundle);
- }
- }
- }
-
- private final class ItemViewSelectedListener implements OnItemViewSelectedListener {
- @Override
- public void onItemSelected(Presenter.ViewHolder itemViewHolder, Object item,
- RowPresenter.ViewHolder rowViewHolder, Row row) {
- }
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VideoDetailsActivity.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VideoDetailsActivity.java
deleted file mode 100644
index 7079aebca..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VideoDetailsActivity.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.os.Bundle;
-
-import com.example.android.tvleanback.R;
-
-/*
- * Details activity class that loads VideoDetailsFragment class
- */
-public class VideoDetailsActivity extends LeanbackActivity {
- public static final String SHARED_ELEMENT_NAME = "hero";
- public static final String VIDEO = "Video";
- public static final String NOTIFICATION_ID = "NotificationId";
-
- /**
- * Called when the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.fragment_details);
- }
-}
diff --git a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VideoDetailsFragment.java b/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VideoDetailsFragment.java
deleted file mode 100644
index 6b3fd69fe..000000000
--- a/Leanback/app/src/main/java/com/example/android/tvleanback/ui/VideoDetailsFragment.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright (c) 2014 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 com.example.android.tvleanback.ui;
-
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Bundle;
-import androidx.leanback.app.BackgroundManager;
-import androidx.leanback.app.DetailsSupportFragment;
-import androidx.leanback.widget.Action;
-import androidx.leanback.widget.ArrayObjectAdapter;
-import androidx.leanback.widget.ClassPresenterSelector;
-import androidx.leanback.widget.CursorObjectAdapter;
-import androidx.leanback.widget.DetailsOverviewLogoPresenter;
-import androidx.leanback.widget.DetailsOverviewRow;
-import androidx.leanback.widget.FullWidthDetailsOverviewRowPresenter;
-import androidx.leanback.widget.FullWidthDetailsOverviewSharedElementHelper;
-import androidx.leanback.widget.HeaderItem;
-import androidx.leanback.widget.ImageCardView;
-import androidx.leanback.widget.ListRow;
-import androidx.leanback.widget.ListRowPresenter;
-import androidx.leanback.widget.OnActionClickedListener;
-import androidx.leanback.widget.OnItemViewClickedListener;
-import androidx.leanback.widget.Presenter;
-import androidx.leanback.widget.Row;
-import androidx.leanback.widget.RowPresenter;
-import androidx.leanback.widget.SparseArrayObjectAdapter;
-import androidx.core.app.ActivityOptionsCompat;
-import androidx.loader.app.LoaderManager;
-import androidx.core.content.ContextCompat;
-import androidx.loader.content.CursorLoader;
-import androidx.loader.content.Loader;
-import android.util.DisplayMetrics;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.Toast;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.RequestOptions;
-import com.bumptech.glide.request.target.SimpleTarget;
-import com.bumptech.glide.request.transition.Transition;
-import com.example.android.tvleanback.R;
-import com.example.android.tvleanback.data.VideoContract;
-import com.example.android.tvleanback.model.Video;
-import com.example.android.tvleanback.model.VideoCursorMapper;
-import com.example.android.tvleanback.presenter.CardPresenter;
-import com.example.android.tvleanback.presenter.DetailsDescriptionPresenter;
-
-/*
- * VideoDetailsFragment extends DetailsFragment, a Wrapper fragment for leanback details screens.
- * It shows a detailed view of video and its metadata plus related videos.
- */
-public class VideoDetailsFragment extends DetailsSupportFragment
- implements LoaderManager.LoaderCallbacks {
-
- private static final int NO_NOTIFICATION = -1;
- private static final int ACTION_WATCH_TRAILER = 1;
- private static final int ACTION_RENT = 2;
- private static final int ACTION_BUY = 3;
-
- // ID for loader that loads related videos.
- private static final int RELATED_VIDEO_LOADER = 1;
-
- // ID for loader that loads the video from global search.
- private int mGlobalSearchVideoId = 2;
-
- private Video mSelectedVideo;
- private ArrayObjectAdapter mAdapter;
- private ClassPresenterSelector mPresenterSelector;
- private BackgroundManager mBackgroundManager;
- private Drawable mDefaultBackground;
- private DisplayMetrics mMetrics;
- private CursorObjectAdapter mVideoCursorAdapter;
- private FullWidthDetailsOverviewSharedElementHelper mHelper;
- private final VideoCursorMapper mVideoCursorMapper = new VideoCursorMapper();
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- prepareBackgroundManager();
- mVideoCursorAdapter = new CursorObjectAdapter(new CardPresenter());
- mVideoCursorAdapter.setMapper(mVideoCursorMapper);
-
- mSelectedVideo = (Video) getActivity().getIntent()
- .getParcelableExtra(VideoDetailsActivity.VIDEO);
-
- if (mSelectedVideo != null || !hasGlobalSearchIntent()) {
- removeNotification(getActivity().getIntent()
- .getIntExtra(VideoDetailsActivity.NOTIFICATION_ID, NO_NOTIFICATION));
- setupAdapter();
- setupDetailsOverviewRow();
- setupMovieListRow();
- updateBackground(mSelectedVideo.bgImageUrl);
-
- // When a Related Video item is clicked.
- setOnItemViewClickedListener(new ItemViewClickedListener());
- }
- }
-
- private void removeNotification(int notificationId) {
- if (notificationId != NO_NOTIFICATION) {
- NotificationManager notificationManager = (NotificationManager) getActivity()
- .getSystemService(Context.NOTIFICATION_SERVICE);
- notificationManager.cancel(notificationId);
- }
- }
-
- @Override
- public void onStop() {
- mBackgroundManager.release();
- super.onStop();
- }
-
- /**
- * Check if there is a global search intent. If there is, load that video.
- */
- private boolean hasGlobalSearchIntent() {
- Intent intent = getActivity().getIntent();
- String intentAction = intent.getAction();
- String globalSearch = getString(R.string.global_search);
-
- if (globalSearch.equalsIgnoreCase(intentAction)) {
- Uri intentData = intent.getData();
- String videoId = intentData.getLastPathSegment();
-
- Bundle args = new Bundle();
- args.putString(VideoContract.VideoEntry._ID, videoId);
- getLoaderManager().initLoader(mGlobalSearchVideoId++, args, this);
- return true;
- }
- return false;
- }
-
- private void prepareBackgroundManager() {
- mBackgroundManager = BackgroundManager.getInstance(getActivity());
- mBackgroundManager.attach(getActivity().getWindow());
- mDefaultBackground = getResources().getDrawable(R.drawable.default_background, null);
- mMetrics = new DisplayMetrics();
- getActivity().getWindowManager().getDefaultDisplay().getMetrics(mMetrics);
- }
-
- private void updateBackground(String uri) {
- RequestOptions options = new RequestOptions()
- .centerCrop()
- .error(mDefaultBackground);
-
- Glide.with(this)
- .asBitmap()
- .load(uri)
- .apply(options)
- .into(new SimpleTarget(mMetrics.widthPixels, mMetrics.heightPixels) {
- @Override
- public void onResourceReady(
- Bitmap resource,
- Transition super Bitmap> transition) {
- mBackgroundManager.setBitmap(resource);
- }
- });
- }
-
- private void setupAdapter() {
- // Set detail background and style.
- FullWidthDetailsOverviewRowPresenter detailsPresenter =
- new FullWidthDetailsOverviewRowPresenter(new DetailsDescriptionPresenter(),
- new MovieDetailsOverviewLogoPresenter());
-
- detailsPresenter.setBackgroundColor(
- ContextCompat.getColor(getActivity(), R.color.selected_background));
- detailsPresenter.setInitialState(FullWidthDetailsOverviewRowPresenter.STATE_HALF);
-
- // Hook up transition element.
- mHelper = new FullWidthDetailsOverviewSharedElementHelper();
- mHelper.setSharedElementEnterTransition(getActivity(),
- VideoDetailsActivity.SHARED_ELEMENT_NAME);
- detailsPresenter.setListener(mHelper);
- detailsPresenter.setParticipatingEntranceTransition(false);
- prepareEntranceTransition();
-
- detailsPresenter.setOnActionClickedListener(new OnActionClickedListener() {
- @Override
- public void onActionClicked(Action action) {
- if (action.getId() == ACTION_WATCH_TRAILER) {
- Intent intent = new Intent(getActivity(), PlaybackActivity.class);
- intent.putExtra(VideoDetailsActivity.VIDEO, mSelectedVideo);
- startActivity(intent);
- } else {
- Toast.makeText(getActivity(), action.toString(), Toast.LENGTH_SHORT).show();
- }
- }
- });
-
- mPresenterSelector = new ClassPresenterSelector();
- mPresenterSelector.addClassPresenter(DetailsOverviewRow.class, detailsPresenter);
- mPresenterSelector.addClassPresenter(ListRow.class, new ListRowPresenter());
- mAdapter = new ArrayObjectAdapter(mPresenterSelector);
- setAdapter(mAdapter);
- }
-
- @Override
- public Loader onCreateLoader(int id, Bundle args) {
- switch (id) {
- case RELATED_VIDEO_LOADER: {
- String category = args.getString(VideoContract.VideoEntry.COLUMN_CATEGORY);
- return new CursorLoader(
- getActivity(),
- VideoContract.VideoEntry.CONTENT_URI,
- null,
- VideoContract.VideoEntry.COLUMN_CATEGORY + " = ?",
- new String[]{category},
- null
- );
- }
- default: {
- // Loading video from global search.
- String videoId = args.getString(VideoContract.VideoEntry._ID);
- return new CursorLoader(
- getActivity(),
- VideoContract.VideoEntry.CONTENT_URI,
- null,
- VideoContract.VideoEntry._ID + " = ?",
- new String[]{videoId},
- null
- );
- }
- }
-
- }
-
- @Override
- public void onLoadFinished(Loader loader, Cursor cursor) {
- if (cursor != null && cursor.moveToNext()) {
- switch (loader.getId()) {
- case RELATED_VIDEO_LOADER: {
- mVideoCursorAdapter.changeCursor(cursor);
- break;
- }
- default: {
- // Loading video from global search.
- mSelectedVideo = (Video) mVideoCursorMapper.convert(cursor);
-
- setupAdapter();
- setupDetailsOverviewRow();
- setupMovieListRow();
- updateBackground(mSelectedVideo.bgImageUrl);
-
- // When a Related Video item is clicked.
- setOnItemViewClickedListener(new ItemViewClickedListener());
- }
- }
- }
- }
-
- @Override
- public void onLoaderReset(Loader loader) {
- mVideoCursorAdapter.changeCursor(null);
- }
-
- static class MovieDetailsOverviewLogoPresenter extends DetailsOverviewLogoPresenter {
-
- static class ViewHolder extends DetailsOverviewLogoPresenter.ViewHolder {
- public ViewHolder(View view) {
- super(view);
- }
-
- public FullWidthDetailsOverviewRowPresenter getParentPresenter() {
- return mParentPresenter;
- }
-
- public FullWidthDetailsOverviewRowPresenter.ViewHolder getParentViewHolder() {
- return mParentViewHolder;
- }
- }
-
- @Override
- public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
- ImageView imageView = (ImageView) LayoutInflater.from(parent.getContext())
- .inflate(R.layout.lb_fullwidth_details_overview_logo, parent, false);
-
- Resources res = parent.getResources();
- int width = res.getDimensionPixelSize(R.dimen.detail_thumb_width);
- int height = res.getDimensionPixelSize(R.dimen.detail_thumb_height);
- imageView.setLayoutParams(new ViewGroup.MarginLayoutParams(width, height));
- imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
-
- return new ViewHolder(imageView);
- }
-
- @Override
- public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
- DetailsOverviewRow row = (DetailsOverviewRow) item;
- ImageView imageView = ((ImageView) viewHolder.view);
- imageView.setImageDrawable(row.getImageDrawable());
- if (isBoundToImage((ViewHolder) viewHolder, row)) {
- MovieDetailsOverviewLogoPresenter.ViewHolder vh =
- (MovieDetailsOverviewLogoPresenter.ViewHolder) viewHolder;
- vh.getParentPresenter().notifyOnBindLogo(vh.getParentViewHolder());
- }
- }
- }
-
- private void setupDetailsOverviewRow() {
- final DetailsOverviewRow row = new DetailsOverviewRow(mSelectedVideo);
-
- RequestOptions options = new RequestOptions()
- .error(R.drawable.default_background)
- .dontAnimate();
-
- Glide.with(this)
- .asBitmap()
- .load(mSelectedVideo.cardImageUrl)
- .apply(options)
- .into(new SimpleTarget() {
- @Override
- public void onResourceReady(
- Bitmap resource,
- Transition super Bitmap> transition) {
- row.setImageBitmap(getActivity(), resource);
- startEntranceTransition();
- }
- });
-
- SparseArrayObjectAdapter adapter = new SparseArrayObjectAdapter();
-
- adapter.set(ACTION_WATCH_TRAILER, new Action(ACTION_WATCH_TRAILER, getResources()
- .getString(R.string.watch_trailer_1),
- getResources().getString(R.string.watch_trailer_2)));
- adapter.set(ACTION_RENT, new Action(ACTION_RENT, getResources().getString(R.string.rent_1),
- getResources().getString(R.string.rent_2)));
- adapter.set(ACTION_BUY, new Action(ACTION_BUY, getResources().getString(R.string.buy_1),
- getResources().getString(R.string.buy_2)));
- row.setActionsAdapter(adapter);
-
- mAdapter.add(row);
- }
-
- private void setupMovieListRow() {
- String subcategories[] = {getString(R.string.related_movies)};
-
- // Generating related video list.
- String category = mSelectedVideo.category;
-
- Bundle args = new Bundle();
- args.putString(VideoContract.VideoEntry.COLUMN_CATEGORY, category);
- getLoaderManager().initLoader(RELATED_VIDEO_LOADER, args, this);
-
- HeaderItem header = new HeaderItem(0, subcategories[0]);
- mAdapter.add(new ListRow(header, mVideoCursorAdapter));
- }
-
- private final class ItemViewClickedListener implements OnItemViewClickedListener {
- @Override
- public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
- RowPresenter.ViewHolder rowViewHolder, Row row) {
-
- if (item instanceof Video) {
- Video video = (Video) item;
- Intent intent = new Intent(getActivity(), VideoDetailsActivity.class);
- intent.putExtra(VideoDetailsActivity.VIDEO, video);
-
- Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(
- getActivity(),
- ((ImageCardView) itemViewHolder.view).getMainImageView(),
- VideoDetailsActivity.SHARED_ELEMENT_NAME).toBundle();
- getActivity().startActivity(intent, bundle);
- }
- }
- }
-}
diff --git a/Leanback/app/src/main/res/layout/guidedstep_second_guidance.xml b/Leanback/app/src/main/res/layout/guidedstep_second_guidance.xml
deleted file mode 100644
index a8e4aa3d9..000000000
--- a/Leanback/app/src/main/res/layout/guidedstep_second_guidance.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Leanback/app/src/main/res/layout/icon_header_item.xml b/Leanback/app/src/main/res/layout/icon_header_item.xml
deleted file mode 100644
index 5c16434ef..000000000
--- a/Leanback/app/src/main/res/layout/icon_header_item.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
diff --git a/Leanback/app/src/main/res/layout/main.xml b/Leanback/app/src/main/res/layout/main.xml
deleted file mode 100644
index b68fe0326..000000000
--- a/Leanback/app/src/main/res/layout/main.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
diff --git a/Leanback/app/src/main/res/layout/onboarding.xml b/Leanback/app/src/main/res/layout/onboarding.xml
deleted file mode 100644
index 0f62b6042..000000000
--- a/Leanback/app/src/main/res/layout/onboarding.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
diff --git a/Leanback/app/src/main/res/layout/search.xml b/Leanback/app/src/main/res/layout/search.xml
deleted file mode 100644
index a63ad8c9b..000000000
--- a/Leanback/app/src/main/res/layout/search.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
diff --git a/Leanback/app/src/main/res/layout/settings_fragment.xml b/Leanback/app/src/main/res/layout/settings_fragment.xml
deleted file mode 100644
index 4d363b708..000000000
--- a/Leanback/app/src/main/res/layout/settings_fragment.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/Leanback/app/src/main/res/layout/vertical_grid.xml b/Leanback/app/src/main/res/layout/vertical_grid.xml
deleted file mode 100644
index a90c6e2a1..000000000
--- a/Leanback/app/src/main/res/layout/vertical_grid.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
diff --git a/Leanback/app/src/main/res/xml/settings.xml b/Leanback/app/src/main/res/xml/settings.xml
deleted file mode 100644
index 61667058e..000000000
--- a/Leanback/app/src/main/res/xml/settings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Leanback/build.gradle b/Leanback/build.gradle
deleted file mode 100644
index 5953e4b80..000000000
--- a/Leanback/build.gradle
+++ /dev/null
@@ -1,22 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-buildscript {
- repositories {
- google()
- mavenCentral()
- jcenter()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:3.3.0'
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-allprojects {
- repositories {
- google()
- mavenCentral()
- jcenter()
- }
-}
\ No newline at end of file
diff --git a/Leanback/gradle.properties b/Leanback/gradle.properties
deleted file mode 100644
index 52c5562e2..000000000
--- a/Leanback/gradle.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-android.enableJetifier = true
-android.useAndroidX = true
\ No newline at end of file
diff --git a/Leanback/settings.gradle b/Leanback/settings.gradle
deleted file mode 100644
index e7b4def49..000000000
--- a/Leanback/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include ':app'
diff --git a/LeanbackShowcase/build.gradle b/LeanbackShowcase/build.gradle
index 56f373eaf..e8edd67bf 100644
--- a/LeanbackShowcase/build.gradle
+++ b/LeanbackShowcase/build.gradle
@@ -19,7 +19,7 @@
buildscript {
repositories {
google()
- jcenter()
+ mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.2.1'
@@ -31,7 +31,7 @@ buildscript {
allprojects {
repositories {
- jcenter()
+ mavenCentral()
google()
}
}
diff --git a/Leanback/.gitignore b/LeanbackToCompose/.gitignore
similarity index 89%
rename from Leanback/.gitignore
rename to LeanbackToCompose/.gitignore
index 6c8c2cc8f..a60bf856b 100644
--- a/Leanback/.gitignore
+++ b/LeanbackToCompose/.gitignore
@@ -33,3 +33,8 @@ Thumbs.db
#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.
.gradle
build/
+
+# Google3 / Bazel build files
+BUILD
+BUILD.bazel
+
diff --git a/Leanback/.google/packaging.yaml b/LeanbackToCompose/.google/packaging.yaml
similarity index 100%
rename from Leanback/.google/packaging.yaml
rename to LeanbackToCompose/.google/packaging.yaml
diff --git a/LeanbackToCompose/README.md b/LeanbackToCompose/README.md
new file mode 100644
index 000000000..68fbcedd0
--- /dev/null
+++ b/LeanbackToCompose/README.md
@@ -0,0 +1,63 @@
+# Leanback UI Toolkit to Compose Migration Sample
+
+This sample demonstrates how to migrate an Android TV application from the deprecated Leanback UI Toolkit to **Jetpack Compose for TV**. It serves as a reference implementation showing before-and-after states for common TV UI components.
+
+## Getting Started
+
+- Open the `LeanbackToCompose` project in Android Studio.
+- Compile and deploy to your Android TV emulator or device (API 23+).
+
+## Explore the Migration
+
+The sample demonstrates migration of the following key features:
+- **Onboarding Flow**: Guided introduction to the app.
+- **Catalog Browsing**: Catalog of videos grouped by category using TV-optimized lazy rows/columns.
+- **Immersive Details**: Rich details view with related content recommendations.
+- **Media Playback**: Integrated media player using Media3 ExoPlayer.
+- **Search**: In-app search functionality.
+- **Settings & Preferences**: TV-optimized settings panel.
+- **Guided Steps**: Multi-step user flows (e.g., subscription wizard).
+
+---
+
+## Migration Showcase (Before vs. After)
+
+Here is a side-by-side comparison of the legacy Leanback UI (left) and the modernized Jetpack Compose for TV UI (right).
+
+| Component / Screen | Leanback (Before) | Compose (After) |
+| :--- | :---: | :---: |
+| **Onboarding**
Introduces users to the app features. |  |  |
+| **Browse (Home & Card Views)**
Main landing screen with categorized content and horizontal card lists. | 
 |  |
+| **Details Screen**
In-depth information about a specific video. |  |  |
+| **Details Row**
Related content rows within the details screen. |  |  |
+| **Vertical Grid**
Freeform vertical grid of content. |  |  |
+| **Search**
In-app search interface. |  |  |
+| **Guided Step (Wizard)**
Multi-step decision flow (e.g., subscription). |  |  |
+| **Settings**
Side-panel settings overlay. |  |  |
+| **Error Screen**
Standardized error feedback. |  |  |
+
+### Generating Screenshots
+
+To automatically navigate through the sample application and regenerate all 10 screenshot assets from a connected Android TV emulator or device, execute the included script:
+
+```sh
+./screenshots/capture_screenshots.sh [-s ]
+```
+
+## Support
+
+- Stack Overflow: [http://stackoverflow.com/questions/tagged/android-tv](http://stackoverflow.com/questions/tagged/android-tv)
+
+## Key Dependencies
+
+- **Jetpack Compose for TV** (`androidx.tv:tv-material`)
+- **Media3 ExoPlayer** (`androidx.media3:media3-exoplayer`)
+- **Coil** for image loading (`io.coil-kt:coil-compose`)
+
+## Contributing
+
+We love contributions! Please follow the steps in the [CONTRIBUTING guide](../CONTRIBUTING.md) to get started.
+
+## License
+
+See the [LICENSE](../LICENSE) file for details.
diff --git a/LeanbackToCompose/app/build.gradle b/LeanbackToCompose/app/build.gradle
new file mode 100644
index 000000000..cbd6e37ad
--- /dev/null
+++ b/LeanbackToCompose/app/build.gradle
@@ -0,0 +1,94 @@
+plugins {
+ alias(libs.plugins.android.application)
+ alias(libs.plugins.kotlin.android)
+}
+
+android {
+ namespace 'com.example.android.tvleanback'
+ compileSdk 35
+
+ defaultConfig {
+ applicationId "com.example.android.tvleanback"
+ minSdk 23
+ targetSdk 35
+ versionCode 2
+ versionName "1.3"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ vectorDrawables {
+ useSupportLibrary true
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_17
+ targetCompatibility JavaVersion.VERSION_17
+ }
+ kotlinOptions {
+ jvmTarget = '17'
+ freeCompilerArgs += [
+ "-opt-in=androidx.tv.material3.ExperimentalTvMaterial3Api",
+ "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi"
+ ]
+ }
+ buildFeatures {
+ compose true
+ }
+ composeOptions {
+ kotlinCompilerExtensionVersion '1.5.11'
+ }
+}
+
+dependencies {
+ implementation libs.androidx.core.ktx
+ implementation libs.androidx.appcompat
+ implementation libs.androidx.activity.compose
+
+ // Compose Core & Tooling
+ implementation platform(libs.androidx.compose.bom)
+ implementation libs.androidx.compose.ui
+ implementation libs.androidx.compose.ui.graphics
+ implementation libs.androidx.compose.ui.tooling.preview
+ implementation libs.androidx.compose.foundation
+ implementation libs.androidx.compose.material3
+
+ // Jetpack Compose for TV (Stable 1.0.0! Removed deprecated tv-foundation!)
+ implementation libs.androidx.tv.material
+ implementation libs.androidx.profileinstaller
+
+ // Leanback compatibility (for manifest themes & resources)
+ implementation libs.androidx.leanback
+ implementation libs.androidx.leanback.preference
+
+ // Media3 (ExoPlayer & Native Compose UI)
+ implementation libs.androidx.media3.exoplayer
+ implementation libs.androidx.media3.ui
+ implementation libs.androidx.media3.common
+ implementation libs.androidx.media3.ui.compose
+ implementation libs.androidx.media3.ui.compose.material3
+
+ // Image Loading (Coil for Compose)
+ implementation libs.coil
+
+ // Coroutines & Lifecycle
+ implementation libs.kotlinx.coroutines.android
+ implementation libs.androidx.lifecycle.runtime.ktx
+ implementation libs.androidx.lifecycle.viewmodel.compose
+
+ // Preferences
+ implementation libs.androidx.preference.ktx
+
+ // Testing
+ testImplementation libs.junit
+ androidTestImplementation libs.androidx.junit
+ androidTestImplementation libs.androidx.espresso.core
+ androidTestImplementation platform(libs.androidx.compose.bom)
+ androidTestImplementation libs.androidx.compose.ui.test.junit4
+ debugImplementation libs.androidx.compose.ui.tooling
+ debugImplementation libs.androidx.compose.ui.test.manifest
+}
diff --git a/Leanback/app/proguard-rules.pro b/LeanbackToCompose/app/proguard-rules.pro
similarity index 100%
rename from Leanback/app/proguard-rules.pro
rename to LeanbackToCompose/app/proguard-rules.pro
diff --git a/Leanback/app/src/androidTest/java/com/example/android/tvleanback/VideoDbIntegrationTest.java b/LeanbackToCompose/app/src/androidTest/java/com/example/android/tvleanback/VideoDbIntegrationTest.java
similarity index 100%
rename from Leanback/app/src/androidTest/java/com/example/android/tvleanback/VideoDbIntegrationTest.java
rename to LeanbackToCompose/app/src/androidTest/java/com/example/android/tvleanback/VideoDbIntegrationTest.java
diff --git a/Leanback/app/src/androidTest/java/com/example/android/tvleanback/VideoTest.java b/LeanbackToCompose/app/src/androidTest/java/com/example/android/tvleanback/VideoTest.java
similarity index 100%
rename from Leanback/app/src/androidTest/java/com/example/android/tvleanback/VideoTest.java
rename to LeanbackToCompose/app/src/androidTest/java/com/example/android/tvleanback/VideoTest.java
diff --git a/Leanback/app/src/main/AndroidManifest.xml b/LeanbackToCompose/app/src/main/AndroidManifest.xml
similarity index 89%
rename from Leanback/app/src/main/AndroidManifest.xml
rename to LeanbackToCompose/app/src/main/AndroidManifest.xml
index 1775138b5..1ab7fea1b 100644
--- a/Leanback/app/src/main/AndroidManifest.xml
+++ b/LeanbackToCompose/app/src/main/AndroidManifest.xml
@@ -14,8 +14,8 @@
limitations under the License.
-->
+ xmlns:tools="http://schemas.android.com/tools">
+
-
+
@@ -95,6 +98,7 @@
android:parentActivityName=".ui.MainActivity"
android:theme="@style/Theme.Leanback.VerticalGrid" />
+
@@ -110,21 +114,9 @@
android:readPermission="android.permission.GLOBAL_SEARCH" />
-
-
-
-
-
-
-
(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/ContentTransform;)V
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$1;->(Landroidx/compose/animation/ContentTransform;)V
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$4$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentScope;)V
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$4;->(Landroidx/compose/animation/AnimatedContentScope;Ljava/lang/Object;Lkotlin/jvm/functions/Function4;ILandroidx/compose/runtime/snapshots/SnapshotStateList;)V
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$8;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V
+HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentKt;->AnimatedContent(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
+HPLandroidx/compose/animation/AnimatedContentKt;->AnimatedContent(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
+HPLandroidx/compose/animation/AnimatedContentKt;->with(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ContentTransform;
+HPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->([Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/AnimatedContentMeasurePolicy;II)V
+HPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HPLandroidx/compose/animation/AnimatedContentScope$SizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentScope$SizeModifier$measure$size$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentScope$SizeModifier$measure$size$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedContentScope$SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
+HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->invoke()Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;I)V
+HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$8;->(Landroidx/compose/animation/core/MutableTransitionState;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V
+HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedEnterExitImpl(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
+HPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/animation/core/MutableTransitionState;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HPLandroidx/compose/animation/AnimatedVisibilityKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/EnterExitState;
+HPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->(Landroidx/compose/animation/core/Transition;)V
+HPLandroidx/compose/animation/ContentTransform;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V
+HPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V
+HPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
+HPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V
+HPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/EnterTransition;->equals(Ljava/lang/Object;)Z
+HPLandroidx/compose/animation/EnterTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData;
+HPLandroidx/compose/animation/ExitTransition;->equals(Ljava/lang/Object;)Z
+HPLandroidx/compose/animation/ExitTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData;
+HPLandroidx/compose/animation/SizeTransformImpl;->createAnimationSpec-TemP2vQ(JJ)Landroidx/compose/animation/core/FiniteAnimationSpec;
+HPLandroidx/compose/animation/SlideModifier$measure$1$slideOffset$1;->(Landroidx/compose/animation/SlideModifier;J)V
+HPLandroidx/compose/animation/SlideModifier$measure$1$slideOffset$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/SlideModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/SlideModifier$transitionSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/SlideModifier;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V
+HPLandroidx/compose/animation/SlideModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HPLandroidx/compose/animation/core/AnimationVector2D;->(FF)V
+HPLandroidx/compose/animation/core/AnimationVector2D;->get$animation_core_release(I)F
+HPLandroidx/compose/animation/core/AnimationVector2D;->getSize$animation_core_release()I
+HPLandroidx/compose/animation/core/AnimationVector2D;->set$animation_core_release(FI)V
+HPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F
+HPLandroidx/compose/animation/core/FloatTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V
+HPLandroidx/compose/animation/core/FloatTweenSpec;->clampPlayTime(J)J
+HPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F
+HPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F
+HPLandroidx/compose/animation/core/MutableTransitionState;->(Ljava/lang/Object;)V
+HPLandroidx/compose/animation/core/MutableTransitionState;->isIdle()Z
+HPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getValue()Ljava/lang/Object;
+HPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->updateAnimationStates(Landroidx/compose/animation/core/Transition$Segment;)V
+HPLandroidx/compose/animation/core/Transition$DeferredAnimation;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;)V
+HPLandroidx/compose/animation/core/Transition$DeferredAnimation;->animate(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;
+HPLandroidx/compose/animation/core/Transition$Segment;->isTransitioningTo(Landroidx/compose/animation/EnterExitState;Landroidx/compose/animation/EnterExitState;)Z
+HPLandroidx/compose/animation/core/Transition$SegmentImpl;->(Ljava/lang/Object;Ljava/lang/Object;)V
+HPLandroidx/compose/animation/core/Transition$SegmentImpl;->equals(Ljava/lang/Object;)Z
+HPLandroidx/compose/animation/core/Transition$SegmentImpl;->getInitialState()Ljava/lang/Object;
+HPLandroidx/compose/animation/core/Transition$SegmentImpl;->getTargetState()Ljava/lang/Object;
+HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V
+HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimation()Landroidx/compose/animation/core/TargetBasedAnimation;
+HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;
+HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getValue()Ljava/lang/Object;
+HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation$default(Landroidx/compose/animation/core/Transition$TransitionAnimationState;Ljava/lang/Object;ZI)V
+HPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateTargetValue$animation_core_release(Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;)V
+HPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->(Landroidx/compose/animation/core/Transition;F)V
+HPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/core/Transition$animateTo$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/core/Transition$animateTo$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V
+HPLandroidx/compose/animation/core/Transition$updateTarget$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V
+HPLandroidx/compose/animation/core/Transition;->(Landroidx/compose/animation/core/MutableTransitionState;Ljava/lang/String;)V
+HPLandroidx/compose/animation/core/Transition;->animateTo$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HPLandroidx/compose/animation/core/Transition;->getCurrentState()Ljava/lang/Object;
+HPLandroidx/compose/animation/core/Transition;->getSegment()Landroidx/compose/animation/core/Transition$Segment;
+HPLandroidx/compose/animation/core/Transition;->getTargetState()Ljava/lang/Object;
+HPLandroidx/compose/animation/core/Transition;->isSeeking()Z
+HPLandroidx/compose/animation/core/Transition;->onFrame$animation_core_release(FJ)V
+HPLandroidx/compose/animation/core/Transition;->onTransitionEnd$animation_core_release()V
+HPLandroidx/compose/animation/core/Transition;->updateTarget$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V
+HPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;->dispose()V
+HPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;->dispose()V
+HPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/core/TransitionKt;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition$DeferredAnimation;
+HPLandroidx/compose/animation/core/TransitionKt;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/Transition$TransitionAnimationState;
+HPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;
+HPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/animation/core/VectorizedAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
+HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
+HPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V
+HPLandroidx/compose/animation/core/VectorizedTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V
+HPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HPLandroidx/compose/foundation/BorderKt$drawRoundRectBorder$1;->(ZLandroidx/compose/ui/graphics/Brush;JFFJJLandroidx/compose/ui/graphics/drawscope/Stroke;)V
+HPLandroidx/compose/foundation/BorderKt$drawRoundRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
+HPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->([Landroidx/compose/ui/layout/Placeable;Ljava/util/List;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/internal/Ref$IntRef;Lkotlin/jvm/internal/Ref$IntRef;Landroidx/compose/ui/Alignment;)V
+HPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V
+HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->(ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/material/ripple/RippleContainer;)V
+HPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HPLandroidx/compose/material/ripple/PlatformRipple;->rememberUpdatedRippleInstance-942rkJo(Landroidx/compose/foundation/interaction/InteractionSource;ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/Composer;)Landroidx/compose/material/ripple/RippleIndicationInstance;
+HPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance;
+HPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V
+HPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/ButtonElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V
+HPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/material3/ButtonElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/AnimationState;
+HPLandroidx/compose/material3/ButtonKt$Button$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/material3/ButtonKt$Button$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/material3/ButtonKt$Button$3;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V
+HPLandroidx/compose/material3/ButtonKt;->Button(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HPLandroidx/compose/material3/ColorSchemeKt;->toColor(ILandroidx/compose/runtime/Composer;)J
+HPLandroidx/compose/material3/MinimumTouchTargetModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/material3/MinimumTouchTargetModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HPLandroidx/compose/material3/SurfaceKt$Surface$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFIFLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V
+HPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/material3/TextKt$Text$2;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V
+HPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V
+HPLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/runtime/AbstractApplier;->clear()V
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V
+HPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
+HPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->(Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2;Landroidx/compose/runtime/ComposerImpl;)V
+HPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V
+HPLandroidx/compose/runtime/ComposerImpl;->endMovableGroup()V
+HPLandroidx/compose/runtime/ComposerImpl;->startMovableGroup(ILjava/lang/Object;)V
+HPLandroidx/compose/runtime/CompositionImpl;->dispose()V
+HPLandroidx/compose/runtime/JoinedKey;->hashCode()I
+HPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I
+HPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z
+HPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V
+HPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V
+HPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V
+HPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V
+HPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V
+HPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet;
+HPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getModification$runtime_release()I
+HPLandroidx/compose/runtime/snapshots/SnapshotStateList;->listIterator()Ljava/util/ListIterator;
+HPLandroidx/compose/runtime/snapshots/StateListIterator;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V
+HPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z
+HPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object;
+HPLandroidx/compose/runtime/snapshots/StateListIterator;->validateModification()V
+HPLandroidx/compose/ui/focus/FocusRequesterModifierNodeImpl;->onDetach()V
+HPLandroidx/compose/ui/geometry/RoundRectKt;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z
+HPLandroidx/compose/ui/graphics/AndroidCanvas;->clipRect-N_I0leg(FFFFI)V
+HPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
+HPLandroidx/compose/ui/graphics/Canvas;->clipRect-mtrdD-E(Landroidx/compose/ui/geometry/Rect;I)V
+HPLandroidx/compose/ui/graphics/ColorKt;->luminance-8_81llA(J)F
+HPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt$graphicsLayer$$inlined$modifierElementOf$1;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier;
+HPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/arch/core/executor/TaskExecutor;Landroidx/compose/ui/graphics/ColorFilter;I)V
+HPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V
+HPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V
+HPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object;
+HPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V
+HPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V
+HPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/compose/ui/node/UiApplier;->onClear()V
+HPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusedRect(Landroid/graphics/Rect;)V
+HPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V
+HPLandroidx/compose/ui/unit/Constraints$Companion;->fixedWidth-OenEA2s(I)J
+HPLandroidx/compose/ui/unit/IntOffset;->equals(Ljava/lang/Object;)Z
+HPLandroidx/compose/ui/unit/IntSize;->equals(Ljava/lang/Object;)Z
+HPLandroidx/tv/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridDslKt$rememberColumnWidthSums$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridDslKt$rememberRowHeightSums$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridIntervalContent;->getKey()Lkotlin/jvm/functions/Function1;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridIntervalContent;->getType()Lkotlin/jvm/functions/Function1;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getContentType(I)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getHasCustomSpans()Z
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getItemCount()I
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getKey(I)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getContentType(I)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getItemCount()I
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getKey(I)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getSpanLayoutProvider()Landroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$1;->(Landroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;Landroidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider;)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZZIILandroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;J)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1;->createItem-ejjdvUs(ILjava/lang/Object;IILjava/util/List;)Landroidx/tv/foundation/lazy/grid/LazyMeasuredItem;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1;->(ZLjava/util/List;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;I)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1;->createLine-62kVtck(I[Landroidx/tv/foundation/lazy/grid/LazyMeasuredItem;Ljava/util/List;I)Landroidx/tv/foundation/lazy/grid/LazyMeasuredLine;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridKt;->LazyGrid(Landroidx/compose/ui/Modifier;Landroidx/tv/foundation/lazy/grid/TvLazyGridState;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/PaddingValues;ZZZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/tv/foundation/PivotOffsets;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridPositionedItem;->(JILjava/lang/Object;IIJIIZLjava/util/List;Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;JIZ)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridScrollPosition;->update-cXEmwJU(II)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider$LineConfiguration;->(ILjava/util/List;)V
+HPLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getLineConfiguration(I)Landroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider$LineConfiguration;
+HPLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getLineIndexOfItem-lRO02eA(I)I
+HPLandroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getTotalSize()I
+HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredItem;->(ILjava/lang/Object;ZIIZLandroidx/compose/ui/unit/LayoutDirection;IILjava/util/List;Landroidx/tv/foundation/lazy/grid/LazyGridItemPlacementAnimator;J)V
+HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredItem;->position(IIIIII)Landroidx/tv/foundation/lazy/grid/LazyGridPositionedItem;
+HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider;->(Landroidx/tv/foundation/lazy/grid/LazyGridItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ILandroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1;)V
+HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider;->getAndMeasure-ndEz314(IIJ)Landroidx/tv/foundation/lazy/grid/LazyMeasuredItem;
+HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLine;->(I[Landroidx/tv/foundation/lazy/grid/LazyMeasuredItem;Ljava/util/List;ZILandroidx/compose/ui/unit/LayoutDirection;II)V
+HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLine;->position(III)Ljava/util/ArrayList;
+HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider;->(ZLjava/util/List;IIILandroidx/tv/foundation/lazy/grid/LazyMeasuredItemProvider;Landroidx/tv/foundation/lazy/grid/LazyGridSpanLayoutProvider;Landroidx/tv/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1;)V
+HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider;->childConstraints-JhjzzOo$tv_foundation_release(II)J
+HPLandroidx/tv/foundation/lazy/grid/LazyMeasuredLineProvider;->getAndMeasure-MDRrEZU(I)Landroidx/tv/foundation/lazy/grid/LazyMeasuredLine;
+HPLandroidx/tv/foundation/lazy/grid/TvGridCells$Fixed;->calculateCrossAxisCellSizes(Landroidx/compose/ui/unit/Density;II)Ljava/util/ArrayList;
+HPLandroidx/tv/foundation/lazy/grid/TvLazyGridMeasureResult;->(Landroidx/tv/foundation/lazy/grid/LazyMeasuredLine;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;ILandroidx/compose/foundation/gestures/Orientation;)V
+HPLandroidx/tv/foundation/lazy/grid/TvLazyGridScope$items$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState$scrollableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->(II)V
+HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->getFirstVisibleItemIndex()I
+HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->isVertical$tv_foundation_release()Z
+HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HPLandroidx/tv/foundation/lazy/grid/TvLazyGridState;->updateScrollPositionIfTheFirstItemWasMoved$tv_foundation_release(Landroidx/tv/foundation/lazy/grid/LazyGridItemProvider;)V
+HPLandroidx/tv/foundation/lazy/list/LazyListMeasureKt;->createItemsBeforeList_kVT7Qgw$addItem$4(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/tv/foundation/lazy/list/LazyMeasuredItemProvider;I)V
+HPLandroidx/tv/foundation/lazy/list/LazyListPinnableContainerProviderKt$LazyListPinnableContainerProvider$2;->(Landroidx/tv/foundation/lazy/list/TvLazyListState;ILkotlin/jvm/functions/Function2;I)V
+HPLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/BringIntoViewIfChildrenAreFocusedKt$bringIntoViewIfChildrenAreFocused$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselDefaults;->IndicatorRow-hGBTI10(IILandroidx/compose/ui/Modifier;FLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HPLandroidx/tv/material3/CarouselItemDefaults$OverlayEnterTransition$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselItemKt$CarouselItem$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselItemKt$CarouselItem$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselItemKt$CarouselItem$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselItemKt$CarouselItem$4$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselItemKt$onAnimationCompletion$2;->invoke()Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselItemKt;->CarouselItem(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;JLandroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V
+HPLandroidx/tv/material3/CarouselItemKt;->access$onAnimationCompletion(Landroidx/compose/animation/core/MutableTransitionState;Landroidx/tv/material3/CarouselItemKt$CarouselItem$1$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselKt$Carousel$5$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselKt$Carousel$5$2$1;->(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/compose/ui/focus/FocusRequester;Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V
+HPLandroidx/tv/material3/CarouselKt$Carousel$5$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselKt$Carousel$5$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselKt$Carousel$6;->(ILandroidx/compose/ui/Modifier;Landroidx/tv/material3/CarouselState;JLandroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;II)V
+HPLandroidx/tv/material3/CarouselKt$Carousel$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselKt$handleKeyEvents$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselKt$onAnimationCompletion$2;->invoke()Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselKt;->Carousel(ILandroidx/compose/ui/Modifier;Landroidx/tv/material3/CarouselState;JLandroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
+HPLandroidx/tv/material3/CarouselKt;->access$onAnimationCompletion(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/tv/material3/CarouselKt$Carousel$5$2$1$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HPLandroidx/tv/material3/CarouselState;->getActiveSlideIndex()I
+HPLandroidx/tv/material3/ComposableSingletons$CarouselKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/example/tvcomposebasedtests/MainActivity$jankReportListener$1;->onJankReport(Ljava/lang/String;ILjava/util/ArrayList;)V
+HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$FeaturedCarouselKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/example/tvcomposebasedtests/tvComponents/ComposableSingletons$LazyContainersKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt$FeaturedCarousel$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/example/tvcomposebasedtests/tvComponents/FeaturedCarouselKt;->access$OverlayButton(Landroidx/compose/runtime/Composer;I)V
+HPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1$1$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/example/tvcomposebasedtests/tvComponents/LazyContainersKt$TvLazyRowsAndColumn$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/google/gson/Gson;->getAdapter(Lcom/google/gson/reflect/TypeToken;)Lcom/google/gson/TypeAdapter;
+HPLcom/google/gson/JsonArray;->()V
+HPLcom/google/gson/JsonElement;->()V
+HPLcom/google/gson/JsonObject;->()V
+HPLcom/google/gson/JsonPrimitive;->(Ljava/lang/Boolean;)V
+HPLcom/google/gson/JsonPrimitive;->(Ljava/lang/Number;)V
+HPLcom/google/gson/JsonPrimitive;->getAsNumber()Ljava/lang/Number;
+HPLcom/google/gson/TypeAdapter;->()V
+HPLcom/google/gson/internal/$Gson$Types;->canonicalize(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type;
+HPLcom/google/gson/internal/LinkedTreeMap$EntrySet;->(Lcom/google/gson/internal/LinkedTreeMap;)V
+HPLcom/google/gson/internal/LinkedTreeMap$Node;->(ZLcom/google/gson/internal/LinkedTreeMap$Node;Ljava/lang/Object;Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->(Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLcom/google/gson/internal/LinkedTreeMap;->rebalance(Lcom/google/gson/internal/LinkedTreeMap$Node;Z)V
+HPLcom/google/gson/internal/LinkedTreeMap;->replaceInParent(Lcom/google/gson/internal/LinkedTreeMap$Node;Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateLeft(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/LinkedTreeMap;->rotateRight(Lcom/google/gson/internal/LinkedTreeMap$Node;)V
+HPLcom/google/gson/internal/bind/CollectionTypeAdapterFactory$Adapter;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->beginArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->beginObject()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endArray()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->endObject()V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->get()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->peek()Lcom/google/gson/JsonElement;
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->value(J)V
+HPLcom/google/gson/internal/bind/JsonTreeWriter;->value(Ljava/lang/Boolean;)V
+HPLcom/google/gson/internal/bind/ReflectiveTypeAdapterFactory$Adapter;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapterRuntimeTypeWrapper;->(Lcom/google/gson/Gson;Lcom/google/gson/TypeAdapter;Ljava/lang/reflect/Type;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$11;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/internal/bind/TypeAdapters$3;->write(Lcom/google/gson/stream/JsonWriter;Ljava/lang/Object;)V
+HPLcom/google/gson/reflect/TypeToken;->equals(Ljava/lang/Object;)Z
+HPLcom/google/gson/reflect/TypeToken;->hashCode()I
+HPLcom/google/gson/stream/JsonWriter;->(Ljava/io/Writer;)V
+HPLcom/google/gson/stream/JsonWriter;->beginArray()V
+HPLcom/google/gson/stream/JsonWriter;->beginObject()V
+HPLcom/google/gson/stream/JsonWriter;->close(IIC)V
+HPLcom/google/gson/stream/JsonWriter;->name(Ljava/lang/String;)V
+HPLcom/google/gson/stream/JsonWriter;->peek()I
+HPLcom/google/gson/stream/JsonWriter;->string(Ljava/lang/String;)V
+HPLcom/google/gson/stream/JsonWriter;->value(Ljava/lang/Number;)V
+HPLcom/google/gson/stream/JsonWriter;->writeDeferredName()V
+HPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/util/concurrent/CancellationException;)V
+HPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z
+HPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext;
+HPLkotlinx/coroutines/scheduling/Task;->(JLkotlinx/coroutines/scheduling/TaskContext;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->onContextAvailable()V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Ljava/lang/StringBuilder;
+HSPLandroidx/activity/ComponentActivity$1;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$2;->()V
+HSPLandroidx/activity/ComponentActivity$3;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$4;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity$5;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+HSPLandroidx/activity/ComponentActivity;->()V
+HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;
+HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/LifecycleRegistry;
+HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
+HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
+HSPLandroidx/activity/ComponentActivity;->initViewTreeOwners()V
+HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;->(Landroidx/activity/ComponentActivity$1;)V
+HSPLandroidx/activity/compose/ComponentActivityKt;->()V
+HSPLandroidx/activity/contextaware/ContextAwareHelper;->()V
+HSPLandroidx/activity/result/ActivityResultRegistry;->()V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->()V
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->()V
+HSPLandroidx/arch/core/executor/TaskExecutor;->()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->(Landroidx/arch/core/internal/SafeIterableMap;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;->()V
+HSPLandroidx/arch/core/internal/SafeIterableMap;->()V
+HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/collection/ArraySet;->()V
+HSPLandroidx/collection/ArraySet;->()V
+HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z
+HSPLandroidx/collection/ArraySet;->allocArrays(I)V
+HSPLandroidx/collection/ArraySet;->clear()V
+HSPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
+HSPLandroidx/collection/ArraySet;->indexOf(ILjava/lang/Object;)I
+HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
+HSPLandroidx/collection/ContainerHelpers;->()V
+HSPLandroidx/collection/SimpleArrayMap;->()V
+HSPLandroidx/collection/SparseArrayCompat;->()V
+HSPLandroidx/collection/SparseArrayCompat;->()V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
+HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/ColorVectorConverterKt;->()V
+HSPLandroidx/compose/animation/ColorVectorConverterKt;->access$multiplyColumn(IFFF[F)F
+HSPLandroidx/compose/animation/FlingCalculator;->(FLandroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/FlingCalculatorKt;->()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;->()V
+HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/AnimationState;
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->(Landroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->()V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/String;)V
+HSPLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->()V
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateDpAsState-AjpBEmI(FLandroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/AnimationState;
+HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/AnimationState;
+HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->()V
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->compareTo(II)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->ordinal(I)I
+HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->values(I)[I
+HSPLandroidx/compose/animation/core/AnimationResult;->(Landroidx/compose/animation/core/AnimationState;I)V
+HSPLandroidx/compose/animation/core/AnimationScope;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V
+HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V
+HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/AnimationVector1D;->(F)V
+HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F
+HSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I
+HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V
+HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(FI)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;->(FFFF)V
+HSPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F
+HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I
+HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V
+HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(FI)V
+HSPLandroidx/compose/animation/core/AnimationVector;->()V
+HSPLandroidx/compose/animation/core/ComplexDouble;->(DD)V
+HSPLandroidx/compose/animation/core/ComplexDoubleKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble;
+HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;->(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->(FFF)V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->(FFI)V
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F
+HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;->(ILkotlinx/coroutines/Job;)V
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->(ILandroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/MutatorMutex;->()V
+HSPLandroidx/compose/animation/core/SpringSimulation;->()V
+HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J
+HSPLandroidx/compose/animation/core/SpringSpec;->(FFLjava/lang/Object;)V
+HSPLandroidx/compose/animation/core/SpringSpec;->(Ljava/lang/Object;I)V
+HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec;
+HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedSpringSpec;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->(Landroidx/compose/foundation/gestures/ScrollExtensionsKt$animateScrollBy$2$1;Landroidx/compose/animation/core/TwoWayConverterImpl;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->(Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;->(Landroidx/compose/animation/core/AnimationState;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;->(Landroidx/compose/animation/core/AnimationState;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->(Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt;->callWithFrameNanos(Landroidx/compose/animation/core/Animation;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/SuspendAnimationKt$animate$4;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F
+HSPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z
+HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V
+HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1;
+HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;->()V
+HSPLandroidx/compose/animation/core/VectorConvertersKt;->()V
+HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->(FFLandroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
+HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->(FF)V
+HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec;
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/Animations;)V
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->(FFLandroidx/compose/animation/core/AnimationVector;)V
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector;
+HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->isInfinite()V
+HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->()V
+HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold()J
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->(Landroidx/compose/ui/layout/Placeable;I)V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->(Landroidx/compose/ui/layout/Placeable;I)V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->()V
+HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/AndroidOverscrollKt;->()V
+HSPLandroidx/compose/foundation/Api31Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/Api31Impl;->()V
+HSPLandroidx/compose/foundation/Api31Impl;->()V
+HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect;
+HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F
+HSPLandroidx/compose/foundation/Background;->(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/Background;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V
+HSPLandroidx/compose/foundation/Background;->equals(Ljava/lang/Object;)Z
+HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/BorderKt$border$2$1;->(FLandroidx/compose/ui/graphics/Shape;Landroidx/compose/ui/node/Ref;Landroidx/compose/ui/graphics/Brush;)V
+HSPLandroidx/compose/foundation/BorderKt$border$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/BorderKt$border$2;->(FLandroidx/compose/ui/graphics/SolidColor;Landroidx/compose/ui/graphics/Shape;)V
+HSPLandroidx/compose/foundation/BorderKt$border$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;->(Landroidx/compose/ui/graphics/Brush;JJLandroidx/arch/core/executor/TaskExecutor;)V
+HSPLandroidx/compose/foundation/BorderKt$drawRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;->(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;->(Landroidx/compose/runtime/MutableState;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;->(Landroidx/compose/runtime/State;Z)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->(Landroidx/compose/runtime/MutableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$clickable$4;->(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Z)V
+HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$1;->(Lkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;->(Landroidx/compose/ui/semantics/Role;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V
+HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;->(ZLjava/util/Map;Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V
+HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/compose/foundation/ClickableKt;->PressedInteractionSourceDisposableEffect(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/runtime/Composer;I)V
+HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier;
+HSPLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;->(Landroid/view/View;)V
+HSPLandroidx/compose/foundation/Clickable_androidKt;->()V
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;->()V
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline;
+HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->