From 6e427cee82e2958b6c388287aaf8eff09ad7a2d2 Mon Sep 17 00:00:00 2001 From: Hadi Norouzi Date: Tue, 16 May 2023 11:33:29 +0330 Subject: [PATCH] feature: add leanback for android tv compatiblity --- V2rayNG/app/build.gradle | 1 + .../java/com/v2ray/ang/ApplicationTest.java | 13 ------------- V2rayNG/app/src/main/AndroidManifest.xml | 4 ++++ .../main/kotlin/com/v2ray/ang/ui/MainActivity.kt | 3 ++- .../src/main/kotlin/com/v2ray/ang/util/Utils.kt | 5 +++++ .../src/main/res/mipmap-anydpi-v26/ic_banner.xml | 7 +++++++ .../app/src/main/res/mipmap-xhdpi/ic_banner.png | Bin 0 -> 3878 bytes .../res/mipmap-xhdpi/ic_banner_foreground.png | Bin 0 -> 3395 bytes .../src/main/res/values/ic_banner_background.xml | 4 ++++ 9 files changed, 23 insertions(+), 14 deletions(-) delete mode 100644 V2rayNG/app/src/androidTest/java/com/v2ray/ang/ApplicationTest.java create mode 100644 V2rayNG/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml create mode 100644 V2rayNG/app/src/main/res/mipmap-xhdpi/ic_banner.png create mode 100644 V2rayNG/app/src/main/res/mipmap-xhdpi/ic_banner_foreground.png create mode 100644 V2rayNG/app/src/main/res/values/ic_banner_background.xml diff --git a/V2rayNG/app/build.gradle b/V2rayNG/app/build.gradle index 0831f508..8c6e0934 100644 --- a/V2rayNG/app/build.gradle +++ b/V2rayNG/app/build.gradle @@ -87,6 +87,7 @@ android { buildFeatures { viewBinding true + buildConfig true } namespace 'com.v2ray.ang' testNamespace 'com.v2ray.angTest' diff --git a/V2rayNG/app/src/androidTest/java/com/v2ray/ang/ApplicationTest.java b/V2rayNG/app/src/androidTest/java/com/v2ray/ang/ApplicationTest.java deleted file mode 100644 index e221e714..00000000 --- a/V2rayNG/app/src/androidTest/java/com/v2ray/ang/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.v2ray.ang; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/V2rayNG/app/src/main/AndroidManifest.xml b/V2rayNG/app/src/main/AndroidManifest.xml index 7d118e8d..daa511a3 100644 --- a/V2rayNG/app/src/main/AndroidManifest.xml +++ b/V2rayNG/app/src/main/AndroidManifest.xml @@ -11,6 +11,8 @@ + + + diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt index c35406de..7160055c 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt @@ -613,13 +613,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList // } override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { - if (keyCode == KeyEvent.KEYCODE_BACK) { + if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_BUTTON_B) { moveTaskToBack(false) return true } return super.onKeyDown(keyCode, event) } + fun showCircle() { binding.fabProgressCircle.show() } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt index cd8acd49..69a92210 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt @@ -7,6 +7,7 @@ import android.util.Base64 import java.util.* import android.content.ClipData import android.content.Intent +import android.content.pm.PackageManager import android.content.res.Configuration.UI_MODE_NIGHT_MASK import android.content.res.Configuration.UI_MODE_NIGHT_YES import android.net.Uri @@ -399,5 +400,9 @@ object Utils { return URL(url.protocol, IDN.toASCII(url.host, IDN.ALLOW_UNASSIGNED), url.port, url.file) .toExternalForm() } + + fun isTv(context: Context): Boolean = + context.packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK) + } diff --git a/V2rayNG/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml b/V2rayNG/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml new file mode 100644 index 00000000..f928b0cd --- /dev/null +++ b/V2rayNG/app/src/main/res/mipmap-anydpi-v26/ic_banner.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/V2rayNG/app/src/main/res/mipmap-xhdpi/ic_banner.png b/V2rayNG/app/src/main/res/mipmap-xhdpi/ic_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..9c525197236c7b21447f92dac4319ffcc38975b3 GIT binary patch literal 3878 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 D(BPF% literal 0 HcmV?d00001 diff --git a/V2rayNG/app/src/main/res/values/ic_banner_background.xml b/V2rayNG/app/src/main/res/values/ic_banner_background.xml new file mode 100644 index 00000000..15db34b8 --- /dev/null +++ b/V2rayNG/app/src/main/res/values/ic_banner_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file