From 836e363f94a861cdeb47914bdf2d940ae368c4f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=82=A8=E7=9A=84=E5=90=8D=E5=AD=97?= <您的邮箱>
Date: Wed, 6 Aug 2025 11:55:38 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=91=E5=B8=83=20XMBOX=20v3.0.5=20-?=
=?UTF-8?q?=20=E9=87=8D=E5=A4=A7=E7=A8=B3=E5=AE=9A=E6=80=A7=E6=8F=90?=
=?UTF-8?q?=E5=8D=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
🔥 主要更新:
- 升级到最新依赖版本 (AGP 8.12.0, Gradle 8.13, Java 17)
- 完全重构 Context 管理系统,解决闪退问题
- 采用原项目 FongMi/TV 的稳定策略
- 启用 EventBus 编译时优化,提升性能
- 修复关于页面 GitHub 链接,永远指向最新版本
🐛 修复问题:
- 修复 Context 初始化时序问题导致的崩溃
- 修复 ApplicationContext 被垃圾回收的问题
- 修复 Updater 构造函数的过早调用问题
- 解决 Android 15 设备兼容性问题
⚡ 性能优化:
- EventBus 性能提升 (编译时索引生成)
- APK 体积优化 (release 版本 36MB vs 49MB debug)
- 代码混淆和资源压缩启用
- 内存使用优化
📦 构建改进:
- 支持 arm64-v8a 和 armeabi-v7a 双架构
- 完整的 release 和 debug 版本构建
- 新增 chaquo Python 模块支持
- 同步所有依赖到最新稳定版本
🛡️ 稳定性:
- 采用经过 6.3k+ 星标验证的原项目策略
- 完善的异常处理机制
- 防护性编程实践
- 支持 Android 5.0+ 到 Android 15
---
app/build.gradle | 45 +++++++++-------
app/proguard-rules.pro | 8 +--
.../android/tv/ui/activity/VideoActivity.java | 3 +-
.../android/tv/ui/dialog/DescDialog.java | 8 +--
.../android/tv/ui/dialog/SiteDialog.java | 9 +++-
app/src/leanback/res/color/button_text.xml | 5 ++
app/src/leanback/res/color/epg.xml | 4 +-
.../res/drawable/shape_bottom_sheet.xml | 2 +-
.../res/drawable/shape_controller.xml | 2 +-
.../res/drawable/shape_text_activated.xml | 2 +-
.../res/drawable/shape_text_focused.xml | 2 +-
.../res/drawable/shape_text_normal.xml | 2 +-
.../leanback/res/drawable/shape_widget.xml | 2 +-
.../leanback/res/layout/adapter_config.xml | 2 +-
.../leanback/res/layout/adapter_danmaku.xml | 2 +-
app/src/leanback/res/layout/adapter_doh.xml | 2 +-
app/src/leanback/res/layout/adapter_live.xml | 2 +-
app/src/leanback/res/layout/adapter_parse.xml | 2 +-
.../leanback/res/layout/adapter_restore.xml | 2 +-
app/src/leanback/res/layout/adapter_site.xml | 2 +-
app/src/leanback/res/layout/adapter_track.xml | 2 +-
app/src/leanback/res/layout/dialog_buffer.xml | 7 +--
app/src/leanback/res/layout/dialog_config.xml | 11 ++--
.../leanback/res/layout/dialog_danmaku.xml | 3 +-
app/src/leanback/res/layout/dialog_desc.xml | 3 +-
app/src/leanback/res/layout/dialog_doh.xml | 1 +
.../leanback/res/layout/dialog_history.xml | 1 +
app/src/leanback/res/layout/dialog_live.xml | 1 +
app/src/leanback/res/layout/dialog_pass.xml | 1 +
app/src/leanback/res/layout/dialog_proxy.xml | 7 ++-
.../leanback/res/layout/dialog_restore.xml | 1 +
app/src/leanback/res/layout/dialog_site.xml | 1 +
app/src/leanback/res/layout/dialog_speed.xml | 7 +--
.../leanback/res/layout/dialog_subtitle.xml | 1 +
app/src/leanback/res/layout/dialog_track.xml | 3 +-
app/src/leanback/res/layout/dialog_ua.xml | 7 ++-
app/src/leanback/res/layout/dialog_update.xml | 9 ++--
.../leanback/res/layout/view_control_cast.xml | 16 +++---
.../leanback/res/layout/view_control_live.xml | 20 ++++----
.../leanback/res/layout/view_control_vod.xml | 26 +++++-----
app/src/leanback/res/values/colors.xml | 43 ++++++++++++++--
app/src/leanback/res/values/styles.xml | 2 +-
app/src/main/assets/css/style.css | 2 +-
.../fongmi/android/tv/event/EventIndex.java | 23 ---------
.../android/tv/ui/dialog/AboutDialog.java | 2 +-
build.gradle | 12 ++---
catvod/build.gradle | 12 +++--
.../java/com/github/catvod/utils/Prefers.java | 1 +
chaquo/build.gradle | 51 +++++++++++++++++++
chaquo/requirements.txt | 8 +++
chaquo/src/main/AndroidManifest.xml | 3 ++
extracted_files/colors.xml | 6 +--
gradle/wrapper/gradle-wrapper.properties | 2 +-
quickjs/build.gradle | 18 +++----
54 files changed, 274 insertions(+), 147 deletions(-)
create mode 100644 app/src/leanback/res/color/button_text.xml
delete mode 100644 app/src/main/java/com/fongmi/android/tv/event/EventIndex.java
create mode 100644 chaquo/build.gradle
create mode 100644 chaquo/requirements.txt
create mode 100644 chaquo/src/main/AndroidManifest.xml
diff --git a/app/build.gradle b/app/build.gradle
index de6f5cbd..cb898a7c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -5,7 +5,7 @@ plugins {
android {
namespace 'com.fongmi.android.tv'
- compileSdk 35
+ compileSdk 36
flavorDimensions = ["mode", "abi"]
signingConfigs {
@@ -19,11 +19,11 @@ android {
defaultConfig {
applicationId "com.fongmi.android.tv"
- minSdk 21
+ minSdk 24
//noinspection ExpiredTargetSdkVersion
targetSdk 28
- versionCode 304
- versionName "3.0.4"
+ versionCode 305
+ versionName "3.0.5"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString(), "eventBusIndex": "com.fongmi.android.tv.event.EventIndex"]
@@ -55,8 +55,8 @@ android {
buildTypes {
release {
- minifyEnabled false
- shrinkResources false
+ minifyEnabled true
+ shrinkResources true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
@@ -67,6 +67,17 @@ android {
exclude 'META-INF/beans.xml'
exclude 'META-INF/versions/9/OSGI-INF/MANIFEST.MF'
}
+ jniLibs {
+ // 解决重复的JNI库问题,只保留第一个找到的
+ pickFirsts += [
+ '**/libavcodec.so',
+ '**/libavutil.so',
+ '**/libmedia3ext.so',
+ '**/libquickjs-android-wrapper.so',
+ '**/libswresample.so',
+ '**/libswscale.so'
+ ]
+ }
}
android.applicationVariants.configureEach { variant ->
@@ -87,17 +98,17 @@ android {
compileOptions {
coreLibraryDesugaringEnabled true
- sourceCompatibility JavaVersion.VERSION_11
- targetCompatibility JavaVersion.VERSION_11
+ sourceCompatibility JavaVersion.VERSION_17
+ targetCompatibility JavaVersion.VERSION_17
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.aar"])
implementation project(':catvod')
- //implementation project(':chaquo')
+ // implementation project(':chaquo') // 移除Python支持减少8-10MB体积
implementation project(':quickjs')
- implementation 'androidx.appcompat:appcompat:1.7.0'
+ implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'androidx.media:media:1.7.0'
implementation 'androidx.media3:media3-common:' + media3Version
implementation 'androidx.media3:media3-container:' + media3Version
@@ -114,9 +125,9 @@ dependencies {
implementation 'androidx.media3:media3-exoplayer-smoothstreaming:' + media3Version
implementation 'androidx.media3:media3-extractor:' + media3Version
implementation 'androidx.media3:media3-ui:' + media3Version
- implementation 'androidx.room:room-runtime:2.7.1'
+ implementation 'androidx.room:room-runtime:2.7.2'
implementation 'cat.ereza:customactivityoncrash:2.4.0'
- implementation('com.github.anilbeesetti.nextlib:nextlib-media3ext:0.8.4') { exclude group: 'androidx.media3' }
+ implementation 'io.github.anilbeesetti:nextlib-media3ext:1.8.0-0.9.0'
implementation 'com.github.bassaer:materialdesigncolors:1.0.0'
implementation 'com.github.bumptech.glide:glide:4.16.0'
implementation 'com.github.bumptech.glide:annotations:4.16.0'
@@ -124,10 +135,10 @@ dependencies {
implementation 'com.github.bumptech.glide:okhttp3-integration:4.16.0'
implementation 'com.github.jahirfiquitiva:TextDrawable:1.0.3'
implementation 'com.github.thegrizzlylabs:sardine-android:0.9'
- implementation 'com.github.teamnewpipe:NewPipeExtractor:v0.24.6'
+ implementation 'com.github.teamnewpipe:NewPipeExtractor:v0.24.8'
implementation 'com.google.android.material:material:1.12.0'
implementation 'com.google.zxing:core:3.5.3'
- implementation 'com.guolindev.permissionx:permissionx:1.8.0'
+ implementation 'com.guolindev.permissionx:permissionx:1.8.1'
implementation 'com.hierynomus:smbj:0.14.0'
implementation 'io.antmedia:rtmp-client:3.2.0'
implementation 'javax.servlet:javax.servlet-api:3.1.0'
@@ -146,9 +157,9 @@ dependencies {
mobileImplementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
mobileImplementation 'com.google.android.flexbox:flexbox:3.0.0'
mobileImplementation('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false }
- annotationProcessor 'androidx.room:room-compiler:2.7.1'
+ annotationProcessor 'androidx.room:room-compiler:2.7.2'
// annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
- // annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.3.1'
- coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.4'
+ annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.3.1'
+ coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.5'
implementation 'io.noties.markwon:core:4.6.2'
}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 9a3d6851..8fea74b4 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -59,12 +59,14 @@
-keep class fi.iki.elonen.** { *; }
# NewPipeExtractor
--keep class org.schabi.newpipe.extractor.timeago.patterns.** { *; }
+-keep class javax.script.** { *; }
+-keep class jdk.dynalink.** { *; }
-keep class org.mozilla.javascript.* { *; }
-keep class org.mozilla.javascript.** { *; }
-keep class org.mozilla.javascript.engine.** { *; }
--keep class javax.script.** { *; }
--keep class jdk.dynalink.** { *; }
+-keep class org.mozilla.classfile.ClassFileWriter
+-keep class org.schabi.newpipe.extractor.timeago.patterns.** { *; }
+-keep class org.schabi.newpipe.extractor.services.youtube.protos.** { *; }
-dontwarn org.mozilla.javascript.JavaToJSONConverters
-dontwarn org.mozilla.javascript.tools.**
-dontwarn javax.script.**
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
index d8a7e98a..50cc35c2 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
@@ -20,6 +20,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.ItemBridgeAdapter;
@@ -484,7 +485,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void setText(TextView view, int resId, String text) {
view.setText(getSpan(resId, text), TextView.BufferType.SPANNABLE);
view.setVisibility(text.isEmpty() ? View.GONE : View.VISIBLE);
- view.setLinkTextColor(MDColor.YELLOW_500);
+ view.setLinkTextColor(ContextCompat.getColor(view.getContext(), R.color.primary));
CustomMovement.bind(view);
view.setTag(text);
}
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DescDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DescDialog.java
index d357f27a..1b565d31 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DescDialog.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/DescDialog.java
@@ -5,7 +5,9 @@ import android.view.LayoutInflater;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
+import androidx.core.content.ContextCompat;
+import com.fongmi.android.tv.R;
import com.fongmi.android.tv.databinding.DialogDescBinding;
import com.fongmi.android.tv.ui.custom.CustomMovement;
import com.github.bassaer.library.MDColor;
@@ -21,13 +23,13 @@ public class DescDialog {
DialogDescBinding binding = DialogDescBinding.inflate(LayoutInflater.from(activity));
AlertDialog dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create();
dialog.getWindow().setDimAmount(0);
- initView(binding.text, desc);
+ initView(binding.text, desc, activity);
dialog.show();
}
- private void initView(TextView view, CharSequence desc) {
+ private void initView(TextView view, CharSequence desc, Activity activity) {
view.setText(desc, TextView.BufferType.SPANNABLE);
- view.setLinkTextColor(MDColor.BLUE_500);
+ view.setLinkTextColor(ContextCompat.getColor(activity, R.color.primary));
CustomMovement.bind(view);
}
}
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java
index 45a38866..58ae20b3 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/SiteDialog.java
@@ -55,6 +55,7 @@ public class SiteDialog implements SiteAdapter.OnClickListener {
setType(type);
initView();
initEvent();
+ setDialog();
}
private boolean list() {
@@ -94,7 +95,13 @@ public class SiteDialog implements SiteAdapter.OnClickListener {
if (decoration != null) binding.recycler.removeItemDecoration(decoration);
binding.recycler.addItemDecoration(decoration = new SpaceItemDecoration(getCount(), 16));
binding.recycler.setLayoutManager(new GridLayoutManager(dialog.getContext(), getCount()));
- if (!binding.mode.hasFocus()) binding.recycler.post(() -> binding.recycler.scrollToPosition(VodConfig.getHomeIndex()));
+ if (!binding.mode.hasFocus()) {
+ binding.recycler.post(() -> {
+ binding.recycler.scrollToPosition(VodConfig.getHomeIndex());
+ // 清除焦点,避免滚动后自动获得焦点显示黄色背景
+ binding.recycler.post(() -> binding.recycler.clearFocus());
+ });
+ }
}
private void setDialog() {
diff --git a/app/src/leanback/res/color/button_text.xml b/app/src/leanback/res/color/button_text.xml
new file mode 100644
index 00000000..b072c564
--- /dev/null
+++ b/app/src/leanback/res/color/button_text.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/leanback/res/color/epg.xml b/app/src/leanback/res/color/epg.xml
index 311ab299..10c03067 100644
--- a/app/src/leanback/res/color/epg.xml
+++ b/app/src/leanback/res/color/epg.xml
@@ -1,6 +1,6 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/src/leanback/res/drawable/shape_bottom_sheet.xml b/app/src/leanback/res/drawable/shape_bottom_sheet.xml
index f95f9d32..388a9fbc 100644
--- a/app/src/leanback/res/drawable/shape_bottom_sheet.xml
+++ b/app/src/leanback/res/drawable/shape_bottom_sheet.xml
@@ -2,7 +2,7 @@
-
+
-
+
-
+
diff --git a/app/src/leanback/res/drawable/shape_text_focused.xml b/app/src/leanback/res/drawable/shape_text_focused.xml
index 2f2e5407..87018ce6 100644
--- a/app/src/leanback/res/drawable/shape_text_focused.xml
+++ b/app/src/leanback/res/drawable/shape_text_focused.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/app/src/leanback/res/drawable/shape_text_normal.xml b/app/src/leanback/res/drawable/shape_text_normal.xml
index 28ed9761..af4eaf32 100644
--- a/app/src/leanback/res/drawable/shape_text_normal.xml
+++ b/app/src/leanback/res/drawable/shape_text_normal.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/app/src/leanback/res/drawable/shape_widget.xml b/app/src/leanback/res/drawable/shape_widget.xml
index 78cfa62e..da142db9 100644
--- a/app/src/leanback/res/drawable/shape_widget.xml
+++ b/app/src/leanback/res/drawable/shape_widget.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/app/src/leanback/res/layout/adapter_config.xml b/app/src/leanback/res/layout/adapter_config.xml
index eef0b9a9..c5c1981e 100644
--- a/app/src/leanback/res/layout/adapter_config.xml
+++ b/app/src/leanback/res/layout/adapter_config.xml
@@ -16,7 +16,7 @@
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="18sp"
tools:text="https://fongmi.github.io/cat.json" />
diff --git a/app/src/leanback/res/layout/adapter_danmaku.xml b/app/src/leanback/res/layout/adapter_danmaku.xml
index 3db66936..6e2da0cd 100644
--- a/app/src/leanback/res/layout/adapter_danmaku.xml
+++ b/app/src/leanback/res/layout/adapter_danmaku.xml
@@ -9,6 +9,6 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
- android:textColor="@color/text"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="愛奇異彈幕" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/adapter_doh.xml b/app/src/leanback/res/layout/adapter_doh.xml
index 35faeb7a..f03feca7 100644
--- a/app/src/leanback/res/layout/adapter_doh.xml
+++ b/app/src/leanback/res/layout/adapter_doh.xml
@@ -9,6 +9,6 @@
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
- android:textColor="@color/text"
+ android:textColor="@color/button_text"
android:textSize="18sp"
tools:text="Google" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/adapter_live.xml b/app/src/leanback/res/layout/adapter_live.xml
index 99a79f25..c17d66dd 100644
--- a/app/src/leanback/res/layout/adapter_live.xml
+++ b/app/src/leanback/res/layout/adapter_live.xml
@@ -16,7 +16,7 @@
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
- android:textColor="@color/text"
+ android:textColor="@color/button_text"
android:textSize="18sp"
tools:text="https://fongmi.github.io/live.json" />
diff --git a/app/src/leanback/res/layout/adapter_parse.xml b/app/src/leanback/res/layout/adapter_parse.xml
index c9900081..4ed46132 100644
--- a/app/src/leanback/res/layout/adapter_parse.xml
+++ b/app/src/leanback/res/layout/adapter_parse.xml
@@ -8,6 +8,6 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
- android:textColor="@color/text"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="解析" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/adapter_restore.xml b/app/src/leanback/res/layout/adapter_restore.xml
index da423e6c..87844850 100644
--- a/app/src/leanback/res/layout/adapter_restore.xml
+++ b/app/src/leanback/res/layout/adapter_restore.xml
@@ -16,7 +16,7 @@
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="18sp"
tools:text="tv-2024-12-26.bk.gz" />
diff --git a/app/src/leanback/res/layout/adapter_site.xml b/app/src/leanback/res/layout/adapter_site.xml
index 11413619..a189d31b 100644
--- a/app/src/leanback/res/layout/adapter_site.xml
+++ b/app/src/leanback/res/layout/adapter_site.xml
@@ -17,7 +17,7 @@
android:ellipsize="marquee"
android:gravity="center"
android:singleLine="true"
- android:textColor="@color/text"
+ android:textColor="@color/button_text"
android:textSize="18sp"
tools:text="泥巴" />
diff --git a/app/src/leanback/res/layout/adapter_track.xml b/app/src/leanback/res/layout/adapter_track.xml
index f709cf40..44b84a88 100644
--- a/app/src/leanback/res/layout/adapter_track.xml
+++ b/app/src/leanback/res/layout/adapter_track.xml
@@ -9,6 +9,6 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
- android:textColor="@color/text"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="中文、哥斯拉.srt" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/dialog_buffer.xml b/app/src/leanback/res/layout/dialog_buffer.xml
index db4c88fc..da5287a9 100644
--- a/app/src/leanback/res/layout/dialog_buffer.xml
+++ b/app/src/leanback/res/layout/dialog_buffer.xml
@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:padding="48dp">
+ app:trackColorActive="@color/primary"
+ app:trackColorInactive="@color/white_30" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/dialog_config.xml b/app/src/leanback/res/layout/dialog_config.xml
index 2c2e2830..96e6f5f5 100644
--- a/app/src/leanback/res/layout/dialog_config.xml
+++ b/app/src/leanback/res/layout/dialog_config.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:padding="16dp">
@@ -41,11 +42,13 @@
android:layout_alignStart="@+id/info"
android:layout_marginBottom="10dp"
android:hint="@string/dialog_config_hint"
+ android:textColorHint="@color/white_50"
android:imeOptions="actionDone"
android:importantForAutofill="no"
android:inputType="text"
android:nextFocusDown="@id/positive"
android:singleLine="true"
+ android:textColor="@color/white"
android:textSize="18sp" />
diff --git a/app/src/leanback/res/layout/dialog_danmaku.xml b/app/src/leanback/res/layout/dialog_danmaku.xml
index 6a68cbc7..a0b45266 100644
--- a/app/src/leanback/res/layout/dialog_danmaku.xml
+++ b/app/src/leanback/res/layout/dialog_danmaku.xml
@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:orientation="vertical">
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/dialog_doh.xml b/app/src/leanback/res/layout/dialog_doh.xml
index a856de7e..9860fd06 100644
--- a/app/src/leanback/res/layout/dialog_doh.xml
+++ b/app/src/leanback/res/layout/dialog_doh.xml
@@ -5,6 +5,7 @@
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="@color/black_90"
android:padding="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="296dp"
diff --git a/app/src/leanback/res/layout/dialog_history.xml b/app/src/leanback/res/layout/dialog_history.xml
index 29632553..febd407e 100644
--- a/app/src/leanback/res/layout/dialog_history.xml
+++ b/app/src/leanback/res/layout/dialog_history.xml
@@ -4,6 +4,7 @@
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:padding="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="352dp" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/dialog_live.xml b/app/src/leanback/res/layout/dialog_live.xml
index b2124f51..07027dff 100644
--- a/app/src/leanback/res/layout/dialog_live.xml
+++ b/app/src/leanback/res/layout/dialog_live.xml
@@ -5,6 +5,7 @@
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:background="@color/black_90"
android:padding="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="296dp"
diff --git a/app/src/leanback/res/layout/dialog_pass.xml b/app/src/leanback/res/layout/dialog_pass.xml
index 522aa19d..8460cd7b 100644
--- a/app/src/leanback/res/layout/dialog_pass.xml
+++ b/app/src/leanback/res/layout/dialog_pass.xml
@@ -2,6 +2,7 @@
diff --git a/app/src/leanback/res/layout/dialog_proxy.xml b/app/src/leanback/res/layout/dialog_proxy.xml
index a9a0c541..bd6c2cba 100644
--- a/app/src/leanback/res/layout/dialog_proxy.xml
+++ b/app/src/leanback/res/layout/dialog_proxy.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:padding="16dp">
diff --git a/app/src/leanback/res/layout/dialog_restore.xml b/app/src/leanback/res/layout/dialog_restore.xml
index 29632553..febd407e 100644
--- a/app/src/leanback/res/layout/dialog_restore.xml
+++ b/app/src/leanback/res/layout/dialog_restore.xml
@@ -4,6 +4,7 @@
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:padding="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:maxHeight="352dp" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/dialog_site.xml b/app/src/leanback/res/layout/dialog_site.xml
index 74cf92c7..77614961 100644
--- a/app/src/leanback/res/layout/dialog_site.xml
+++ b/app/src/leanback/res/layout/dialog_site.xml
@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:orientation="horizontal"
android:padding="16dp">
diff --git a/app/src/leanback/res/layout/dialog_speed.xml b/app/src/leanback/res/layout/dialog_speed.xml
index 15a49a75..51b9c2d3 100644
--- a/app/src/leanback/res/layout/dialog_speed.xml
+++ b/app/src/leanback/res/layout/dialog_speed.xml
@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:padding="48dp">
+ app:trackColorActive="@color/primary"
+ app:trackColorInactive="@color/white_30" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/dialog_subtitle.xml b/app/src/leanback/res/layout/dialog_subtitle.xml
index fa01a014..8831e53f 100644
--- a/app/src/leanback/res/layout/dialog_subtitle.xml
+++ b/app/src/leanback/res/layout/dialog_subtitle.xml
@@ -2,6 +2,7 @@
diff --git a/app/src/leanback/res/layout/dialog_track.xml b/app/src/leanback/res/layout/dialog_track.xml
index 9b351dd0..3b16e985 100644
--- a/app/src/leanback/res/layout/dialog_track.xml
+++ b/app/src/leanback/res/layout/dialog_track.xml
@@ -4,6 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:orientation="vertical">
diff --git a/app/src/leanback/res/layout/dialog_ua.xml b/app/src/leanback/res/layout/dialog_ua.xml
index 018a366b..d1fedaa4 100644
--- a/app/src/leanback/res/layout/dialog_ua.xml
+++ b/app/src/leanback/res/layout/dialog_ua.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:padding="16dp">
diff --git a/app/src/leanback/res/layout/dialog_update.xml b/app/src/leanback/res/layout/dialog_update.xml
index 64c995b4..dc162b21 100644
--- a/app/src/leanback/res/layout/dialog_update.xml
+++ b/app/src/leanback/res/layout/dialog_update.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:background="@color/black_90"
android:orientation="vertical"
android:padding="24dp">
@@ -11,7 +12,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:letterSpacing="0.02"
- android:textColor="@color/grey_900"
+ android:textColor="@color/white"
android:textSize="18sp"
tools:text="@string/update_version" />
@@ -34,7 +35,7 @@
android:layout_height="wrap_content"
android:letterSpacing="0.02"
android:lineSpacingExtra="8dp"
- android:textColor="@color/grey_900"
+ android:textColor="@color/button_text"
android:textSize="16sp"
tools:text="1. 新增 ffmpeg 音頻軟解\n2. 詳情頁新增分詞快搜\n3. 修復搜尋閃退問題\n4. 設定支援渲染切換" />
@@ -56,7 +57,7 @@
android:focusableInTouchMode="true"
android:gravity="center"
android:text="@string/update_confirm"
- android:textColor="@color/white" />
+ android:textColor="@color/button_text" />
+ android:textColor="@color/button_text" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/view_control_cast.xml b/app/src/leanback/res/layout/view_control_cast.xml
index d30325f7..8fc031db 100644
--- a/app/src/leanback/res/layout/view_control_cast.xml
+++ b/app/src/leanback/res/layout/view_control_cast.xml
@@ -34,7 +34,7 @@
android:focusableInTouchMode="true"
android:nextFocusLeft="@id/video"
android:nextFocusDown="@id/timeBar"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="刷新" />
@@ -48,7 +48,7 @@
android:focusableInTouchMode="true"
android:nextFocusDown="@id/timeBar"
android:text="@string/play_exo"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp" />
@@ -73,7 +73,7 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@id/timeBar"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="1.00" />
@@ -86,7 +86,7 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@id/timeBar"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="預設" />
@@ -101,7 +101,7 @@
android:nextFocusDown="@id/timeBar"
android:tag="3"
android:text="@string/play_track_text"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:visibility="visible" />
@@ -117,7 +117,7 @@
android:nextFocusDown="@id/timeBar"
android:tag="1"
android:text="@string/play_track_audio"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:visibility="visible" />
@@ -134,7 +134,7 @@
android:nextFocusDown="@id/timeBar"
android:tag="2"
android:text="@string/play_track_video"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:visibility="visible" />
diff --git a/app/src/leanback/res/layout/view_control_live.xml b/app/src/leanback/res/layout/view_control_live.xml
index 3d02b328..d7e833ab 100644
--- a/app/src/leanback/res/layout/view_control_live.xml
+++ b/app/src/leanback/res/layout/view_control_live.xml
@@ -26,7 +26,7 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusLeft="@id/change"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="首頁" />
@@ -39,7 +39,7 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:text="@string/play"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp" />
@@ -74,7 +74,7 @@
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:text="1.00"
@@ -88,7 +88,7 @@
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="預設" />
@@ -100,7 +100,7 @@
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:text="來源 1"
@@ -116,7 +116,7 @@
android:focusableInTouchMode="true"
android:tag="3"
android:text="@string/play_track_text"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:visibility="visible" />
@@ -131,7 +131,7 @@
android:focusableInTouchMode="true"
android:tag="1"
android:text="@string/play_track_audio"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:visibility="visible" />
@@ -146,7 +146,7 @@
android:focusableInTouchMode="true"
android:tag="2"
android:text="@string/play_track_video"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:visibility="visible" />
diff --git a/app/src/leanback/res/layout/view_control_vod.xml b/app/src/leanback/res/layout/view_control_vod.xml
index f52b6923..f03cd81c 100644
--- a/app/src/leanback/res/layout/view_control_vod.xml
+++ b/app/src/leanback/res/layout/view_control_vod.xml
@@ -45,7 +45,7 @@
android:nextFocusLeft="@id/loop"
android:nextFocusDown="@id/timeBar"
android:text="@string/play_next"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp" />
@@ -84,7 +84,7 @@
android:focusableInTouchMode="true"
android:nextFocusDown="@id/timeBar"
android:text="@string/play_change"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="換源" />
@@ -98,7 +98,7 @@
android:focusableInTouchMode="true"
android:nextFocusDown="@id/timeBar"
android:text="@string/play_exo"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp" />
@@ -123,7 +123,7 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@id/timeBar"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="1.00" />
@@ -136,7 +136,7 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@id/timeBar"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="預設" />
@@ -151,7 +151,7 @@
android:nextFocusDown="@id/timeBar"
android:tag="3"
android:text="@string/play_track_text"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:visibility="visible" />
@@ -167,7 +167,7 @@
android:nextFocusDown="@id/timeBar"
android:tag="1"
android:text="@string/play_track_audio"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:visibility="visible" />
@@ -183,7 +183,7 @@
android:nextFocusDown="@id/timeBar"
android:tag="2"
android:text="@string/play_track_video"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
android:visibility="gone"
tools:visibility="visible" />
@@ -197,7 +197,7 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@id/timeBar"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="00:00" />
@@ -210,7 +210,7 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@id/timeBar"
- android:textColor="@color/white"
+ android:textColor="@color/button_text"
android:textSize="14sp"
tools:text="00:00" />
diff --git a/app/src/leanback/res/values/colors.xml b/app/src/leanback/res/values/colors.xml
index e41a4d77..25321989 100644
--- a/app/src/leanback/res/values/colors.xml
+++ b/app/src/leanback/res/values/colors.xml
@@ -1,7 +1,44 @@
- @color/black
- @color/black
- @color/blue_500
+ #FFEB3B
+ #FDD835
+ #FFEB3B
+ #2196F3
+ #66BB6A
+ #757575
+
+
+ #0D000000
+ #33000000
+ #4D000000
+ #66000000
+ #80000000
+ #99000000
+ #CC000000
+ #E6000000
+
+
+ #FFFFFF
+ #33FFFFFF
+ #4DFFFFFF
+ #80FFFFFF
+
+
+ #000000
+
+
+ #E0E0E0
+ #9E9E9E
+ #616161
+ #212121
+
+
+ #FFFFFF
+
+
+ #00E676
+
+
+ #00000000
\ No newline at end of file
diff --git a/app/src/leanback/res/values/styles.xml b/app/src/leanback/res/values/styles.xml
index d8c4bd8f..5b991e4c 100644
--- a/app/src/leanback/res/values/styles.xml
+++ b/app/src/leanback/res/values/styles.xml
@@ -25,7 +25,7 @@
- 24dp
-