From 672774e216d77d011079d9f0934fef0699ab1fa4 Mon Sep 17 00:00:00 2001 From: renato97 Date: Fri, 14 Nov 2025 19:00:17 +0000 Subject: [PATCH] Add Android TV Edition support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update AndroidManifest.xml for TV compatibility - Add ChannelAdapter with D-pad navigation support - Update MainActivity for TV UI optimization - Add Android TV specific resources: - banner_streamplayer.xml for TV launcher - bg_channel_item_selector for focus states - values-sw720dp for large screens - integers.xml for TV configurations - Update item_channel.xml for TV navigation - Remove unused mobile-specific drawable Features: - Android TV Leanback support - D-pad navigation optimization - TV-optimized layouts and focus management - Large screen resources for TV displays 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- app/src/main/AndroidManifest.xml | 9 ++++++ .../java/com/streamplayer/ChannelAdapter.java | 4 +++ .../java/com/streamplayer/MainActivity.java | 8 ++++- .../main/res/drawable/banner_streamplayer.xml | 18 +++++++++++ app/src/main/res/drawable/bg_channel_item.xml | 9 ------ .../res/drawable/bg_channel_item_selector.xml | 30 +++++++++++++++++++ app/src/main/res/layout/item_channel.xml | 4 ++- app/src/main/res/values-sw720dp/integers.xml | 4 +++ app/src/main/res/values/integers.xml | 4 +++ 9 files changed, 79 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/drawable/banner_streamplayer.xml delete mode 100644 app/src/main/res/drawable/bg_channel_item.xml create mode 100644 app/src/main/res/drawable/bg_channel_item_selector.xml create mode 100644 app/src/main/res/values-sw720dp/integers.xml create mode 100644 app/src/main/res/values/integers.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a947d5c..28163fc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ + + + + diff --git a/app/src/main/java/com/streamplayer/ChannelAdapter.java b/app/src/main/java/com/streamplayer/ChannelAdapter.java index 3f348ef..5e18d2e 100644 --- a/app/src/main/java/com/streamplayer/ChannelAdapter.java +++ b/app/src/main/java/com/streamplayer/ChannelAdapter.java @@ -43,6 +43,10 @@ public class ChannelAdapter extends RecyclerView.Adapter { + float scale = hasFocus ? 1.08f : 1f; + v.animate().scaleX(scale).scaleY(scale).setDuration(120).start(); + }); } @Override diff --git a/app/src/main/java/com/streamplayer/MainActivity.java b/app/src/main/java/com/streamplayer/MainActivity.java index a837062..eb902ae 100644 --- a/app/src/main/java/com/streamplayer/MainActivity.java +++ b/app/src/main/java/com/streamplayer/MainActivity.java @@ -15,7 +15,8 @@ public class MainActivity extends AppCompatActivity { setContentView(R.layout.activity_main); RecyclerView recyclerView = findViewById(R.id.channel_grid); - recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); + recyclerView.setLayoutManager(new GridLayoutManager(this, getSpanCount())); + recyclerView.setHasFixedSize(true); ChannelAdapter adapter = new ChannelAdapter( ChannelRepository.getChannels(), channel -> { @@ -25,5 +26,10 @@ public class MainActivity extends AppCompatActivity { startActivity(intent); }); recyclerView.setAdapter(adapter); + recyclerView.post(recyclerView::requestFocus); + } + + private int getSpanCount() { + return getResources().getInteger(R.integer.channel_grid_span); } } diff --git a/app/src/main/res/drawable/banner_streamplayer.xml b/app/src/main/res/drawable/banner_streamplayer.xml new file mode 100644 index 0000000..4fe3dc1 --- /dev/null +++ b/app/src/main/res/drawable/banner_streamplayer.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/bg_channel_item.xml b/app/src/main/res/drawable/bg_channel_item.xml deleted file mode 100644 index 359e8fd..0000000 --- a/app/src/main/res/drawable/bg_channel_item.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/bg_channel_item_selector.xml b/app/src/main/res/drawable/bg_channel_item_selector.xml new file mode 100644 index 0000000..1635de3 --- /dev/null +++ b/app/src/main/res/drawable/bg_channel_item_selector.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_channel.xml b/app/src/main/res/layout/item_channel.xml index a088452..c43f9dc 100644 --- a/app/src/main/res/layout/item_channel.xml +++ b/app/src/main/res/layout/item_channel.xml @@ -3,7 +3,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="6dp" - android:background="@drawable/bg_channel_item" + android:background="@drawable/bg_channel_item_selector" + android:focusable="true" + android:focusableInTouchMode="true" android:gravity="center_horizontal" android:orientation="vertical" android:padding="16dp"> diff --git a/app/src/main/res/values-sw720dp/integers.xml b/app/src/main/res/values-sw720dp/integers.xml new file mode 100644 index 0000000..2986b28 --- /dev/null +++ b/app/src/main/res/values-sw720dp/integers.xml @@ -0,0 +1,4 @@ + + + 5 + diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml new file mode 100644 index 0000000..0675125 --- /dev/null +++ b/app/src/main/res/values/integers.xml @@ -0,0 +1,4 @@ + + + 3 +