commit 47549c1d9e711eaca3a0d0c9fd68f0161bac6a75 Author: LittleTurtle2333 Date: Thu Feb 23 21:48:59 2023 +0800 使用`YukiHook`重构(未完成) diff --git a/.github/ISSUE_TEMPLATE/----.md b/.github/ISSUE_TEMPLATE/----.md new file mode 100644 index 00000000..92cb917b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/----.md @@ -0,0 +1,10 @@ +--- +name: 功能请求 +about: 为这个项目提供好的建议 +title: "[Feature]" +labels: enhancement +assignees: '' + +--- + +请清晰明了地讲述您的建议 diff --git a/.github/ISSUE_TEMPLATE/bug--.md b/.github/ISSUE_TEMPLATE/bug--.md new file mode 100644 index 00000000..167b3354 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug--.md @@ -0,0 +1,29 @@ +--- +name: BUG反馈 +about: 创建报告使我们更快改进 +title: "[BUG]" +labels: bug +assignees: '' + +--- + +**描述一下BUG情况** +清晰明了的描述BUG的情况 + +**如何复现** +复现的步骤 +1. 去 '...' +2. 点击 '....' +3. 滚动到 '....' +4. 问题出现 + +**截图** +如果可以,请添加截图以帮助解释您的问题。 + +**手机信息:** + - 设备型号: + - MIUI版本: + - Android版本: + +**附加信息** +在此处添加有关此问题的任何其他内容。 diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml new file mode 100644 index 00000000..47021c5a --- /dev/null +++ b/.github/workflows/dev.yml @@ -0,0 +1,50 @@ +name: Dev + +on: + push: + branches: [ "main" ] + workflow_dispatch: + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Clone UI + run: | + cd blockmiui + git submodule init + git submodule update + + - name: Build with Gradle + run: | + bash ./gradlew assembleDebug + + - name: Sign Debug APK + if: success() + id: sign_debug + uses: r0adkll/sign-android-release@v1.0.4 + with: + releaseDirectory: ./app/build/outputs/apk/debug + signingKeyBase64: ${{ secrets.SIGNING_KEY }} + alias: ${{ secrets.KEY_STORE_ALIAS }} + keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} + keyPassword: ${{ secrets.KEY_STORE_PASSWORD }} + + - name: Upload Debug APK + uses: actions/upload-artifact@v2 + with: + name: WooBox_Debug + path: ${{ steps.sign_debug.outputs.signedReleaseFile }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 00000000..eb40c987 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,42 @@ +name: PR Check + +on: + pull_request: + branches: [ main ] + paths-ignore: + - 'README.md' + - 'README_EN.md' + - 'doc/*' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: 'recursive' + - name: set up JDK 17 + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'temurin' + cache: gradle + - uses: actions/cache@v2 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + !~/.gradle/caches/build-cache-* + key: gradle-deps-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: gradle-deps + - uses: actions/cache@v2 + with: + path: | + ~/.gradle/caches/build-cache-* + key: gradle-builds-${{ github.sha }} + - name: Init Submodule + run: | + git submodule init + git submodule update + - name: Build with Gradle + run: bash ./gradlew :app:packageDebug diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..4c364e44 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ + +*.iml +.gradle +/local.properties +/.idea +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties +/app/release/app-release.apk +/app/release/output-metadata.json \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..5f60ba22 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "blockmiui"] + path = blockmiui + url = https://github.com/577fkj/blockmiui.git diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 00000000..16036280 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,62 @@ +plugins { + id 'com.android.application' + id 'org.jetbrains.kotlin.android' + id 'com.google.devtools.ksp' version '1.8.10-1.0.9' +} + +android { + compileSdk 33 + + defaultConfig { + applicationId "com.lt2333.simplicitytools" + minSdk 31 + targetSdk 33 + versionCode 75 + versionName '1.7.5-Yuki' + buildConfigField("String", "BUILD_TIME", "\"${System.currentTimeMillis()}\"") + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled rootProject.ext.enableR8 + shrinkResources rootProject.ext.enableR8 + zipAlignEnabled rootProject.ext.enableR8 + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = '11' + freeCompilerArgs = [ + '-Xno-param-assertions', + '-Xno-call-assertions', + '-Xno-receiver-assertions' + ] + } + buildFeatures { + viewBinding true + } + lintOptions { + checkReleaseBuilds false + } +} + +dependencies { + //API + compileOnly 'de.robv.android.xposed:api:82' + implementation 'com.highcapable.yukihookapi:api:1.1.8' + ksp 'com.highcapable.yukihookapi:ksp-xposed:1.1.8' + + //UI + implementation(project(":blockmiui")) + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + //APP Center + String appCenterSdkVersion = "4.4.3" + implementation("com.microsoft.appcenter:appcenter-analytics:${appCenterSdkVersion}") + implementation("com.microsoft.appcenter:appcenter-crashes:${appCenterSdkVersion}") +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 00000000..6a2ac062 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,30 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +-assumenosideeffects class kotlin.jvm.internal.Intrinsics { + public static *** throwUninitializedProperty(...); + public static *** throwUninitializedPropertyAccessException(...); +} + +-keepclassmembers class * implements androidx.viewbinding.ViewBinding { + *** inflate(android.view.LayoutInflater); +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/lt2333/simplicitytools/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/lt2333/simplicitytools/ExampleInstrumentedTest.kt new file mode 100644 index 00000000..a98f8794 --- /dev/null +++ b/app/src/androidTest/java/com/lt2333/simplicitytools/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.lt2333.simplicitytools + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.lt2333.simplicitytools", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..eb2e3e56 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/xposed_init b/app/src/main/assets/xposed_init new file mode 100644 index 00000000..cc031083 --- /dev/null +++ b/app/src/main/assets/xposed_init @@ -0,0 +1 @@ +com.lt2333.simplicitytools.hooks.MainHook_YukiHookXposedInit \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/MainActivity.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/MainActivity.kt new file mode 100644 index 00000000..b98d6037 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/MainActivity.kt @@ -0,0 +1,66 @@ +package com.lt2333.simplicitytools.activity + +import android.annotation.SuppressLint +import android.os.Build +import android.os.Bundle +import cn.fkj233.ui.activity.MIUIActivity +import cn.fkj233.ui.dialog.MIUIDialog +import com.lt2333.simplicitytools.BuildConfig +import com.lt2333.simplicitytools.R +import com.lt2333.simplicitytools.activity.pages.all.AboutPage +import com.lt2333.simplicitytools.activity.pages.all.MenuPage +import com.lt2333.simplicitytools.activity.pages.s.* +import com.lt2333.simplicitytools.activity.pages.t.* +import java.util.* +import kotlin.system.exitProcess + +class MainActivity : MIUIActivity() { + private val activity = this + override fun onCreate(savedInstanceState: Bundle?) { + if (!checkLSPosed()) isLoad = false + super.onCreate(savedInstanceState) + } + + //检测LSPosed是否激活 + @SuppressLint("WorldReadableFiles") + private fun checkLSPosed(): Boolean { + try { + setSP(getSharedPreferences("config", MODE_WORLD_READABLE)) + return true + } catch (exception: SecurityException) { + MIUIDialog(this) { + setTitle(R.string.Tips) + setMessage(R.string.not_support) + setCancelable(false) + setRButton(R.string.Done) { + exitProcess(0) + } + }.show() + } + return false + } + + + init { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + registerPage(MainPageForT::class.java) + registerPage(SystemUIPageForT::class.java) + registerPage(AndroidPageForT::class.java) + registerPage(OtherPageForT::class.java) + registerPage(HideIconPageForT::class.java) + registerPage(AboutPage::class.java) + registerPage(MenuPage::class.java) + } + Build.VERSION_CODES.S -> { + registerPage(MainPageForS::class.java) + registerPage(SystemUIPageForS::class.java) + registerPage(AndroidPageForS::class.java) + registerPage(OtherPageForS::class.java) + registerPage(HideIconPageForS::class.java) + registerPage(AboutPage::class.java) + registerPage(MenuPage::class.java) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/all/AboutPage.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/all/AboutPage.kt new file mode 100644 index 00000000..b86dff5c --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/all/AboutPage.kt @@ -0,0 +1,200 @@ +package com.lt2333.simplicitytools.activity.pages.all + +import android.content.Intent +import android.net.Uri +import android.widget.Toast +import cn.fkj233.ui.activity.annotation.BMPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.TextSummaryV +import com.lt2333.simplicitytools.BuildConfig +import com.lt2333.simplicitytools.R +import java.text.SimpleDateFormat +import java.util.* + + +@BMPage("about_module","About Module", hideMenu = true) +class AboutPage : BasePage() { + + override fun onCreate() { + Author( + authorHead = getDrawable(R.drawable.app_icon)!!, + authorName = getString(R.string.app_name), + authorTips = "${ + SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss", + Locale.getDefault() + ).format(BuildConfig.BUILD_TIME.toLong()) + }\n${BuildConfig.VERSION_NAME}(${BuildConfig.BUILD_TYPE})", + onClickListener = { + try { + activity.startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("coolmarket://apk/com.lt2333.simplicitytools") + ) + ) + Toast.makeText(activity, "恳求一个五星好评,Thanks♪(・ω・)ノ", Toast.LENGTH_LONG) + .show() + } catch (e: Exception) { + val uri = + Uri.parse("https://github.com/Xposed-Modules-Repo/com.lt2333.simplicitytools/releases") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } + }) + Line() + TitleText(text = getString(R.string.developer)) + Author( + authorHead = getDrawable(R.drawable.lt)!!, + authorName = "乌堆小透明", + authorTips = "LittleTurtle2333", + onClickListener = { + try { + activity.startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("coolmarket://u/883441") + ) + ) + Toast.makeText(activity, "乌堆小透明:靓仔,点个关注吧!", Toast.LENGTH_SHORT).show() + } catch (e: Exception) { + Toast.makeText(activity, "本机未安装酷安应用", Toast.LENGTH_SHORT).show() + val uri = Uri.parse("https://www.coolapk.com/u/883441") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } + }) + Line() + TitleText(text = getString(R.string.thank_list)) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.contributor_list, + onClickListener = { + try { + val uri = + Uri.parse("https://github.com/LittleTurtle2333/SimplicityTools/graphs/contributors") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } catch (e: Exception) { + Toast.makeText(activity, "访问失败", Toast.LENGTH_SHORT).show() + } + }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.third_party_open_source_statement, + onClickListener = { + try { + val uri = + Uri.parse("https://github.com/LittleTurtle2333/SimplicityTools#%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BC%80%E6%BA%90%E5%BC%95%E7%94%A8") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } catch (e: Exception) { + Toast.makeText(activity, "访问失败", Toast.LENGTH_SHORT).show() + } + }) + ) + Line() + TitleText(text = getString(R.string.discussions)) + TextSummaryWithArrow(TextSummaryV(textId = R.string.qq_channel, onClickListener = { + try { + val uri = + Uri.parse("https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&inviteCode=29Mu64&from=246610&biz=ka") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } catch (e: Exception) { + Toast.makeText(activity, "访问失败", Toast.LENGTH_SHORT).show() + } + })) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.tg_channel, + tipsId = R.string.tg_channel_summary, + onClickListener = { + try { + activity.startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("tg://resolve?domain=simplicityrom") + ) + ) + } catch (e: Exception) { + Toast.makeText(activity, "本机未安装Telegram应用", Toast.LENGTH_SHORT) + .show() + val uri = Uri.parse("https://t.me/simplicityrom") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } + }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.issues, + tipsId = R.string.issues_url, + onClickListener = { + try { + val uri = + Uri.parse("https://github.com/LittleTurtle2333/SimplicityTools/issues") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } catch (e: Exception) { + Toast.makeText(activity, "访问失败", Toast.LENGTH_SHORT).show() + } + }) + ) + Line() + TitleText(getString(R.string.other)) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.app_coolapk_url, + tipsId = R.string.app_coolapk_url_summary, + onClickListener = { + try { + activity.startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse("coolmarket://apk/com.lt2333.simplicitytools") + ) + ) + Toast.makeText( + activity, + "恳求一个五星好评,Thanks♪(・ω・)ノ", + Toast.LENGTH_LONG + ).show() + } catch (e: Exception) { + Toast.makeText(activity, "本机未安装酷安应用", Toast.LENGTH_SHORT).show() + } + }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.opensource, + tipsId = R.string.github_url, + onClickListener = { + try { + val uri = + Uri.parse("https://github.com/LittleTurtle2333/SimplicityTools") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } catch (e: Exception) { + Toast.makeText(activity, "访问失败", Toast.LENGTH_SHORT).show() + } + }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.participate_in_translation, + tipsId = R.string.participate_in_translation_summary, + onClickListener = { + try { + val uri = Uri.parse("https://crowdin.com/project/simplicitytools") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } catch (e: Exception) { + Toast.makeText(activity, "访问失败", Toast.LENGTH_SHORT).show() + } + }) + ) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/all/MenuPage.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/all/MenuPage.kt new file mode 100644 index 00000000..02bb72ef --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/all/MenuPage.kt @@ -0,0 +1,59 @@ +package com.lt2333.simplicitytools.activity.pages.all + +import cn.fkj233.ui.activity.annotation.BMMenuPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.TextSummaryV +import cn.fkj233.ui.dialog.MIUIDialog +import com.lt2333.simplicitytools.R +import com.lt2333.simplicitytools.utils.ShellUtils +import java.util.* + + +@BMMenuPage("Menu") +class MenuPage : BasePage() { + + override fun onCreate() { + TextSummaryWithArrow(TextSummaryV(textId = R.string.reboot, onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.Tips) + setMessage(R.string.are_you_sure_reboot) + setLButton(R.string.cancel) { + dismiss() + } + setRButton(R.string.Done) { + val command = arrayOf("reboot") + ShellUtils.execCommand(command, true) + dismiss() + } + }.show() + })) + + TextSummaryWithArrow(TextSummaryV(textId = R.string.reboot_host, onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.Tips) + setMessage(R.string.are_you_sure_reboot_scope) + setLButton(R.string.cancel) { + dismiss() + } + setRButton(R.string.Done) { + val command = arrayOf( + "killall com.android.systemui", + "killall com.miui.home", + "killall com.miui.securitycenter ", + "killall com.android.settings", + "killall com.miui.powerkeeper", + "killall com.android.updater", + "killall com.miui.mediaeditor", + "killall com.miui.screenshot", + "killall com.milink.service", + "killall com.xiaomi.misubscreenui", + "killall com.miui.packageinstaller" + ) + ShellUtils.execCommand(command, true) + dismiss() + } + }.show() + })) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/AndroidPageForS.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/AndroidPageForS.kt new file mode 100644 index 00000000..5ad67d61 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/AndroidPageForS.kt @@ -0,0 +1,134 @@ +package com.lt2333.simplicitytools.activity.pages.s + +import android.view.View +import android.widget.Switch +import cn.fkj233.ui.activity.MIUIActivity +import cn.fkj233.ui.activity.annotation.BMPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import cn.fkj233.ui.dialog.MIUIDialog +import com.lt2333.simplicitytools.R + + +@BMPage("scope_android","Android", hideMenu = false) +class AndroidPageForS : BasePage() { + + override fun onCreate() { + TitleText(textId = R.string.corepacth) + + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.downgr, + tipsId = R.string.downgr_summary + ), SwitchV("downgrade") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.authcreak, + tipsId = R.string.authcreak_summary + ), SwitchV("authcreak") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.digestCreak, + tipsId = R.string.digestCreak_summary + ), SwitchV("digestCreak") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.UsePreSig, + tipsId = R.string.UsePreSig_summary + ), SwitchV("UsePreSig") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.enhancedMode, + tipsId = R.string.enhancedMode_summary + ), SwitchV("enhancedMode") + ) + Line() + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.disable_flag_secure, + tipsId = R.string.disable_flag_secure_summary + ), SwitchV("disable_flag_secure") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.delete_on_post_notification, + tipsId = R.string.delete_on_post_notification_summary + ), SwitchV("delete_on_post_notification") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_small_window_restrictions, + tipsId = R.string.remove_small_window_restrictions_summary + ), SwitchV("remove_small_window_restrictions") + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.max_wallpaper_scale, + onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.max_wallpaper_scale) + setEditText( + "", + "${activity.getString(R.string.def)}1.1, ${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getFloat("max_wallpaper_scale", 1.1f) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText() != "") { + MIUIActivity.safeSP.putAny( + "max_wallpaper_scale", + getEditText().toFloat() + ) + } + dismiss() + } + }.show() + }) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.allow_untrusted_touches, + tipsId = R.string.take_effect_after_reboot + ), SwitchV("allow_untrusted_touches") + ) + Line() + TitleText(textId = R.string.sound) + val mediaVolumeStepsSwitchBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "media_volume_steps_switch", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.media_volume_steps_switch, + tips = "${getString(R.string.take_effect_after_reboot)}\n${getString(R.string.media_volume_steps_summary)}" + ), + SwitchV( + "media_volume_steps_switch", + dataBindingSend = mediaVolumeStepsSwitchBinding.bindingSend + ) + ) + SeekBarWithText( + "media_volume_steps", + 15, + 29, + 15, + dataBindingRecv = mediaVolumeStepsSwitchBinding.binding.getRecv(2) + ) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/HideIconPageForS.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/HideIconPageForS.kt new file mode 100644 index 00000000..f45bd871 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/HideIconPageForS.kt @@ -0,0 +1,109 @@ +package com.lt2333.simplicitytools.activity.pages.s + +import android.view.View +import android.widget.Switch +import cn.fkj233.ui.activity.MIUIActivity +import cn.fkj233.ui.activity.annotation.BMPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import cn.fkj233.ui.activity.view.TextV +import cn.fkj233.ui.dialog.MIUIDialog +import com.lt2333.simplicitytools.R + + +@BMPage("hide_icon","Hide Icon", hideMenu = false) +class HideIconPageForS : BasePage() { + + override fun onCreate() { + TitleText(textId = R.string.status_bar_icon) + TextWithSwitch( + TextV(textId = R.string.hide_battery_icon), + SwitchV("hide_battery_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_battery_charging_icon), + SwitchV("hide_battery_charging_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_gps_icon), SwitchV("hide_gps_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_bluetooth_icon), + SwitchV("hide_bluetooth_icon") + ) + + TextWithSwitch(TextV(textId = R.string.hide_nfc_icon), SwitchV("hide_nfc_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_bluetooth_battery_icon), + SwitchV("hide_bluetooth_battery_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_small_hd_icon), + SwitchV("hide_small_hd_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_big_hd_icon), + SwitchV("hide_big_hd_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_new_hd_icon), + SwitchV("hide_new_hd_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_hd_no_service_icon), + SwitchV("hide_hd_no_service_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_no_sim_icon), + SwitchV("hide_no_sim_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_sim_one_icon), + SwitchV("hide_sim_one_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_sim_two_icon), + SwitchV("hide_sim_two_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_mobile_activity_icon), + SwitchV("hide_mobile_activity_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_mobile_type_icon), + SwitchV("hide_mobile_type_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_wifi_icon), SwitchV("hide_wifi_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_wifi_activity_icon), + SwitchV("hide_wifi_activity_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_wifi_standard_icon), + SwitchV("hide_wifi_standard_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_slave_wifi_icon), + SwitchV("hide_slave_wifi_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_hotspot_icon), + SwitchV("hide_hotspot_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_vpn_icon), SwitchV("hide_vpn_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_airplane_icon), + SwitchV("hide_airplane_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_alarm_icon), SwitchV("hide_alarm_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_headset_icon), + SwitchV("hide_headset_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_volume_icon), + SwitchV("hide_volume_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_zen_icon), SwitchV("hide_zen_icon")) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/MainPageForS.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/MainPageForS.kt new file mode 100644 index 00000000..092f417a --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/MainPageForS.kt @@ -0,0 +1,82 @@ +package com.lt2333.simplicitytools.activity.pages.s + +import android.content.ComponentName +import android.content.pm.PackageManager +import cn.fkj233.ui.activity.annotation.BMMainPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import cn.fkj233.ui.dialog.MIUIDialog +import com.lt2333.simplicitytools.BuildConfig +import com.lt2333.simplicitytools.R + + +@BMMainPage("WooBox[MIUI13]") +class MainPageForS : BasePage() { + + override fun onCreate() { + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.main_switch, + colorId = R.color.blue + ), SwitchV("main_switch", true) + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.HideLauncherIcon), + SwitchV("hLauncherIcon", onClickListener = { + activity.packageManager.setComponentEnabledSetting( + ComponentName(activity, "${BuildConfig.APPLICATION_ID}.launcher"), + if (it) { + PackageManager.COMPONENT_ENABLED_STATE_DISABLED + } else { + PackageManager.COMPONENT_ENABLED_STATE_ENABLED + }, + PackageManager.DONT_KILL_APP + ) + }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.matters_needing_attention, + colorId = R.color.red, + onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.matters_needing_attention) + setMessage(R.string.matters_needing_attention_context) + setRButton(R.string.Done) { + dismiss() + } + }.show() + }) + ) + Line() + TitleText(textId = R.string.scope) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.scope_systemui, + tipsId = R.string.scope_systemui_summary, + onClickListener = { showFragment("scope_systemui") }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.scope_android, + tipsId = R.string.scope_android_summary, + onClickListener = { showFragment("scope_android") }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.scope_other, + tipsId = R.string.scope_other_summary, + onClickListener = { showFragment("scope_other") }) + ) + Line() + TitleText(textId = R.string.about) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.about_module, + tips = getString(R.string.about_module_summary), + onClickListener = { showFragment("about_module") }) + ) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/OtherPageForS.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/OtherPageForS.kt new file mode 100644 index 00000000..945ed3d1 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/OtherPageForS.kt @@ -0,0 +1,198 @@ +package com.lt2333.simplicitytools.activity.pages.s + +import android.content.ComponentName +import android.content.Intent +import android.view.View +import android.widget.Switch +import android.widget.Toast +import cn.fkj233.ui.activity.MIUIActivity +import cn.fkj233.ui.activity.annotation.BMPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import com.lt2333.simplicitytools.R + + +@BMPage("scope_other", "Other", hideMenu = false) +class OtherPageForS : BasePage() { + + override fun onCreate() { + TitleText(textId = R.string.scope_miuihome) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.home_time, + tipsId = R.string.home_time_summary + ), SwitchV("home_time") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.double_tap_to_sleep, + tipsId = R.string.home_double_tap_to_sleep_summary + ), SwitchV("double_tap_to_sleep") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.miuihome_recentwiew_wallpaper_darkening, tipsId = R.string.miuihome_recentwiew_wallpaper_darkening_summary + ), SwitchV("miuihome_recentwiew_wallpaper_darkening", false) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.miuihome_recentview_remove_card_animation, tipsId = R.string.miuihome_recentview_remove_card_animation_summary + ), SwitchV("miuihome_recentview_remove_card_animation", false) + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.miuihome_shortcut_add_small_window, tipsId = R.string.miuihome_shortcut_add_small_window_summary), + SwitchV("miuihome_shortcut_add_small_window", false) + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.miuihome_scroll_icon_name, tipsId = R.string.miuihome_scroll_icon_name_summary), + SwitchV("miuihome_scroll_icon_name", false) + ) + Line() + TitleText(textId = R.string.scope_powerkeeper) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.lock_max_fps, + tipsId = R.string.lock_max_fps_summary + ), SwitchV("lock_max_fps") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.prevent_recovery_of_battery_optimization_white_list, + tipsId = R.string.failed_after_restart + ), SwitchV("prevent_recovery_of_battery_optimization_white_list") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.do_not_clear_app, + tipsId = R.string.do_not_clear_app_summary + ), SwitchV("do_not_clear_app") + ) + val makeMilletMoreAggressiveSwitchBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "make_millet_more_aggressive", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.make_millet_more_aggressive, + tipsId = R.string.make_millet_more_aggressive_summary + ), + SwitchV( + "make_millet_more_aggressive", + dataBindingSend = makeMilletMoreAggressiveSwitchBinding.bindingSend + ) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.make_millet_ignore_active, + tipsId = R.string.make_millet_ignore_active_summary + ), + SwitchV("make_millet_ignore_active"), + dataBindingRecv = makeMilletMoreAggressiveSwitchBinding.binding.getRecv(2) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.battery_optimization, + tipsId = R.string.battery_optimization_summary, + onClickListener = { + try { + val intent = Intent() + val comp = ComponentName( + "com.android.settings", + "com.android.settings.Settings\$HighPowerApplicationsActivity" + ) + intent.component = comp + activity.startActivity(intent) + } catch (e: Exception) { + Toast.makeText(activity, "启动失败,可能是不支持", Toast.LENGTH_LONG).show() + } + }) + ) + Line() + TitleText(textId = R.string.scope_securitycenter) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.skip_waiting_time, + tipsId = R.string.skip_waiting_time_summary + ), SwitchV("skip_waiting_time") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_open_app_confirmation_popup, + tipsId = R.string.remove_open_app_confirmation_popup_summary + ), SwitchV("remove_open_app_confirmation_popup") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.lock_one_hundred, + tipsId = R.string.lock_one_hundred_summary + ), SwitchV("lock_one_hundred") + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.remove_macro_blacklist), + SwitchV("remove_macro_blacklist") + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.battery_life_function), + SwitchV("battery_life_function") + ) + Line() + TitleText(textId = R.string.scope_mediaeditor) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.unlock_unlimited_cropping, + tipsId = R.string.unlock_unlimited_cropping_summary + ), SwitchV("unlock_unlimited_cropping") + ) + Line() + TitleText(textId = R.string.updater) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_ota_validate, + tipsId = R.string.remove_ota_validate_summary + ), SwitchV("remove_ota_validate") + ) + Line() + TitleText(textId = R.string.settings) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_notification_importance, + tipsId = R.string.show_notification_importance_summary + ), SwitchV("show_notification_importance") + ) + Line() + TitleText(textId = R.string.cast) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.force_support_send_app, + ), SwitchV("force_support_send_app") + ) + Line() + TitleText(textId = R.string.rear_display) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_weather_main_switch, + ), SwitchV("rear_show_weather") + ) + Line() + TitleText(textId = R.string.remove_ad) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.remove_thememanager_ads), + SwitchV("remove_thememanager_ads") + ) + Line() + TitleText(textId = R.string.pkg_installer) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.pkg_installer_summary), + SwitchV("pkg_installer_count_checking") + ) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/SystemUIPageForS.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/SystemUIPageForS.kt new file mode 100644 index 00000000..2829ccd4 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/s/SystemUIPageForS.kt @@ -0,0 +1,740 @@ +package com.lt2333.simplicitytools.activity.pages.s + +import android.content.Intent +import android.net.Uri +import android.view.View +import android.widget.Switch +import android.widget.Toast +import cn.fkj233.ui.activity.MIUIActivity +import cn.fkj233.ui.activity.annotation.BMPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SpinnerV +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import cn.fkj233.ui.activity.view.TextV +import cn.fkj233.ui.dialog.MIUIDialog +import cn.fkj233.ui.dialog.NewDialog +import com.lt2333.simplicitytools.R + + +@BMPage("scope_systemui", "System UI", hideMenu = false) +class SystemUIPageForS : BasePage() { + + override fun onCreate() { + TitleText(textId = R.string.statusbar) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.double_tap_to_sleep), + SwitchV("status_bar_double_tap_to_sleep") + ) + Line() + TitleText(textId = R.string.status_bar_layout) + val statusBarLayoutMode: HashMap = hashMapOf().also { + it[0] = getString(R.string.default1) + it[1] = getString(R.string.clock_center) + it[2] = getString(R.string.clock_right) + it[3] = getString(R.string.clock_center_and_icon_left) + } + TextWithSpinner( + TextV(textId = R.string.status_bar_layout_mode), + SpinnerV( + statusBarLayoutMode[MIUIActivity.safeSP.getInt( + "status_bar_layout_mode", + 0 + )].toString() + ) { + add(statusBarLayoutMode[0].toString()) { + MIUIActivity.safeSP.putAny("status_bar_layout_mode", 0) + } + add(statusBarLayoutMode[1].toString()) { + MIUIActivity.safeSP.putAny("status_bar_layout_mode", 1) + } + add(statusBarLayoutMode[2].toString()) { + MIUIActivity.safeSP.putAny("status_bar_layout_mode", 2) + } + add(statusBarLayoutMode[3].toString()) { + MIUIActivity.safeSP.putAny("status_bar_layout_mode", 3) + } + }) + + val layoutCompatibilityBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "layout_compatibility_mode", false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.layout_compatibility_mode, tipsId = R.string.layout_compatibility_mode_summary + ), SwitchV("layout_compatibility_mode", dataBindingSend = layoutCompatibilityBinding.bindingSend) + ) + + Text( + textId = R.string.left_margin, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_left_margin", 0, 300, 0, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2) + ) + Text( + textId = R.string.right_margin, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_right_margin", 0, 300, 0, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2) + ) + Line() + TitleText(textId = R.string.status_bar_clock_format) + + + val customClockPresetBinding = GetDataBinding({ + MIUIActivity.safeSP.getInt( + "custom_clock_mode", + 0 + ) == 1 + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + + val customClockGeekBinding = + GetDataBinding({ MIUIActivity.safeSP.getInt("custom_clock_mode", 0) == 2 } + + ) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + + val customClockMode: HashMap = hashMapOf().also { + it[0] = getString(R.string.off) + it[1] = getString(R.string.preset) + it[2] = getString(R.string.geek) + } + TextWithSpinner( + TextV(textId = R.string.custom_clock_mode), + SpinnerV(customClockMode[MIUIActivity.safeSP.getInt("custom_clock_mode", 0)].toString()) { + add(customClockMode[0].toString()) { + MIUIActivity.safeSP.putAny("custom_clock_mode", 0) + customClockPresetBinding.binding.Send().send(false) + customClockGeekBinding.binding.Send().send(false) + } + add(customClockMode[1].toString()) { + MIUIActivity.safeSP.putAny("custom_clock_mode", 1) + customClockPresetBinding.binding.Send().send(true) + customClockGeekBinding.binding.Send().send(false) + } + add(customClockMode[2].toString()) { + MIUIActivity.safeSP.putAny("custom_clock_mode", 2) + customClockPresetBinding.binding.Send().send(false) + customClockGeekBinding.binding.Send().send(true) + } + }) + + //预设模式起始 + TextWithSwitch( + TextV(textId = R.string.status_bar_time_year), + SwitchV("status_bar_time_year"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_month), + SwitchV("status_bar_time_month"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_day), + SwitchV("status_bar_time_day"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_week), + SwitchV("status_bar_time_week"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_double_hour), + SwitchV("status_bar_time_double_hour"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_period), + SwitchV("status_bar_time_period", true), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_seconds), + SwitchV("status_bar_time_seconds"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_hide_space), + SwitchV("status_bar_time_hide_space"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_double_line), + SwitchV("status_bar_time_double_line"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_double_line_center_align), + SwitchV("status_bar_time_double_line_center_align"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + Text( + textId = R.string.status_bar_clock_size, + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_clock_size", + 0, + 18, + 0, + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + Text( + textId = R.string.status_bar_clock_double_line_size, + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_clock_double_line_size", + 0, + 9, + 0, + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + //预设模式结束 + + //极客模式起始 + TextSummaryWithArrow(TextSummaryV(textId = R.string.custom_clock_format_geek) { + NewDialog(activity) { + setTitle(R.string.custom_clock_format_geek) + setEditText( + MIUIActivity.safeSP.getString("custom_clock_format_geek", "HH:mm:ss"), "", isSingleLine = false + ) + Button(getString(R.string.click_to_view_use_cases)) { + val locale = context.resources.configuration.locale + val language = locale.language + if (language.endsWith("zh")) { + val uri = Uri.parse("https://zhuti.designer.xiaomi.com/docs/grammar/#%E6%97%B6%E9%97%B4%E6%97%A5%E6%9C%9F") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } else { + val uri = Uri.parse("https://docs.google.com/spreadsheets/d/1ghkT2iFbxB3bT4TKCiKAfmEdGt6kTVKFU3dm4Nz1or8/edit?usp=sharing") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } + } + Button(getString(R.string.Done)) { + if (getEditText().isNotEmpty()) { + try { + MIUIActivity.safeSP.putAny("custom_clock_format_geek", getEditText()) + dismiss() + return@Button + } catch (_: Throwable) { + } + } + Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT).show() + } + Button(getString(R.string.cancel), cancelStyle = true) { + dismiss() + } + }.show() + }, dataBindingRecv = customClockGeekBinding.binding.getRecv(2)) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_double_line_center_align), + SwitchV("status_bar_time_center_align_geek"), + dataBindingRecv = customClockGeekBinding.binding.getRecv(2) + ) + Text( + textId = R.string.status_bar_clock_size, + dataBindingRecv = customClockGeekBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_clock_size_geek", + 0, + 18, + 0, + dataBindingRecv = customClockGeekBinding.binding.getRecv(2) + ) + //极客模式结束 + + + Line() + TitleText(textId = R.string.status_bar_icon) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.hide_icon, + onClickListener = { showFragment("hide_icon") }) + ) + TextWithSwitch( + TextV(textId = R.string.show_wifi_standard), + SwitchV("show_wifi_standard") + ) + val customMobileTypeTextBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "custom_mobile_type_text_switch", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.custom_mobile_type_text_switch), + SwitchV( + "custom_mobile_type_text_switch", + dataBindingSend = customMobileTypeTextBinding.bindingSend + ) + ) + TextSummaryWithArrow(TextSummaryV(textId = R.string.custom_mobile_type_text) { + MIUIDialog(activity) { + setTitle(R.string.custom_mobile_type_text) + setEditText(MIUIActivity.safeSP.getString("custom_mobile_type_text", "5G"), "") + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText().isNotEmpty()) { + try { + MIUIActivity.safeSP.putAny("custom_mobile_type_text", getEditText()) + dismiss() + return@setRButton + } catch (_: Throwable) { + } + } + Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT) + .show() + } + }.show() + }, dataBindingRecv = customMobileTypeTextBinding.binding.getRecv(2)) + val bigMobileTypeIconBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "big_mobile_type_icon", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.big_mobile_type_icon), + SwitchV( + "big_mobile_type_icon", + dataBindingSend = bigMobileTypeIconBinding.bindingSend + ) + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.big_mobile_type_icon_bold), + SwitchV("big_mobile_type_icon_bold", true), + dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.big_mobile_type_icon_size, + onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.big_mobile_type_icon_size) + setEditText( + "", + "${activity.getString(R.string.def)}12.5, ${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getFloat("big_mobile_type_icon_size", 12.5f) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText() != "") { + MIUIActivity.safeSP.putAny( + "big_mobile_type_icon_size", + getEditText().toFloat() + ) + } + dismiss() + } + }.show() + }), dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2) + ) + TextSummaryWithArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_up_and_down_position) { + MIUIDialog(activity) { + setTitle(R.string.big_mobile_type_icon_up_and_down_position) + setMessage("${activity.getString(R.string.range)} -15~15") + setEditText( + "", + "${activity.getString(R.string.def)}0, ${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getInt("big_mobile_type_icon_up_and_down_position", 0) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText().isNotEmpty()) { + try { + val value = getEditText().toInt() + if (value in (-15..15)) { + MIUIActivity.safeSP.putAny( + "big_mobile_type_icon_up_and_down_position", + value + ) + dismiss() + return@setRButton + } + } catch (_: Throwable) { + } + } + Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT) + .show() + } + }.show() + }, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)) + TextSummaryWithArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_left_and_right_margins) { + MIUIDialog(activity) { + setTitle(R.string.big_mobile_type_icon_left_and_right_margins) + setMessage("${activity.getString(R.string.range)} 0~30") + setEditText( + "", + "${activity.getString(R.string.def)}0, ${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getInt("big_mobile_type_icon_left_and_right_margins", 0) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText().isNotEmpty()) { + try { + val value = getEditText().toInt() + if (value in (0..30)) { + MIUIActivity.safeSP.putAny( + "big_mobile_type_icon_left_and_right_margins", + value + ) + dismiss() + return@setRButton + } + } catch (_: Throwable) { + } + } + Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT) + .show() + } + }.show() + }, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)) + Text(textId = R.string.maximum_number_of_notification_icons) + SeekBarWithText("maximum_number_of_notification_icons", 1, 30, 3) + Text(textId = R.string.maximum_number_of_notification_dots) + SeekBarWithText("maximum_number_of_notification_dots", 0, 4, 3) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.battery_percentage_font_size, + onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.battery_percentage_font_size) + setMessage(R.string.zero_do_no_change) + setEditText( + "", "${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getFloat("battery_percentage_font_size", 0f) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText() != "") { + MIUIActivity.safeSP.putAny( + "battery_percentage_font_size", + getEditText().toFloat() + ) + } + dismiss() + } + }.show() + }) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.hide_battery_percentage_icon, + tipsId = R.string.hide_battery_percentage_icon_summary + ), SwitchV("hide_battery_percentage_icon") + ) + Line() + TitleText(textId = R.string.status_bar_network_speed) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.status_bar_network_speed_refresh_speed, + tipsId = R.string.status_bar_network_speed_refresh_speed_summary + ), SwitchV("status_bar_network_speed_refresh_speed") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.hide_status_bar_network_speed_second, + tipsId = R.string.hide_status_bar_network_speed_second_summary + ), SwitchV("hide_status_bar_network_speed_second") + ) + TextWithSwitch( + TextV(textId = R.string.hide_network_speed_splitter), + SwitchV("hide_network_speed_splitter") + ) + val statusBarDualRowNetworkSpeedBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "status_bar_dual_row_network_speed", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.status_bar_dual_row_network_speed, + tipsId = R.string.status_bar_dual_row_network_speed_summary + ), + SwitchV( + "status_bar_dual_row_network_speed", + dataBindingSend = statusBarDualRowNetworkSpeedBinding.bindingSend + ) + ) + val align: HashMap = hashMapOf() + align[0] = getString(R.string.left) + align[1] = getString(R.string.right) + TextWithSpinner( + TextV(textId = R.string.status_bar_network_speed_dual_row_gravity), + SpinnerV( + align[MIUIActivity.safeSP.getInt( + "status_bar_network_speed_dual_row_gravity", + 0 + )].toString() + ) { + add(align[0].toString()) { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_gravity", 0) + } + add(align[1].toString()) { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_gravity", 1) + + } + }, + dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2) + ) + TextWithSpinner( + TextV(textId = R.string.status_bar_network_speed_dual_row_icon), + SpinnerV( + MIUIActivity.safeSP.getString( + "status_bar_network_speed_dual_row_icon", + getString(R.string.none) + ) + ) { + add(getString(R.string.none)) { + MIUIActivity.safeSP.putAny( + "status_bar_network_speed_dual_row_icon", + getString(R.string.none) + ) + } + add("▲▼") { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "▲▼") + } + add("△▽") { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "△▽") + } + add("↑↓") { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "↑↓") + } + }) + Text( + textId = R.string.status_bar_network_speed_dual_row_size, + dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_network_speed_dual_row_size", + 0, + 9, + 0, + dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2) + ) + Line() + TitleText(textId = R.string.notification_center) + val showWeatherMainSwitchBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "notification_weather", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_weather_main_switch, + colorId = R.color.blue + ), + SwitchV( + "notification_weather", + dataBindingSend = showWeatherMainSwitchBinding.bindingSend + ) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_city, + ), + SwitchV("notification_weather_city"), + dataBindingRecv = showWeatherMainSwitchBinding.binding.getRecv(2) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.can_notification_slide, + tipsId = R.string.can_notification_slide_summary, + ), + SwitchV("can_notification_slide"), + ) + Line() + TitleText(textId = R.string.control_center) + val controlCenterWeatherBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "control_center_weather", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_weather_main_switch, + colorId = R.color.blue, + tipsId = R.string.control_center_weather_summary + ), + SwitchV( + "control_center_weather", + dataBindingSend = controlCenterWeatherBinding.bindingSend + ) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_city, + ), + SwitchV("control_center_weather_city"), + dataBindingRecv = controlCenterWeatherBinding.binding.getRecv(2) + ) + Line() + TitleText(textId = R.string.lock_screen) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.lock_screen_clock_display_seconds, + tipsId = R.string.only_official_default_themes_are_supported + ), SwitchV("lock_screen_clock_display_seconds") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_the_left_side_of_the_lock_screen, + tipsId = R.string.only_official_default_themes_are_supported + ), SwitchV("remove_the_left_side_of_the_lock_screen") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_lock_screen_camera, + tipsId = R.string.only_official_default_themes_are_supported + ), SwitchV("remove_lock_screen_camera") + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.enable_wave_charge_animation), + SwitchV("enable_wave_charge_animation") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.lock_screen_charging_current, + tipsId = R.string.only_official_default_themes_are_supported + ), SwitchV("lock_screen_charging_current") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.double_tap_to_sleep, + tipsId = R.string.home_double_tap_to_sleep_summary + ), SwitchV("lock_screen_double_tap_to_sleep") + ) + Line() + TitleText(textId = R.string.old_quick_settings_panel) + val oldQSCustomSwitchBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "old_qs_custom_switch", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.old_qs_custom_switch, + colorId = R.color.blue + ), + SwitchV( + "old_qs_custom_switch", + dataBindingSend = oldQSCustomSwitchBinding.bindingSend + ) + ) + Text( + textId = R.string.qs_custom_rows, + dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + SeekBarWithText( + "qs_custom_rows", + 1, + 6, + 3, + dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + Text( + textId = R.string.qs_custom_rows_horizontal, + dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + SeekBarWithText( + "qs_custom_rows_horizontal", + 1, + 3, + 2, + dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + Text( + textId = R.string.qs_custom_columns, + dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + SeekBarWithText( + "qs_custom_columns", + 1, + 7, + 4, + dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + Text( + textId = R.string.qs_custom_columns_unexpanded, + dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + SeekBarWithText( + "qs_custom_columns_unexpanded", + 1, + 7, + 5, + dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/AndroidPageForT.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/AndroidPageForT.kt new file mode 100644 index 00000000..e59ff64e --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/AndroidPageForT.kt @@ -0,0 +1,134 @@ +package com.lt2333.simplicitytools.activity.pages.t + +import android.view.View +import android.widget.Switch +import cn.fkj233.ui.activity.MIUIActivity +import cn.fkj233.ui.activity.annotation.BMPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import cn.fkj233.ui.dialog.MIUIDialog +import com.lt2333.simplicitytools.R + + +@BMPage("scope_android","Android", hideMenu = false) +class AndroidPageForT : BasePage() { + + override fun onCreate() { + TitleText(textId = R.string.corepacth) + + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.downgr, + tipsId = R.string.downgr_summary + ), SwitchV("downgrade") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.authcreak, + tipsId = R.string.authcreak_summary + ), SwitchV("authcreak") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.digestCreak, + tipsId = R.string.digestCreak_summary + ), SwitchV("digestCreak") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.UsePreSig, + tipsId = R.string.UsePreSig_summary + ), SwitchV("UsePreSig") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.enhancedMode, + tipsId = R.string.enhancedMode_summary + ), SwitchV("enhancedMode") + ) + Line() + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.disable_flag_secure, + tipsId = R.string.disable_flag_secure_summary + ), SwitchV("disable_flag_secure") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.delete_on_post_notification, + tipsId = R.string.delete_on_post_notification_summary + ), SwitchV("delete_on_post_notification") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_small_window_restrictions, + tipsId = R.string.remove_small_window_restrictions_summary + ), SwitchV("remove_small_window_restrictions") + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.max_wallpaper_scale, + onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.max_wallpaper_scale) + setEditText( + "", + "${activity.getString(R.string.def)}1.2, ${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getFloat("max_wallpaper_scale", 1.2f) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText() != "") { + MIUIActivity.safeSP.putAny( + "max_wallpaper_scale", + getEditText().toFloat() + ) + } + dismiss() + } + }.show() + }) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.allow_untrusted_touches, + tipsId = R.string.take_effect_after_reboot + ), SwitchV("allow_untrusted_touches") + ) + Line() + TitleText(textId = R.string.sound) + val mediaVolumeStepsSwitchBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "media_volume_steps_switch", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.media_volume_steps_switch, + tips = "${getString(R.string.take_effect_after_reboot)}\n${getString(R.string.media_volume_steps_summary)}" + ), + SwitchV( + "media_volume_steps_switch", + dataBindingSend = mediaVolumeStepsSwitchBinding.bindingSend + ) + ) + SeekBarWithText( + "media_volume_steps", + 15, + 29, + 15, + dataBindingRecv = mediaVolumeStepsSwitchBinding.binding.getRecv(2) + ) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/HideIconPageForT.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/HideIconPageForT.kt new file mode 100644 index 00000000..10505282 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/HideIconPageForT.kt @@ -0,0 +1,109 @@ +package com.lt2333.simplicitytools.activity.pages.t + +import android.view.View +import android.widget.Switch +import cn.fkj233.ui.activity.MIUIActivity +import cn.fkj233.ui.activity.annotation.BMPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import cn.fkj233.ui.activity.view.TextV +import cn.fkj233.ui.dialog.MIUIDialog +import com.lt2333.simplicitytools.R + + +@BMPage("hide_icon","Hide Icon", hideMenu = false) +class HideIconPageForT : BasePage() { + + override fun onCreate() { + TitleText(textId = R.string.status_bar_icon) + TextWithSwitch( + TextV(textId = R.string.hide_battery_icon), + SwitchV("hide_battery_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_battery_charging_icon), + SwitchV("hide_battery_charging_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_gps_icon), SwitchV("hide_gps_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_bluetooth_icon), + SwitchV("hide_bluetooth_icon") + ) + + TextWithSwitch(TextV(textId = R.string.hide_nfc_icon), SwitchV("hide_nfc_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_bluetooth_battery_icon), + SwitchV("hide_bluetooth_battery_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_small_hd_icon), + SwitchV("hide_small_hd_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_big_hd_icon), + SwitchV("hide_big_hd_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_new_hd_icon), + SwitchV("hide_new_hd_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_hd_no_service_icon), + SwitchV("hide_hd_no_service_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_no_sim_icon), + SwitchV("hide_no_sim_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_sim_one_icon), + SwitchV("hide_sim_one_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_sim_two_icon), + SwitchV("hide_sim_two_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_mobile_activity_icon), + SwitchV("hide_mobile_activity_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_mobile_type_icon), + SwitchV("hide_mobile_type_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_wifi_icon), SwitchV("hide_wifi_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_wifi_activity_icon), + SwitchV("hide_wifi_activity_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_wifi_standard_icon), + SwitchV("hide_wifi_standard_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_slave_wifi_icon), + SwitchV("hide_slave_wifi_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_hotspot_icon), + SwitchV("hide_hotspot_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_vpn_icon), SwitchV("hide_vpn_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_airplane_icon), + SwitchV("hide_airplane_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_alarm_icon), SwitchV("hide_alarm_icon")) + TextWithSwitch( + TextV(textId = R.string.hide_headset_icon), + SwitchV("hide_headset_icon") + ) + TextWithSwitch( + TextV(textId = R.string.hide_volume_icon), + SwitchV("hide_volume_icon") + ) + TextWithSwitch(TextV(textId = R.string.hide_zen_icon), SwitchV("hide_zen_icon")) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/MainPageForT.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/MainPageForT.kt new file mode 100644 index 00000000..84ae6d2d --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/MainPageForT.kt @@ -0,0 +1,82 @@ +package com.lt2333.simplicitytools.activity.pages.t + +import android.content.ComponentName +import android.content.pm.PackageManager +import cn.fkj233.ui.activity.annotation.BMMainPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import cn.fkj233.ui.dialog.MIUIDialog +import com.lt2333.simplicitytools.BuildConfig +import com.lt2333.simplicitytools.R + + +@BMMainPage("WooBox[MIUI14]") +class MainPageForT : BasePage() { + + override fun onCreate() { + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.main_switch, + colorId = R.color.blue + ), SwitchV("main_switch", true) + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.HideLauncherIcon), + SwitchV("hLauncherIcon", onClickListener = { + activity.packageManager.setComponentEnabledSetting( + ComponentName(activity, "${BuildConfig.APPLICATION_ID}.launcher"), + if (it) { + PackageManager.COMPONENT_ENABLED_STATE_DISABLED + } else { + PackageManager.COMPONENT_ENABLED_STATE_ENABLED + }, + PackageManager.DONT_KILL_APP + ) + }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.matters_needing_attention, + colorId = R.color.red, + onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.matters_needing_attention) + setMessage(R.string.matters_needing_attention_context) + setRButton(R.string.Done) { + dismiss() + } + }.show() + }) + ) + Line() + TitleText(textId = R.string.scope) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.scope_systemui, + tipsId = R.string.scope_systemui_summary, + onClickListener = { showFragment("scope_systemui") }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.scope_android, + tipsId = R.string.scope_android_summary, + onClickListener = { showFragment("scope_android") }) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.scope_other, + tipsId = R.string.scope_other_summary, + onClickListener = { showFragment("scope_other") }) + ) + Line() + TitleText(textId = R.string.about) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.about_module, + tips = getString(R.string.about_module_summary), + onClickListener = { showFragment("about_module") }) + ) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/OtherPageForT.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/OtherPageForT.kt new file mode 100644 index 00000000..97524a9e --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/OtherPageForT.kt @@ -0,0 +1,198 @@ +package com.lt2333.simplicitytools.activity.pages.t + +import android.content.ComponentName +import android.content.Intent +import android.view.View +import android.widget.Switch +import android.widget.Toast +import cn.fkj233.ui.activity.MIUIActivity +import cn.fkj233.ui.activity.annotation.BMPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import com.lt2333.simplicitytools.R + + +@BMPage("scope_other", "Other", hideMenu = false) +class OtherPageForT : BasePage() { + + override fun onCreate() { + TitleText(textId = R.string.scope_miuihome) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.home_time, + tipsId = R.string.home_time_summary + ), SwitchV("home_time") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.double_tap_to_sleep, + tipsId = R.string.home_double_tap_to_sleep_summary + ), SwitchV("double_tap_to_sleep") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.miuihome_recentwiew_wallpaper_darkening, tipsId = R.string.miuihome_recentwiew_wallpaper_darkening_summary + ), SwitchV("miuihome_recentwiew_wallpaper_darkening", false) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.miuihome_recentview_remove_card_animation, tipsId = R.string.miuihome_recentview_remove_card_animation_summary + ), SwitchV("miuihome_recentview_remove_card_animation", false) + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.miuihome_shortcut_add_small_window, tipsId = R.string.miuihome_shortcut_add_small_window_summary), + SwitchV("miuihome_shortcut_add_small_window", false) + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.miuihome_scroll_icon_name, tipsId = R.string.miuihome_scroll_icon_name_summary), + SwitchV("miuihome_scroll_icon_name", false) + ) + Line() + TitleText(textId = R.string.scope_powerkeeper) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.lock_max_fps, + tipsId = R.string.lock_max_fps_summary + ), SwitchV("lock_max_fps") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.prevent_recovery_of_battery_optimization_white_list, + tipsId = R.string.failed_after_restart + ), SwitchV("prevent_recovery_of_battery_optimization_white_list") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.do_not_clear_app, + tipsId = R.string.do_not_clear_app_summary + ), SwitchV("do_not_clear_app") + ) + val makeMilletMoreAggressiveSwitchBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "make_millet_more_aggressive", + false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.make_millet_more_aggressive, + tipsId = R.string.make_millet_more_aggressive_summary + ), + SwitchV( + "make_millet_more_aggressive", + dataBindingSend = makeMilletMoreAggressiveSwitchBinding.bindingSend + ) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.make_millet_ignore_active, + tipsId = R.string.make_millet_ignore_active_summary + ), + SwitchV("make_millet_ignore_active"), + dataBindingRecv = makeMilletMoreAggressiveSwitchBinding.binding.getRecv(2) + ) + TextSummaryWithArrow( + TextSummaryV( + textId = R.string.battery_optimization, + tipsId = R.string.battery_optimization_summary, + onClickListener = { + try { + val intent = Intent() + val comp = ComponentName( + "com.android.settings", + "com.android.settings.Settings\$HighPowerApplicationsActivity" + ) + intent.component = comp + activity.startActivity(intent) + } catch (e: Exception) { + Toast.makeText(activity, "启动失败,可能是不支持", Toast.LENGTH_LONG).show() + } + }) + ) + Line() + TitleText(textId = R.string.scope_securitycenter) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.skip_waiting_time, + tipsId = R.string.skip_waiting_time_summary + ), SwitchV("skip_waiting_time") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_open_app_confirmation_popup, + tipsId = R.string.remove_open_app_confirmation_popup_summary + ), SwitchV("remove_open_app_confirmation_popup") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.lock_one_hundred, + tipsId = R.string.lock_one_hundred_summary + ), SwitchV("lock_one_hundred") + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.remove_macro_blacklist), + SwitchV("remove_macro_blacklist") + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.battery_life_function), + SwitchV("battery_life_function") + ) + Line() + TitleText(textId = R.string.scope_mediaeditor) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.unlock_unlimited_cropping, + tipsId = R.string.unlock_unlimited_cropping_summary + ), SwitchV("unlock_unlimited_cropping") + ) + Line() + TitleText(textId = R.string.updater) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_ota_validate, + tipsId = R.string.remove_ota_validate_summary + ), SwitchV("remove_ota_validate") + ) + Line() + TitleText(textId = R.string.settings) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_notification_importance, + tipsId = R.string.show_notification_importance_summary + ), SwitchV("show_notification_importance") + ) + Line() + TitleText(textId = R.string.cast) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.force_support_send_app, + ), SwitchV("force_support_send_app") + ) + Line() + TitleText(textId = R.string.rear_display) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_weather_main_switch, + ), SwitchV("rear_show_weather") + ) + Line() + TitleText(textId = R.string.remove_ad) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.remove_thememanager_ads), + SwitchV("remove_thememanager_ads") + ) + Line() + TitleText(textId = R.string.pkg_installer) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.pkg_installer_summary), + SwitchV("pkg_installer_count_checking") + ) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/SystemUIPageForT.kt b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/SystemUIPageForT.kt new file mode 100644 index 00000000..4eadab2f --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/activity/pages/t/SystemUIPageForT.kt @@ -0,0 +1,680 @@ +package com.lt2333.simplicitytools.activity.pages.t + +import android.content.Intent +import android.net.Uri +import android.view.View +import android.widget.Switch +import android.widget.Toast +import cn.fkj233.ui.activity.MIUIActivity +import cn.fkj233.ui.activity.annotation.BMPage +import cn.fkj233.ui.activity.data.BasePage +import cn.fkj233.ui.activity.view.SpinnerV +import cn.fkj233.ui.activity.view.SwitchV +import cn.fkj233.ui.activity.view.TextSummaryV +import cn.fkj233.ui.activity.view.TextV +import cn.fkj233.ui.dialog.MIUIDialog +import cn.fkj233.ui.dialog.NewDialog +import com.lt2333.simplicitytools.R + + +@BMPage("scope_systemui", "System UI", hideMenu = false) class SystemUIPageForT : BasePage() { + + override fun onCreate() { + TitleText(textId = R.string.statusbar) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.double_tap_to_sleep), SwitchV("status_bar_double_tap_to_sleep") + ) + Line() + TitleText(textId = R.string.status_bar_layout) + val statusBarLayoutMode: HashMap = hashMapOf().also { + it[0] = getString(R.string.default1) + it[1] = getString(R.string.clock_center) + it[2] = getString(R.string.clock_right) + it[3] = getString(R.string.clock_center_and_icon_left) + } + TextWithSpinner(TextV(textId = R.string.status_bar_layout_mode), SpinnerV( + statusBarLayoutMode[MIUIActivity.safeSP.getInt( + "status_bar_layout_mode", 0 + )].toString() + ) { + add(statusBarLayoutMode[0].toString()) { + MIUIActivity.safeSP.putAny("status_bar_layout_mode", 0) + } + add(statusBarLayoutMode[1].toString()) { + MIUIActivity.safeSP.putAny("status_bar_layout_mode", 1) + } + add(statusBarLayoutMode[2].toString()) { + MIUIActivity.safeSP.putAny("status_bar_layout_mode", 2) + } + add(statusBarLayoutMode[3].toString()) { + MIUIActivity.safeSP.putAny("status_bar_layout_mode", 3) + } + }) + + val layoutCompatibilityBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "layout_compatibility_mode", false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.layout_compatibility_mode, tipsId = R.string.layout_compatibility_mode_summary + ), SwitchV("layout_compatibility_mode", dataBindingSend = layoutCompatibilityBinding.bindingSend) + ) + + Text( + textId = R.string.left_margin, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_left_margin", 0, 300, 0, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2) + ) + Text( + textId = R.string.right_margin, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_right_margin", 0, 300, 0, dataBindingRecv = layoutCompatibilityBinding.binding.getRecv(2) + ) + Line() + TitleText(textId = R.string.status_bar_clock_format) + + + val customClockPresetBinding = GetDataBinding({ + MIUIActivity.safeSP.getInt( + "custom_clock_mode", 0 + ) == 1 + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + + val customClockGeekBinding = GetDataBinding({ MIUIActivity.safeSP.getInt("custom_clock_mode", 0) == 2 } + + ) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + + val customClockMode: HashMap = hashMapOf().also { + it[0] = getString(R.string.off) + it[1] = getString(R.string.preset) + it[2] = getString(R.string.geek) + } + TextWithSpinner(TextV(textId = R.string.custom_clock_mode), SpinnerV( + customClockMode[MIUIActivity.safeSP.getInt( + "custom_clock_mode", 0 + )].toString() + ) { + add(customClockMode[0].toString()) { + MIUIActivity.safeSP.putAny("custom_clock_mode", 0) + customClockPresetBinding.binding.Send().send(false) + customClockGeekBinding.binding.Send().send(false) + } + add(customClockMode[1].toString()) { + MIUIActivity.safeSP.putAny("custom_clock_mode", 1) + customClockPresetBinding.binding.Send().send(true) + customClockGeekBinding.binding.Send().send(false) + } + add(customClockMode[2].toString()) { + MIUIActivity.safeSP.putAny("custom_clock_mode", 2) + customClockPresetBinding.binding.Send().send(false) + customClockGeekBinding.binding.Send().send(true) + } + }) + + //预设模式起始 + TextWithSwitch( + TextV(textId = R.string.status_bar_time_year), + SwitchV("status_bar_time_year"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_month), + SwitchV("status_bar_time_month"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_day), + SwitchV("status_bar_time_day"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_week), + SwitchV("status_bar_time_week"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_double_hour), + SwitchV("status_bar_time_double_hour"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_period), + SwitchV("status_bar_time_period", true), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_seconds), + SwitchV("status_bar_time_seconds"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_hide_space), + SwitchV("status_bar_time_hide_space"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_double_line), + SwitchV("status_bar_time_double_line"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_double_line_center_align), + SwitchV("status_bar_time_double_line_center_align"), + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + Text( + textId = R.string.status_bar_clock_size, dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_clock_size", 0, 18, 0, dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + Text( + textId = R.string.status_bar_clock_double_line_size, + dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_clock_double_line_size", 0, 9, 0, dataBindingRecv = customClockPresetBinding.binding.getRecv(2) + ) + //预设模式结束 + + //极客模式起始 + TextSummaryWithArrow(TextSummaryV(textId = R.string.custom_clock_format_geek) { + NewDialog(activity) { + setTitle(R.string.custom_clock_format_geek) + setEditText( + MIUIActivity.safeSP.getString("custom_clock_format_geek", "HH:mm:ss"), "", isSingleLine = false + ) + Button(getString(R.string.click_to_view_use_cases)) { + val locale = context.resources.configuration.locale + val language = locale.language + if (language.endsWith("zh")) { + val uri = Uri.parse("https://zhuti.designer.xiaomi.com/docs/grammar/#%E6%97%B6%E9%97%B4%E6%97%A5%E6%9C%9F") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } else { + val uri = Uri.parse("https://docs.google.com/spreadsheets/d/1ghkT2iFbxB3bT4TKCiKAfmEdGt6kTVKFU3dm4Nz1or8/edit?usp=sharing") + val intent = Intent(Intent.ACTION_VIEW, uri) + activity.startActivity(intent) + } + } + Button(getString(R.string.Done)) { + if (getEditText().isNotEmpty()) { + try { + MIUIActivity.safeSP.putAny("custom_clock_format_geek", getEditText()) + dismiss() + return@Button + } catch (_: Throwable) { + } + } + Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT).show() + } + Button(getString(R.string.cancel), cancelStyle = true) { + dismiss() + } + }.show() + }, dataBindingRecv = customClockGeekBinding.binding.getRecv(2)) + TextWithSwitch( + TextV(textId = R.string.status_bar_time_double_line_center_align), + SwitchV("status_bar_time_center_align_geek"), + dataBindingRecv = customClockGeekBinding.binding.getRecv(2) + ) + Text( + textId = R.string.status_bar_clock_size, dataBindingRecv = customClockGeekBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_clock_size_geek", 0, 18, 0, dataBindingRecv = customClockGeekBinding.binding.getRecv(2) + ) + //极客模式结束 + + + Line() + TitleText(textId = R.string.status_bar_icon) + TextSummaryWithArrow( + TextSummaryV(textId = R.string.hide_icon, onClickListener = { showFragment("hide_icon") }) + ) + TextWithSwitch( + TextV(textId = R.string.show_wifi_standard), SwitchV("show_wifi_standard") + ) + val customMobileTypeTextBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "custom_mobile_type_text_switch", false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.custom_mobile_type_text_switch), SwitchV( + "custom_mobile_type_text_switch", dataBindingSend = customMobileTypeTextBinding.bindingSend + ) + ) + TextSummaryWithArrow(TextSummaryV(textId = R.string.custom_mobile_type_text) { + MIUIDialog(activity) { + setTitle(R.string.custom_mobile_type_text) + setEditText(MIUIActivity.safeSP.getString("custom_mobile_type_text", "5G"), "") + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText().isNotEmpty()) { + try { + MIUIActivity.safeSP.putAny("custom_mobile_type_text", getEditText()) + dismiss() + return@setRButton + } catch (_: Throwable) { + } + } + Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT).show() + } + }.show() + }, dataBindingRecv = customMobileTypeTextBinding.binding.getRecv(2)) + val bigMobileTypeIconBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "big_mobile_type_icon", false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.big_mobile_type_icon), SwitchV( + "big_mobile_type_icon", dataBindingSend = bigMobileTypeIconBinding.bindingSend + ) + ) + val bigMobileTypeLocation: HashMap = hashMapOf().also { + it[0] = getString(R.string.left) + it[1] = getString(R.string.right) + } + TextWithSpinner( + TextV(textId = R.string.big_mobile_type_location), SpinnerV( + bigMobileTypeLocation[MIUIActivity.safeSP.getInt( + "big_mobile_type_location", 1 + )].toString() + ) { + add(bigMobileTypeLocation[0].toString()) { + MIUIActivity.safeSP.putAny("big_mobile_type_location", 0) + } + add(bigMobileTypeLocation[1].toString()) { + MIUIActivity.safeSP.putAny("big_mobile_type_location", 1) + } + }, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2) + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.big_mobile_type_only_show_network_card), + SwitchV("big_mobile_type_only_show_network_card", false), + dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2) + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.big_mobile_type_icon_bold), + SwitchV("big_mobile_type_icon_bold", true), + dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2) + ) + TextSummaryWithArrow( + TextSummaryV(textId = R.string.big_mobile_type_icon_size, onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.big_mobile_type_icon_size) + setEditText( + "", "${activity.getString(R.string.def)}12.5, ${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getFloat("big_mobile_type_icon_size", 12.5f) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText() != "") { + MIUIActivity.safeSP.putAny( + "big_mobile_type_icon_size", getEditText().toFloat() + ) + } + dismiss() + } + }.show() + }), dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2) + ) + TextSummaryWithArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_up_and_down_position) { + MIUIDialog(activity) { + setTitle(R.string.big_mobile_type_icon_up_and_down_position) + setMessage("${activity.getString(R.string.range)} -15~15") + setEditText( + "", "${activity.getString(R.string.def)}0, ${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getInt("big_mobile_type_icon_up_and_down_position", 0) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText().isNotEmpty()) { + try { + val value = getEditText().toInt() + if (value in (-15..15)) { + MIUIActivity.safeSP.putAny( + "big_mobile_type_icon_up_and_down_position", value + ) + dismiss() + return@setRButton + } + } catch (_: Throwable) { + } + } + Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT).show() + } + }.show() + }, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)) + TextSummaryWithArrow(TextSummaryV(textId = R.string.big_mobile_type_icon_left_and_right_margins) { + MIUIDialog(activity) { + setTitle(R.string.big_mobile_type_icon_left_and_right_margins) + setMessage("${activity.getString(R.string.range)} 0~30") + setEditText( + "", "${activity.getString(R.string.def)}0, ${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getInt("big_mobile_type_icon_left_and_right_margins", 0) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText().isNotEmpty()) { + try { + val value = getEditText().toInt() + if (value in (0..30)) { + MIUIActivity.safeSP.putAny( + "big_mobile_type_icon_left_and_right_margins", value + ) + dismiss() + return@setRButton + } + } catch (_: Throwable) { + } + } + Toast.makeText(activity, R.string.input_error, Toast.LENGTH_SHORT).show() + } + }.show() + }, dataBindingRecv = bigMobileTypeIconBinding.binding.getRecv(2)) + Text(textId = R.string.maximum_number_of_notification_icons) + SeekBarWithText("maximum_number_of_notification_icons", 1, 30, 3) + Text(textId = R.string.maximum_number_of_notification_dots) + SeekBarWithText("maximum_number_of_notification_dots", 0, 4, 3) + TextSummaryWithArrow( + TextSummaryV(textId = R.string.battery_percentage_font_size, onClickListener = { + MIUIDialog(activity) { + setTitle(R.string.battery_percentage_font_size) + setMessage(R.string.zero_do_no_change) + setEditText( + "", "${activity.getString(R.string.current)}${ + MIUIActivity.safeSP.getFloat("battery_percentage_font_size", 0f) + }" + ) + setLButton(textId = R.string.cancel) { + dismiss() + } + setRButton(textId = R.string.Done) { + if (getEditText() != "") { + MIUIActivity.safeSP.putAny( + "battery_percentage_font_size", getEditText().toFloat() + ) + } + dismiss() + } + }.show() + }) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.hide_battery_percentage_icon, tipsId = R.string.hide_battery_percentage_icon_summary + ), SwitchV("hide_battery_percentage_icon") + ) + Line() + TitleText(textId = R.string.status_bar_network_speed) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.status_bar_network_speed_refresh_speed, + tipsId = R.string.status_bar_network_speed_refresh_speed_summary + ), SwitchV("status_bar_network_speed_refresh_speed") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.hide_status_bar_network_speed_second, + tipsId = R.string.hide_status_bar_network_speed_second_summary + ), SwitchV("hide_status_bar_network_speed_second") + ) + TextWithSwitch( + TextV(textId = R.string.hide_network_speed_splitter), SwitchV("hide_network_speed_splitter") + ) + val statusBarDualRowNetworkSpeedBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "status_bar_dual_row_network_speed", false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.status_bar_dual_row_network_speed, + tipsId = R.string.status_bar_dual_row_network_speed_summary + ), SwitchV( + "status_bar_dual_row_network_speed", dataBindingSend = statusBarDualRowNetworkSpeedBinding.bindingSend + ) + ) + val align: HashMap = hashMapOf() + align[0] = getString(R.string.left) + align[1] = getString(R.string.right) + TextWithSpinner( + TextV(textId = R.string.status_bar_network_speed_dual_row_gravity), SpinnerV( + align[MIUIActivity.safeSP.getInt( + "status_bar_network_speed_dual_row_gravity", 0 + )].toString() + ) { + add(align[0].toString()) { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_gravity", 0) + } + add(align[1].toString()) { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_gravity", 1) + + } + }, dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2) + ) + TextWithSpinner(TextV(textId = R.string.status_bar_network_speed_dual_row_icon), SpinnerV( + MIUIActivity.safeSP.getString( + "status_bar_network_speed_dual_row_icon", getString(R.string.none) + ) + ) { + add(getString(R.string.none)) { + MIUIActivity.safeSP.putAny( + "status_bar_network_speed_dual_row_icon", getString(R.string.none) + ) + } + add("▲▼") { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "▲▼") + } + add("△▽") { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "△▽") + } + add("↑↓") { + MIUIActivity.safeSP.putAny("status_bar_network_speed_dual_row_icon", "↑↓") + } + }) + Text( + textId = R.string.status_bar_network_speed_dual_row_size, + dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2) + ) + SeekBarWithText( + "status_bar_network_speed_dual_row_size", + 0, + 9, + 0, + dataBindingRecv = statusBarDualRowNetworkSpeedBinding.binding.getRecv(2) + ) + Line() + TitleText(textId = R.string.notification_center) + val showWeatherMainSwitchBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "notification_weather", false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_weather_main_switch, colorId = R.color.blue + ), SwitchV( + "notification_weather", dataBindingSend = showWeatherMainSwitchBinding.bindingSend + ) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_city, + ), SwitchV("notification_weather_city"), dataBindingRecv = showWeatherMainSwitchBinding.binding.getRecv(2) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.can_notification_slide, + tipsId = R.string.can_notification_slide_summary, + ), + SwitchV("can_notification_slide"), + ) + Line() + TitleText(textId = R.string.control_center) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.disable_bluetooth_temporarily_off + ), SwitchV( + "disable_bluetooth_temporarily_off" + ) + ) + val controlCenterWeatherBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "control_center_weather", false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_weather_main_switch, + colorId = R.color.blue, + tipsId = R.string.control_center_weather_summary + ), SwitchV( + "control_center_weather", dataBindingSend = controlCenterWeatherBinding.bindingSend + ) + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.show_city, + ), SwitchV("control_center_weather_city"), dataBindingRecv = controlCenterWeatherBinding.binding.getRecv(2) + ) + Line() + TitleText(textId = R.string.lock_screen) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.lock_screen_clock_display_seconds, + tipsId = R.string.only_official_default_themes_are_supported + ), SwitchV("lock_screen_clock_display_seconds") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_the_left_side_of_the_lock_screen, + tipsId = R.string.only_official_default_themes_are_supported + ), SwitchV("remove_the_left_side_of_the_lock_screen") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.remove_lock_screen_camera, + tipsId = R.string.only_official_default_themes_are_supported + ), SwitchV("remove_lock_screen_camera") + ) + TextSummaryWithSwitch( + TextSummaryV(textId = R.string.enable_wave_charge_animation), SwitchV("enable_wave_charge_animation") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.lock_screen_charging_current, + tipsId = R.string.only_official_default_themes_are_supported + ), SwitchV("lock_screen_charging_current") + ) + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.double_tap_to_sleep, tipsId = R.string.home_double_tap_to_sleep_summary + ), SwitchV("lock_screen_double_tap_to_sleep") + ) + Line() + TitleText(textId = R.string.old_quick_settings_panel) + val oldQSCustomSwitchBinding = GetDataBinding({ + MIUIActivity.safeSP.getBoolean( + "old_qs_custom_switch", false + ) + }) { view, flags, data -> + when (flags) { + 1 -> (view as Switch).isEnabled = data as Boolean + 2 -> view.visibility = if (data as Boolean) View.VISIBLE else View.GONE + } + } + TextSummaryWithSwitch( + TextSummaryV( + textId = R.string.old_qs_custom_switch, colorId = R.color.blue + ), SwitchV( + "old_qs_custom_switch", dataBindingSend = oldQSCustomSwitchBinding.bindingSend + ) + ) + Text( + textId = R.string.qs_custom_rows, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + SeekBarWithText( + "qs_custom_rows", 1, 6, 3, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + Text( + textId = R.string.qs_custom_rows_horizontal, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + SeekBarWithText( + "qs_custom_rows_horizontal", 1, 3, 2, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + Text( + textId = R.string.qs_custom_columns, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + SeekBarWithText( + "qs_custom_columns", 1, 7, 4, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + Text( + textId = R.string.qs_custom_columns_unexpanded, + dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + SeekBarWithText( + "qs_custom_columns_unexpanded", 1, 7, 5, dataBindingRecv = oldQSCustomSwitchBinding.binding.getRecv(2) + ) + } + +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/application/DefaultApplication.kt b/app/src/main/java/com/lt2333/simplicitytools/application/DefaultApplication.kt new file mode 100644 index 00000000..e01ea46b --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/application/DefaultApplication.kt @@ -0,0 +1,11 @@ +package com.lt2333.simplicitytools.application + +import com.highcapable.yukihookapi.hook.xposed.application.ModuleApplication + +class DefaultApplication : ModuleApplication() { + + override fun onCreate() { + super.onCreate() + // Your code here. + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/MainHook.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/MainHook.kt new file mode 100644 index 00000000..2c56cf69 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/MainHook.kt @@ -0,0 +1,46 @@ +package com.lt2333.simplicitytools.hooks + +import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed +import com.highcapable.yukihookapi.hook.factory.configs +import com.highcapable.yukihookapi.hook.factory.encase +import com.highcapable.yukihookapi.hook.xposed.bridge.event.YukiXposedEvent +import com.highcapable.yukihookapi.hook.xposed.proxy.IYukiHookXposedInit +import com.lt2333.simplicitytools.hooks.apps.* +import com.lt2333.simplicitytools.hooks.rules.all.corepatch.CorePatchMainHook +import de.robv.android.xposed.IXposedHookZygoteInit +import de.robv.android.xposed.callbacks.XC_LoadPackage + +@InjectYukiHookWithXposed +class MainHook : IYukiHookXposedInit { + + override fun onInit() = configs { + debugLog { + tag = "WooBoxForMIUI-Debug" + } + } + + override fun onHook() = encase { + loadSystem(AndroidHooker) //Andorid + loadApp("com.android.systemui", SystemUIHooker) //系统界面 + loadApp("com.milink.service", CastHooker) //投屏 + loadApp("com.miui.mediaeditor", MediaEditorHooker) //相册编辑 + loadApp("com.miui.home", MiuiHomeHooker) //桌面 + loadApp("com.miui.packageinstaller", PackageInstallerHooker) //安装包管理组件 + loadApp("com.miui.powerkeeper", PowerKeepcerHooker) //电量与性能 + loadApp("com.xiaomi.misubscreenui", RearDisplayHooker) //背屏显示 + loadApp("com.miui.screenshot", ScreenShotHooker) //截屏 + loadApp("com.miui.securitycenter", SecurityCenterHooker) //手机管家 + loadApp("com.android.settings", SettingsHooker) //设置 + loadApp("com.android.thememanager", ThemeManagerHooker) //主题管理 + loadApp("com.android.updater", UpdaterHooker) //系统更新 + } + + override fun onXposedEvent() { + YukiXposedEvent.onHandleLoadPackage { + if (it.packageName == "android") CorePatchMainHook().handleLoadPackage(it) + } + YukiXposedEvent.onInitZygote { + CorePatchMainHook().initZygote(it) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/AndroidHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/AndroidHooker.kt new file mode 100644 index 00000000..67d34f1d --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/AndroidHooker.kt @@ -0,0 +1,21 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker +import com.lt2333.simplicitytools.hooks.rules.all.android.DisableFlagSecureForAll +import com.lt2333.simplicitytools.hooks.rules.all.corepatch.CorePatchMainHook + +object AndroidHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + loadHooker(DisableFlagSecureForAll) //允许截图 + } + + Build.VERSION_CODES.S -> { + loadHooker(DisableFlagSecureForAll) //允许截图 + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/CastHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/CastHooker.kt new file mode 100644 index 00000000..fb4a9dcd --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/CastHooker.kt @@ -0,0 +1,17 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker +import com.lt2333.simplicitytools.hooks.rules.all.android.DisableFlagSecureForAll + +object CastHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/MediaEditorHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/MediaEditorHooker.kt new file mode 100644 index 00000000..d957ca58 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/MediaEditorHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object MediaEditorHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/MiuiHomeHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/MiuiHomeHooker.kt new file mode 100644 index 00000000..3e98f5ee --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/MiuiHomeHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object MiuiHomeHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/PackageInstallerHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/PackageInstallerHooker.kt new file mode 100644 index 00000000..e12e1dcf --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/PackageInstallerHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object PackageInstallerHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/PowerKeepcerHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/PowerKeepcerHooker.kt new file mode 100644 index 00000000..08cd861e --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/PowerKeepcerHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object PowerKeepcerHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/RearDisplayHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/RearDisplayHooker.kt new file mode 100644 index 00000000..ae7d2144 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/RearDisplayHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object RearDisplayHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/ScreenShotHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/ScreenShotHooker.kt new file mode 100644 index 00000000..f5d97449 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/ScreenShotHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object ScreenShotHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SecurityCenterHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SecurityCenterHooker.kt new file mode 100644 index 00000000..da35495d --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SecurityCenterHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object SecurityCenterHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SettingsHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SettingsHooker.kt new file mode 100644 index 00000000..30d770d2 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SettingsHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object SettingsHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SystemUIHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SystemUIHooker.kt new file mode 100644 index 00000000..ecf936a6 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/SystemUIHooker.kt @@ -0,0 +1,17 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker +import com.lt2333.simplicitytools.hooks.rules.all.android.DisableFlagSecureForAll + +object SystemUIHooker : YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/ThemeManagerHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/ThemeManagerHooker.kt new file mode 100644 index 00000000..a2ead92d --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/ThemeManagerHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object ThemeManagerHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/UpdaterHooker.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/UpdaterHooker.kt new file mode 100644 index 00000000..69ff5f87 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/apps/UpdaterHooker.kt @@ -0,0 +1,16 @@ +package com.lt2333.simplicitytools.hooks.apps + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker + +object UpdaterHooker: YukiBaseHooker() { + override fun onHook() { + when (Build.VERSION.SDK_INT) { + Build.VERSION_CODES.TIRAMISU -> { + } + + Build.VERSION_CODES.S -> { + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/android/DisableFlagSecureForAll.kt b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/android/DisableFlagSecureForAll.kt new file mode 100644 index 00000000..45c74b15 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/android/DisableFlagSecureForAll.kt @@ -0,0 +1,45 @@ +package com.lt2333.simplicitytools.hooks.rules.all.android + +import android.os.Build +import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker +import com.highcapable.yukihookapi.hook.factory.MembersType +import com.lt2333.simplicitytools.utils.hasEnable + +object DisableFlagSecureForAll : YukiBaseHooker() { + override fun onHook() { + "com.android.server.wm.WindowState".hook { + injectMember { + method { name = "isSecureLocked" } + beforeHook { + hasEnable("disable_flag_secure") { + this.result = false + } + } + } + } + //Android13 额外Hook + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU) { + "com.android.server.wm.WindowSurfaceController".hook { + injectMember { + method { name = "setSecure" } + beforeHook { + hasEnable("disable_flag_secure") { + this.args[0] = false + } + } + } + injectMember { + allMembers(MembersType.CONSTRUCTOR) + beforeHook { + hasEnable("disable_flag_secure") { + var flags = this.args[2] as Int + val secureFlag = 128 + flags = flags and secureFlag.inv() + this.args[2] = flags + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForQ.java b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForQ.java new file mode 100644 index 00000000..d444fc39 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForQ.java @@ -0,0 +1,142 @@ +package com.lt2333.simplicitytools.hooks.rules.all.corepatch; + + +import android.content.pm.ApplicationInfo; +import android.content.pm.Signature; + +import com.lt2333.simplicitytools.BuildConfig; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; + +import de.robv.android.xposed.IXposedHookLoadPackage; +import de.robv.android.xposed.IXposedHookZygoteInit; +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XSharedPreferences; +import de.robv.android.xposed.XposedHelpers; +import de.robv.android.xposed.callbacks.XC_LoadPackage; + +public class CorePatchForQ extends XposedHelper implements IXposedHookLoadPackage, IXposedHookZygoteInit { + XSharedPreferences prefs = new XSharedPreferences(BuildConfig.APPLICATION_ID, "config"); + + @Override + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws IllegalAccessException, InvocationTargetException, InstantiationException { + // 允许降级 + Class packageClazz = XposedHelpers.findClass("android.content.pm.PackageParser.Package", loadPackageParam.classLoader); + hookAllMethods("com.android.server.pm.PackageManagerService", loadPackageParam.classLoader, "checkDowngrade", new XC_MethodHook() { + public void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable { + super.beforeHookedMethod(methodHookParam); + if (prefs.getBoolean("downgrade", true)) { + Object packageInfoLite = methodHookParam.args[0]; + + if (prefs.getBoolean("downgrade", true)) { + Field field = packageClazz.getField("mVersionCode"); + field.setAccessible(true); + field.set(packageInfoLite, 0); + field = packageClazz.getField("mVersionCodeMajor"); + field.setAccessible(true); + field.set(packageInfoLite, 0); + } + } + } + }); + + hookAllMethods("android.util.jar.StrictJarVerifier", loadPackageParam.classLoader, "verifyMessageDigest", + new ReturnConstant(prefs, "authcreak", true)); + hookAllMethods("android.util.jar.StrictJarVerifier", loadPackageParam.classLoader, "verify", + new ReturnConstant(prefs, "authcreak", true)); + hookAllMethods("java.security.MessageDigest", loadPackageParam.classLoader, "isEqual", + new ReturnConstant(prefs, "authcreak", true)); + hookAllMethods("com.android.server.pm.PackageManagerServiceUtils", loadPackageParam.classLoader, "verifySignatures", + new ReturnConstant(prefs, "authcreak", false)); + + Class signingDetails = XposedHelpers.findClass("android.content.pm.PackageParser.SigningDetails", loadPackageParam.classLoader); + Constructor findConstructorExact = XposedHelpers.findConstructorExact(signingDetails, Signature[].class, Integer.TYPE); + findConstructorExact.setAccessible(true); + Class packageParserException = XposedHelpers.findClass("android.content.pm.PackageParser.PackageParserException", loadPackageParam.classLoader); + Field error = XposedHelpers.findField(packageParserException, "error"); + error.setAccessible(true); + Object[] signingDetailsArgs = new Object[2]; + signingDetailsArgs[0] = new Signature[]{new Signature(SIGNATURE)}; + signingDetailsArgs[1] = 1; + final Object newInstance = findConstructorExact.newInstance(signingDetailsArgs); + hookAllMethods("android.util.apk.ApkSignatureVerifier", loadPackageParam.classLoader, "verifyV1Signature", new XC_MethodHook() { + public void afterHookedMethod(MethodHookParam methodHookParam) throws Throwable { + super.afterHookedMethod(methodHookParam); + if (prefs.getBoolean("authcreak", true)) { + Throwable throwable = methodHookParam.getThrowable(); + if (throwable != null) { + Throwable cause = throwable.getCause(); + if (throwable.getClass() == packageParserException) { + if (error.getInt(throwable) == -103) { + methodHookParam.setResult(newInstance); + } + } + if (cause != null && cause.getClass() == packageParserException) { + if (error.getInt(cause) == -103) { + methodHookParam.setResult(newInstance); + } + } + } + } + } + }); + + //New package has a different signature + //处理覆盖安装但签名不一致 + hookAllMethods(signingDetails, "checkCapability", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + super.beforeHookedMethod(param); + if (prefs.getBoolean("digestCreak", true)) { + if ((Integer) param.args[1] != 4 && prefs.getBoolean("authcreak", true)) { + param.setResult(Boolean.TRUE); + } + } + } + }); + hookAllMethods(signingDetails, "checkCapabilityRecover", + new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + super.beforeHookedMethod(param); + if (prefs.getBoolean("digestCreak", true)) { + if ((Integer) param.args[1] != 4 && prefs.getBoolean("authcreak", true)) { + param.setResult(Boolean.TRUE); + } + } + } + }); + + // if app is system app, allow to use hidden api, even if app not using a system signature + findAndHookMethod("android.content.pm.ApplicationInfo", loadPackageParam.classLoader, "isPackageWhitelistedForHiddenApis", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + super.beforeHookedMethod(param); + if (prefs.getBoolean("digestCreak", true)) { + ApplicationInfo info = (ApplicationInfo) param.thisObject; + if ((info.flags & ApplicationInfo.FLAG_SYSTEM) != 0 + || (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { + param.setResult(true); + } + } + } + }); + } + + @Override + public void initZygote(StartupParam startupParam) { + hookAllMethods("android.content.pm.PackageParser", null, "getApkSigningVersion", XC_MethodReplacement.returnConstant(1)); + hookAllConstructors("android.util.jar.StrictJarVerifier", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + super.beforeHookedMethod(param); + if (prefs.getBoolean("enhancedMode", false)) { + param.args[3] = Boolean.FALSE; + } + } + }); + } +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForR.java b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForR.java new file mode 100644 index 00000000..31ad0aab --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForR.java @@ -0,0 +1,275 @@ +package com.lt2333.simplicitytools.hooks.rules.all.corepatch; + + +import android.app.AndroidAppHelper; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.Signature; +import android.util.Log; + +import com.lt2333.simplicitytools.BuildConfig; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Member; +import java.lang.reflect.Method; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; + +import de.robv.android.xposed.IXposedHookLoadPackage; +import de.robv.android.xposed.IXposedHookZygoteInit; +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XSharedPreferences; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; +import de.robv.android.xposed.callbacks.XC_LoadPackage; + +public class CorePatchForR extends XposedHelper implements IXposedHookLoadPackage, IXposedHookZygoteInit { + XSharedPreferences prefs = new XSharedPreferences(BuildConfig.APPLICATION_ID, "config"); + + @Override + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws IllegalAccessException, InvocationTargetException, InstantiationException { + + Log.d(CorePatchMainHook.TAG, "downgrade" + prefs.getBoolean("downgrade->", true)); + Log.d(CorePatchMainHook.TAG, "authcreak" + prefs.getBoolean("authcreak->", true)); + Log.d(CorePatchMainHook.TAG, "digestCreak" + prefs.getBoolean("digestCreak->", true)); + Log.d(CorePatchMainHook.TAG, "UsePreSig" + prefs.getBoolean("UsePreSig->", false)); + + // 允许降级 + findAndHookMethod("com.android.server.pm.PackageManagerService", loadPackageParam.classLoader, + "checkDowngrade", + "com.android.server.pm.parsing.pkg.AndroidPackage", + "android.content.pm.PackageInfoLite", + new ReturnConstant(prefs, "downgrade", null)); + + // exists on flyme 9(Android 11) only + findAndHookMethod("com.android.server.pm.PackageManagerService", loadPackageParam.classLoader, + "checkDowngrade", + "android.content.pm.PackageInfoLite", + "android.content.pm.PackageInfoLite", + new ReturnConstant(prefs, "downgrade", true)); + + + // apk内文件修改后 digest校验会失败 + hookAllMethods("android.util.jar.StrictJarVerifier", loadPackageParam.classLoader, "verifyMessageDigest", + new ReturnConstant(prefs, "authcreak", true)); + hookAllMethods("android.util.jar.StrictJarVerifier", loadPackageParam.classLoader, "verify", + new ReturnConstant(prefs, "authcreak", true)); + hookAllMethods("java.security.MessageDigest", loadPackageParam.classLoader, "isEqual", + new ReturnConstant(prefs, "authcreak", true)); + + // Targeting R+ (version " + Build.VERSION_CODES.R + " and above) requires" + // + " the resources.arsc of installed APKs to be stored uncompressed" + // + " and aligned on a 4-byte boundary + // target >=30 的情况下 resources.arsc 必须是未压缩的且4K对齐 + hookAllMethods("android.content.res.AssetManager", loadPackageParam.classLoader, "containsAllocatedTable", + new ReturnConstant(prefs, "authcreak", false)); + + // No signature found in package of version " + minSignatureSchemeVersion + // + " or newer for package " + apkPath + findAndHookMethod("android.util.apk.ApkSignatureVerifier", loadPackageParam.classLoader, "getMinimumSignatureSchemeVersionForTargetSdk", int.class, + new ReturnConstant(prefs, "authcreak", 0)); + findAndHookMethod("com.android.apksig.ApkVerifier", loadPackageParam.classLoader, "getMinimumSignatureSchemeVersionForTargetSdk", int.class, + new ReturnConstant(prefs, "authcreak", 0)); + + // Package " + packageName + " signatures do not match previously installed version; ignoring!" + // public boolean checkCapability(String sha256String, @CertCapabilities int flags) { + // public boolean checkCapability(SigningDetails oldDetails, @CertCapabilities int flags) + hookAllMethods("android.content.pm.PackageParser", loadPackageParam.classLoader, "checkCapability", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) { + // Don't handle PERMISSION (grant SIGNATURE permissions to pkgs with this cert) + // Or applications will have all privileged permissions + // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/pm/PackageParser.java;l=5947?q=CertCapabilities + if (prefs.getBoolean("authcreak", true)) { + if ((Integer) param.args[1] != 4) { + param.setResult(true); + } + } + } + }); + + // 当verifyV1Signature抛出转换异常时,替换一个签名作为返回值 + // 如果用户已安装apk,并且其定义了私有权限,则安装时会因签名与模块内硬编码的不一致而被拒绝。尝试从待安装apk中获取签名。如果其中apk的签名和已安装的一致(只动了内容)就没有问题。此策略可能有潜在的安全隐患。 + Class pkc = XposedHelpers.findClass("sun.security.pkcs.PKCS7", loadPackageParam.classLoader); + Constructor constructor = XposedHelpers.findConstructorExact(pkc, byte[].class); + constructor.setAccessible(true); + Class ASV = XposedHelpers.findClass("android.util.apk.ApkSignatureVerifier", loadPackageParam.classLoader); + Class sJarClass = XposedHelpers.findClass("android.util.jar.StrictJarFile", loadPackageParam.classLoader); + Constructor constructorExact = XposedHelpers.findConstructorExact(sJarClass, String.class, boolean.class, boolean.class); + constructorExact.setAccessible(true); + Class signingDetails = getSigningDetails(loadPackageParam.classLoader); + Constructor findConstructorExact = XposedHelpers.findConstructorExact(signingDetails, Signature[].class, Integer.TYPE); + findConstructorExact.setAccessible(true); + Class packageParserException = XposedHelpers.findClass("android.content.pm.PackageParser.PackageParserException", loadPackageParam.classLoader); + Field error = XposedHelpers.findField(packageParserException, "error"); + error.setAccessible(true); + Object[] signingDetailsArgs = new Object[2]; + signingDetailsArgs[1] = 1; + Class parseResult = XposedHelpers.findClassIfExists("android.content.pm.parsing.result.ParseResult", loadPackageParam.classLoader); + hookAllMethods("android.util.jar.StrictJarVerifier", loadPackageParam.classLoader, "verifyBytes", new XC_MethodHook() { + public void afterHookedMethod(MethodHookParam param) throws Throwable { + super.afterHookedMethod(param); + if (prefs.getBoolean("digestCreak", true)) { + if (!prefs.getBoolean("UsePreSig", false)) { + final Object block = constructor.newInstance(param.args[0]); + Object[] infos = (Object[]) XposedHelpers.callMethod(block, "getSignerInfos"); + Object info = infos[0]; + List verifiedSignerCertChain = (List) XposedHelpers.callMethod(info, "getCertificateChain", block); + param.setResult(verifiedSignerCertChain.toArray( + new X509Certificate[0])); + } + } + } + }); + hookAllMethods("android.util.apk.ApkSignatureVerifier", loadPackageParam.classLoader, "verifyV1Signature", new XC_MethodHook() { + public void afterHookedMethod(MethodHookParam methodHookParam) throws Throwable { + if (prefs.getBoolean("authcreak", true)) { + Throwable throwable = methodHookParam.getThrowable(); + Integer parseErr = null; + if (parseResult != null && ((Method) methodHookParam.method).getReturnType() == parseResult) { + Object result = methodHookParam.getResult(); + if ((boolean) XposedHelpers.callMethod(result, "isError")) { + parseErr = (int) XposedHelpers.callMethod(result, "getErrorCode"); + } + } + if (throwable != null || parseErr != null) { + Signature[] lastSigs = null; + try { + if (prefs.getBoolean("UsePreSig", false)) { + PackageManager PM = AndroidAppHelper.currentApplication().getPackageManager(); + if (PM == null) { + XposedBridge.log("E: " + BuildConfig.APPLICATION_ID + " Cannot get the Package Manager... Are you using MiUI?"); + } else { + PackageInfo pI; + if (parseErr != null) { + pI = PM.getPackageArchiveInfo((String) methodHookParam.args[1], 0); + } else { + pI = PM.getPackageArchiveInfo((String) methodHookParam.args[0], 0); + } + PackageInfo InstpI = PM.getPackageInfo(pI.packageName, PackageManager.GET_SIGNATURES); + lastSigs = InstpI.signatures; + } + } + } catch (Throwable ignored) { + + } + try { + if (lastSigs == null && prefs.getBoolean("digestCreak", true)) { + final Object origJarFile = constructorExact.newInstance(methodHookParam.args[parseErr == null ? 0 : 1], true, false); + final ZipEntry manifestEntry = (ZipEntry) XposedHelpers.callMethod(origJarFile, "findEntry", "AndroidManifest.xml"); + final Certificate[][] lastCerts; + if (parseErr != null) { + lastCerts = (Certificate[][]) XposedHelpers.callMethod(XposedHelpers.callStaticMethod(ASV, "loadCertificates", methodHookParam.args[0], origJarFile, manifestEntry), "getResult"); + } else { + lastCerts = (Certificate[][]) XposedHelpers.callStaticMethod(ASV, "loadCertificates", origJarFile, manifestEntry); + } + lastSigs = (Signature[]) XposedHelpers.callStaticMethod(ASV, "convertToSignatures", (Object) lastCerts); + } + } catch (Throwable ignored) { + } + if (lastSigs != null) { + signingDetailsArgs[0] = lastSigs; + } else { + signingDetailsArgs[0] = new Signature[]{new Signature(SIGNATURE)}; + } + Object newInstance = findConstructorExact.newInstance(signingDetailsArgs); + + //修复 java.lang.ClassCastException: Cannot cast android.content.pm.PackageParser$SigningDetails to android.util.apk.ApkSignatureVerifier$SigningDetailsWithDigests + Class signingDetailsWithDigests = XposedHelpers.findClassIfExists("android.util.apk.ApkSignatureVerifier.SigningDetailsWithDigests", loadPackageParam.classLoader); + if (signingDetailsWithDigests != null) { + Constructor signingDetailsWithDigestsConstructorExact = XposedHelpers.findConstructorExact(signingDetailsWithDigests, signingDetails, Map.class); + signingDetailsWithDigestsConstructorExact.setAccessible(true); + newInstance = signingDetailsWithDigestsConstructorExact.newInstance(new Object[]{newInstance, null}); + } + if (throwable != null) { + Throwable cause = throwable.getCause(); + if (throwable.getClass() == packageParserException) { + if (error.getInt(throwable) == -103) { + methodHookParam.setResult(newInstance); + } + } + if (cause != null && cause.getClass() == packageParserException) { + if (error.getInt(cause) == -103) { + methodHookParam.setResult(newInstance); + } + } + } + if (parseErr != null && parseErr == -103) { + Object input = methodHookParam.args[0]; + XposedHelpers.callMethod(input, "reset"); + methodHookParam.setResult(XposedHelpers.callMethod(input, "success", newInstance)); + } + } + } + } + }); + + + //New package has a different signature + //处理覆盖安装但签名不一致 + hookAllMethods(signingDetails, "checkCapability", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) { + // Don't handle PERMISSION (grant SIGNATURE permissions to pkgs with this cert) + // Or applications will have all privileged permissions + // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/pm/PackageParser.java;l=5947?q=CertCapabilities + if (((Integer) param.args[1] != 4) && prefs.getBoolean("digestCreak", true)) { + param.setResult(true); + } + } + }); + // if app is system app, allow to use hidden api, even if app not using a system signature + findAndHookMethod("android.content.pm.ApplicationInfo", loadPackageParam.classLoader, "isPackageWhitelistedForHiddenApis", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + super.beforeHookedMethod(param); + if (prefs.getBoolean("digestCreak", true)) { + ApplicationInfo info = (ApplicationInfo) param.thisObject; + if ((info.flags & ApplicationInfo.FLAG_SYSTEM) != 0 + || (info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { + param.setResult(true); + } + } + } + }); + + var utilClass = findClass("com.android.server.pm.PackageManagerServiceUtils", loadPackageParam.classLoader); + if (utilClass != null) { + for (var m : utilClass.getDeclaredMethods()) { + if ("verifySignatures".equals(m.getName())) { + try { + XposedBridge.class.getDeclaredMethod("deoptimizeMethod", Member.class).invoke(null, m); + } catch (Throwable e) { + Log.e("CorePatch", "deoptimizing failed", e); + } + } + } + } + } + + Class getSigningDetails(ClassLoader classLoader) { + return XposedHelpers.findClass("android.content.pm.PackageParser.SigningDetails", classLoader); + } + + @Override + public void initZygote(StartupParam startupParam) { + + hookAllMethods("android.content.pm.PackageParser", null, "getApkSigningVersion", XC_MethodReplacement.returnConstant(1)); + hookAllConstructors("android.util.jar.StrictJarVerifier", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + if (prefs.getBoolean("enhancedMode", false)) { + super.beforeHookedMethod(param); + param.args[3] = Boolean.FALSE; + } + } + }); + } +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForS.java b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForS.java new file mode 100644 index 00000000..053678df --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForS.java @@ -0,0 +1,28 @@ +package com.lt2333.simplicitytools.hooks.rules.all.corepatch; + +import java.lang.reflect.InvocationTargetException; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedHelpers; +import de.robv.android.xposed.callbacks.XC_LoadPackage; + +public class CorePatchForS extends CorePatchForR { + @Override + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws IllegalAccessException, InvocationTargetException, InstantiationException { + super.handleLoadPackage(loadPackageParam); + if (prefs.getBoolean("digestCreak", true) && prefs.getBoolean("UsePreSig", false)) { + findAndHookMethod("com.android.server.pm.PackageManagerService", loadPackageParam.classLoader, "doesSignatureMatchForPermissions", String.class, "com.android.server.pm.parsing.pkg.ParsedPackage", int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + //If we decide to crack this then at least make sure they are same apks, avoid another one that tries to impersonate. + if (param.getResult().equals(false)) { + String pPname = (String) XposedHelpers.callMethod(param.args[1], "getPackageName"); + if (pPname.contentEquals((String) param.args[0])) { + param.setResult(true); + } + } + } + }); + } + } +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForSv2.java b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForSv2.java new file mode 100644 index 00000000..6ed3aea7 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForSv2.java @@ -0,0 +1,4 @@ +package com.lt2333.simplicitytools.hooks.rules.all.corepatch; + +public class CorePatchForSv2 extends CorePatchForS{ +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForT.java b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForT.java new file mode 100644 index 00000000..767f51e6 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchForT.java @@ -0,0 +1,96 @@ +package com.lt2333.simplicitytools.hooks.rules.all.corepatch; + +import android.util.Log; + +import java.lang.reflect.InvocationTargetException; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; +import de.robv.android.xposed.callbacks.XC_LoadPackage; + +public class CorePatchForT extends CorePatchForSv2 { + @Override + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws IllegalAccessException, InvocationTargetException, InstantiationException { + super.handleLoadPackage(loadPackageParam); + + findAndHookMethod("com.android.server.pm.PackageManagerServiceUtils", loadPackageParam.classLoader, + "checkDowngrade", + "com.android.server.pm.parsing.pkg.AndroidPackage", + "android.content.pm.PackageInfoLite", + new ReturnConstant(prefs, "downgrade", null)); + + Class signingDetails = getSigningDetails(loadPackageParam.classLoader); + //New package has a different signature + //处理覆盖安装但签名不一致 + hookAllMethods(signingDetails, "checkCapability", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) { + // Don't handle PERMISSION (grant SIGNATURE permissions to pkgs with this cert) + // Or applications will have all privileged permissions + // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/pm/PackageParser.java;l=5947?q=CertCapabilities + if (((Integer) param.args[1] != 4) && prefs.getBoolean("digestCreak", true)) { + param.setResult(true); + } + } + }); + + // Package " + packageName + " signatures do not match previously installed version; ignoring!" + // public boolean checkCapability(String sha256String, @CertCapabilities int flags) { + // public boolean checkCapability(SigningDetails oldDetails, @CertCapabilities int flags) + hookAllMethods("android.content.pm.PackageParser", loadPackageParam.classLoader, "checkCapability", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) { + Log.e("CorePatch", "checkCapability"); + // Don't handle PERMISSION (grant SIGNATURE permissions to pkgs with this cert) + // Or applications will have all privileged permissions + // https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/content/pm/PackageParser.java;l=5947?q=CertCapabilities + if (prefs.getBoolean("authcreak", true)) { + if ((Integer) param.args[1] != 4) { + param.setResult(true); + } + } + } + }); + + + if (prefs.getBoolean("digestCreak", true) && prefs.getBoolean("UsePreSig", false)) { + findAndHookMethod("com.android.server.pm.InstallPackageHelper", loadPackageParam.classLoader, "doesSignatureMatchForPermissions", String.class, "com.android.server.pm.parsing.pkg.ParsedPackage", int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) { + //If we decide to crack this then at least make sure they are same apks, avoid another one that tries to impersonate. + if (param.getResult().equals(false)) { + String pPname = (String) XposedHelpers.callMethod(param.args[1], "getPackageName"); + if (pPname.contentEquals((String) param.args[0])) { + param.setResult(true); + } + } + } + }); + } + findAndHookMethod("com.android.server.pm.ScanPackageUtils", loadPackageParam.classLoader, "assertMinSignatureSchemeIsValid", "com.android.server.pm.parsing.pkg.AndroidPackage", int.class, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if (prefs.getBoolean("authcreak", true)) { + param.setResult(null); + } + } + }); + Class strictJarVerifier = findClass("android.util.jar.StrictJarVerifier", loadPackageParam.classLoader); + if (strictJarVerifier != null) { + XposedBridge.hookAllConstructors(strictJarVerifier, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) { + if (prefs.getBoolean("authcreak", true)) { + XposedHelpers.setBooleanField(param.thisObject, "signatureSchemeRollbackProtectionsEnforced", false); + } + } + }); + } + } + + @Override + Class getSigningDetails(ClassLoader classLoader) { + return XposedHelpers.findClassIfExists("android.content.pm.SigningDetails", classLoader); + } +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchMainHook.java b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchMainHook.java new file mode 100644 index 00000000..8a58a413 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/CorePatchMainHook.java @@ -0,0 +1,67 @@ +package com.lt2333.simplicitytools.hooks.rules.all.corepatch; + +import android.os.Build; +import android.util.Log; + +import de.robv.android.xposed.IXposedHookLoadPackage; +import de.robv.android.xposed.IXposedHookZygoteInit; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.callbacks.XC_LoadPackage; + +public class CorePatchMainHook implements IXposedHookLoadPackage, IXposedHookZygoteInit { + public static final String TAG = "WooBox: CorePatch"; + + @Override + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + if (("android".equals(lpparam.packageName)) && (lpparam.processName.equals("android"))) { + Log.d(TAG, "Current sdk version " + Build.VERSION.SDK_INT); + switch (Build.VERSION.SDK_INT) { + case Build.VERSION_CODES.TIRAMISU: // 33 + new CorePatchForT().handleLoadPackage(lpparam); + break; + case Build.VERSION_CODES.S_V2: // 32 + new CorePatchForSv2().handleLoadPackage(lpparam); + break; + case Build.VERSION_CODES.S: // 31 + new CorePatchForS().handleLoadPackage(lpparam); + break; + case Build.VERSION_CODES.R: // 30 + new CorePatchForR().handleLoadPackage(lpparam); + break; + case Build.VERSION_CODES.Q: // 29 + new CorePatchForQ().handleLoadPackage(lpparam); + break; + default: + XposedBridge.log(TAG + ": Warning: Unsupported Version of Android " + Build.VERSION.SDK_INT); + break; + } + } + } + + @Override + public void initZygote(StartupParam startupParam) throws Throwable { + if (startupParam.startsSystemServer) { + Log.d(TAG, "Current sdk version " + Build.VERSION.SDK_INT); + switch (Build.VERSION.SDK_INT) { + case Build.VERSION_CODES.TIRAMISU: // 33 + new CorePatchForT().initZygote(startupParam); + break; + case Build.VERSION_CODES.S_V2: // 32 + new CorePatchForSv2().initZygote(startupParam); + break; + case Build.VERSION_CODES.S: // 31 + new CorePatchForS().initZygote(startupParam); + break; + case Build.VERSION_CODES.R: // 30 + new CorePatchForR().initZygote(startupParam); + break; + case Build.VERSION_CODES.Q: // 29 + new CorePatchForQ().initZygote(startupParam); + break; + default: + XposedBridge.log(TAG + ": Warning: Unsupported Version of Android " + Build.VERSION.SDK_INT); + break; + } + } + } +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/ReturnConstant.java b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/ReturnConstant.java new file mode 100644 index 00000000..b3babc8a --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/ReturnConstant.java @@ -0,0 +1,25 @@ +package com.lt2333.simplicitytools.hooks.rules.all.corepatch; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XSharedPreferences; + +public class ReturnConstant extends XC_MethodHook { + private final XSharedPreferences prefs; + private final String prefsKey; + private final Object value; + + public ReturnConstant(XSharedPreferences prefs, String prefsKey, Object value) { + this.prefs = prefs; + this.prefsKey = prefsKey; + this.value = value; + } + + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + super.beforeHookedMethod(param); + prefs.reload(); + if (prefs.getBoolean(prefsKey, false)) { + param.setResult(value); + } + } +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/XposedHelper.java b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/XposedHelper.java new file mode 100644 index 00000000..8f8d3c8e --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/hooks/rules/all/corepatch/XposedHelper.java @@ -0,0 +1,74 @@ +package com.lt2333.simplicitytools.hooks.rules.all.corepatch; + +import com.lt2333.simplicitytools.BuildConfig; + +import java.util.Set; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.XposedBridge; +import de.robv.android.xposed.XposedHelpers; + +public class XposedHelper { + public String SIGNATURE = "308203c6308202aea003020102021426d148b7c65944abcf3a683b4c3dd3b139c4ec85300d06092a864886f70d01010b05003074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964301e170d3139303130323138353233385a170d3439303130323138353233385a3074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f696430820122300d06092a864886f70d01010105000382010f003082010a028201010087fcde48d9beaeba37b733a397ae586fb42b6c3f4ce758dc3ef1327754a049b58f738664ece587994f1c6362f98c9be5fe82c72177260c390781f74a10a8a6f05a6b5ca0c7c5826e15526d8d7f0e74f2170064896b0cf32634a388e1a975ed6bab10744d9b371cba85069834bf098f1de0205cdee8e715759d302a64d248067a15b9beea11b61305e367ac71b1a898bf2eec7342109c9c5813a579d8a1b3e6a3fe290ea82e27fdba748a663f73cca5807cff1e4ad6f3ccca7c02945926a47279d1159599d4ecf01c9d0b62e385c6320a7a1e4ddc9833f237e814b34024b9ad108a5b00786ea15593a50ca7987cbbdc203c096eed5ff4bf8a63d27d33ecc963990203010001a350304e300c0603551d13040530030101ff301d0603551d0e04160414a361efb002034d596c3a60ad7b0332012a16aee3301f0603551d23041830168014a361efb002034d596c3a60ad7b0332012a16aee3300d06092a864886f70d01010b0500038201010022ccb684a7a8706f3ee7c81d6750fd662bf39f84805862040b625ddf378eeefae5a4f1f283deea61a3c7f8e7963fd745415153a531912b82b596e7409287ba26fb80cedba18f22ae3d987466e1fdd88e440402b2ea2819db5392cadee501350e81b8791675ea1a2ed7ef7696dff273f13fb742bb9625fa12ce9c2cb0b7b3d94b21792f1252b1d9e4f7012cb341b62ff556e6864b40927e942065d8f0f51273fcda979b8832dd5562c79acf719de6be5aee2a85f89265b071bf38339e2d31041bc501d5e0c034ab1cd9c64353b10ee70b49274093d13f733eb9d3543140814c72f8e003f301c7a00b1872cc008ad55e26df2e8f07441002c4bcb7dc746745f0db"; + + public static void findAndHookMethod(String p1, ClassLoader lpparam, String p2, Object... parameterTypesAndCallback) { + try { + if (findClass(p1, lpparam) != null) { + XposedHelpers.findAndHookMethod(p1, lpparam, p2, parameterTypesAndCallback); + } + } catch (Throwable e) { + if (BuildConfig.DEBUG) + XposedBridge.log(e); + } + } + + public static void hookAllMethods(String p1, ClassLoader lpparam, String methodName, XC_MethodHook parameterTypesAndCallback) { + try { + Class packageParser = findClass(p1, lpparam); + XposedBridge.hookAllMethods(packageParser, methodName, parameterTypesAndCallback); + } catch (Throwable e) { + if (BuildConfig.DEBUG) + XposedBridge.log(e); + } + + } + + public void hookAllMethods(Class packageManagerServiceUtils, String verifySignatures, XC_MethodHook methodHook) { + try { + XposedBridge.hookAllMethods(packageManagerServiceUtils, verifySignatures, methodHook); + } catch (Throwable e) { + if (BuildConfig.DEBUG) + XposedBridge.log(e); + } + } + + public static Class findClass(String className, ClassLoader classLoader) { + try { + return Class.forName(className, false, classLoader); + } catch (Throwable e) { + if (BuildConfig.DEBUG) + XposedBridge.log(e); + } + return null; + } + + public static void hookAllConstructors(String p1, XC_MethodHook parameterTypesAndCallback) { + try { + Class packageParser = findClass(p1, null); + hookAllConstructors(packageParser, parameterTypesAndCallback); + } catch (Throwable e) { + if (BuildConfig.DEBUG) + XposedBridge.log(e); + } + } + + private static Set hookAllConstructors(Class hookClass, XC_MethodHook callback) { + try { + return XposedBridge.hookAllConstructors(hookClass, callback); + } catch (Throwable e) { + if (BuildConfig.DEBUG) + XposedBridge.log(e); + return null; + } + } +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/tiles/AllowScreenshots.kt b/app/src/main/java/com/lt2333/simplicitytools/tiles/AllowScreenshots.kt new file mode 100644 index 00000000..9a2f684b --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/tiles/AllowScreenshots.kt @@ -0,0 +1,40 @@ +package com.lt2333.simplicitytools.tiles + +import android.service.quicksettings.Tile +import android.service.quicksettings.TileService + +class AllowScreenshots : TileService() { + private val key = "disable_flag_secure" + + override fun onClick() { + super.onClick() + try { + val pref = getSharedPreferences("config", MODE_WORLD_READABLE) + val prefEditor = pref.edit() + if (pref.getBoolean(key, false)) { + prefEditor.putBoolean(key, false) + qsTile.state = Tile.STATE_INACTIVE + } else { + prefEditor.putBoolean(key, true) + qsTile.state = Tile.STATE_ACTIVE + } + prefEditor.commit() + qsTile.updateTile() + } catch (e: SecurityException) { + } + } + + override fun onStartListening() { + super.onStartListening() + try { + val pref = getSharedPreferences("config", MODE_WORLD_READABLE) + if (pref.getBoolean(key, false)) { + qsTile.state = Tile.STATE_ACTIVE + } else { + qsTile.state = Tile.STATE_INACTIVE + } + qsTile.updateTile() + } catch (e: SecurityException) { + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/tiles/LockMaxFpsTile.kt b/app/src/main/java/com/lt2333/simplicitytools/tiles/LockMaxFpsTile.kt new file mode 100644 index 00000000..d2c77520 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/tiles/LockMaxFpsTile.kt @@ -0,0 +1,41 @@ +package com.lt2333.simplicitytools.tiles + +import android.service.quicksettings.Tile +import android.service.quicksettings.TileService + +class LockMaxFpsTile : TileService() { + + private val key = "lock_max_fps" + + override fun onClick() { + super.onClick() + try { + val pref = getSharedPreferences("config", MODE_WORLD_READABLE) + val prefEditor = pref.edit() + if (pref.getBoolean(key, false)) { + prefEditor.putBoolean(key, false) + qsTile.state = Tile.STATE_INACTIVE + } else { + prefEditor.putBoolean(key, true) + qsTile.state = Tile.STATE_ACTIVE + } + prefEditor.commit() + qsTile.updateTile() + } catch (e: SecurityException) { + } + } + + override fun onStartListening() { + super.onStartListening() + try { + val pref = getSharedPreferences("config", MODE_WORLD_READABLE) + if (pref.getBoolean(key, false)) { + qsTile.state = Tile.STATE_ACTIVE + } else { + qsTile.state = Tile.STATE_INACTIVE + } + qsTile.updateTile() + } catch (e: SecurityException) { + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/utils/ShellUtils.java b/app/src/main/java/com/lt2333/simplicitytools/utils/ShellUtils.java new file mode 100644 index 00000000..e24987d0 --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/utils/ShellUtils.java @@ -0,0 +1,210 @@ +package com.lt2333.simplicitytools.utils; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.List; + +public class ShellUtils { + + public static final String COMMAND_SU = "su"; + public static final String COMMAND_SH = "sh"; + public static final String COMMAND_EXIT = "exit\n"; + public static final String COMMAND_LINE_END = "\n"; + + private ShellUtils() { + throw new AssertionError(); + } + + /** + * check whether has root permission + * + * @return + */ + public static boolean checkRootPermission() { + return execCommand("echo root", true, false).result == 0; + } + + /** + * execute shell command, default return result msg + * + * @param command command + * @param isRoot whether need to run with root + * @return + * @see ShellUtils#execCommand(String[], boolean, boolean) + */ + public static CommandResult execCommand(String command, boolean isRoot) { + return execCommand(new String[]{command}, isRoot, true); + } + + /** + * execute shell commands, default return result msg + * + * @param commands command activity_wifi + * @param isRoot whether need to run with root + * @return + * @see ShellUtils#execCommand(String[], boolean, boolean) + */ + public static CommandResult execCommand(List commands, boolean isRoot) { + return execCommand(commands == null ? null : commands.toArray(new String[]{}), isRoot, true); + } + + /** + * execute shell commands, default return result msg + * + * @param commands command array + * @param isRoot whether need to run with root + * @return + * @see ShellUtils#execCommand(String[], boolean, boolean) + */ + public static CommandResult execCommand(String[] commands, boolean isRoot) { + return execCommand(commands, isRoot, true); + } + + /** + * execute shell command + * + * @param command command + * @param isRoot whether need to run with root + * @param isNeedResultMsg whether need result msg + * @return + * @see ShellUtils#execCommand(String[], boolean, boolean) + */ + public static CommandResult execCommand(String command, boolean isRoot, boolean isNeedResultMsg) { + return execCommand(new String[]{command}, isRoot, isNeedResultMsg); + } + + /** + * execute shell commands + * + * @param commands command activity_wifi + * @param isRoot whether need to run with root + * @param isNeedResultMsg whether need result msg + * @return + * @see ShellUtils#execCommand(String[], boolean, boolean) + */ + public static CommandResult execCommand(List commands, boolean isRoot, boolean isNeedResultMsg) { + return execCommand(commands == null ? null : commands.toArray(new String[]{}), isRoot, isNeedResultMsg); + } + + /** + * execute shell commands + * + * @param commands command array + * @param isRoot whether need to run with root + * @param isNeedResultMsg whether need result msg + * @return
    + *
  • if isNeedResultMsg is false, {@link CommandResult#successMsg} is null and + * {@link CommandResult#errorMsg} is null.
  • + *
  • if {@link CommandResult#result} is -1, there maybe some excepiton.
  • + *
+ */ + public static CommandResult execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg) { + int result = -1; + if (commands == null || commands.length == 0) { + return new CommandResult(result, null, null); + } + + Process process = null; + BufferedReader successResult = null; + BufferedReader errorResult = null; + StringBuilder successMsg = null; + StringBuilder errorMsg = null; + + DataOutputStream os = null; + try { + process = Runtime.getRuntime().exec(isRoot ? COMMAND_SU : COMMAND_SH); + os = new DataOutputStream(process.getOutputStream()); + for (String command : commands) { + if (command == null) { + continue; + } + + // donnot use os.writeBytes(commmand), avoid chinese charset error + os.write(command.getBytes()); + os.writeBytes(COMMAND_LINE_END); + os.flush(); + } + os.writeBytes(COMMAND_EXIT); + os.flush(); + + result = process.waitFor(); + // get command result + if (isNeedResultMsg) { + successMsg = new StringBuilder(); + errorMsg = new StringBuilder(); + successResult = new BufferedReader(new InputStreamReader(process.getInputStream())); + errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream())); + String s; + while ((s = successResult.readLine()) != null) { + successMsg.append(s); + } + while ((s = errorResult.readLine()) != null) { + errorMsg.append(s); + } + } + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (os != null) { + os.close(); + } + if (successResult != null) { + successResult.close(); + } + if (errorResult != null) { + errorResult.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + if (process != null) { + process.destroy(); + } + } + return new CommandResult(result, successMsg == null ? null : successMsg.toString(), errorMsg == null ? null + : errorMsg.toString()); + } + + /** + * result of command + *
    + *
  • {@link CommandResult#result} means result of command, 0 means normal, else means error, same to excute in + * linux shell
  • + *
  • {@link CommandResult#successMsg} means success message of command result
  • + *
  • {@link CommandResult#errorMsg} means error message of command result
  • + *
+ * + * @author
Trinea
2013-5-16 + */ + public static class CommandResult { + + /** + * result of command + **/ + public int result; + /** + * success message of command result + **/ + public String successMsg; + /** + * error message of command result + **/ + public String errorMsg; + + public CommandResult(int result) { + this.result = result; + } + + public CommandResult(int result, String successMsg, String errorMsg) { + this.result = result; + this.successMsg = successMsg; + this.errorMsg = errorMsg; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/lt2333/simplicitytools/utils/XSPUtils.kt b/app/src/main/java/com/lt2333/simplicitytools/utils/XSPUtils.kt new file mode 100644 index 00000000..88471ecf --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/utils/XSPUtils.kt @@ -0,0 +1,48 @@ +package com.lt2333.simplicitytools.utils + +import com.lt2333.simplicitytools.BuildConfig +import de.robv.android.xposed.XSharedPreferences + +object XSPUtils { + private var prefs = XSharedPreferences(BuildConfig.APPLICATION_ID, "config") + + fun getBoolean(key: String, defValue: Boolean): Boolean { + if (prefs.hasFileChanged()) { + prefs.reload() + } + return prefs.getBoolean(key, defValue) + } + + fun getInt(key: String, defValue: Int): Int { + if (prefs.hasFileChanged()) { + prefs.reload() + } + return prefs.getInt(key, defValue) + } + + fun getFloat(key: String, defValue: Float): Float { + if (prefs.hasFileChanged()) { + prefs.reload() + } + return prefs.getFloat(key, defValue) + } + + fun getString(key: String, defValue: String): String? { + if (prefs.hasFileChanged()) { + prefs.reload() + } + return prefs.getString(key, defValue) + } +} + +inline fun hasEnable( + key: String, + default: Boolean = false, + noinline extraCondition: (() -> Boolean)? = null, + crossinline block: () -> Unit +) { + val conditionResult = if (extraCondition != null) extraCondition() else true + if (XSPUtils.getBoolean(key, default) && conditionResult) { + block() + } +} diff --git a/app/src/main/java/com/lt2333/simplicitytools/utils/factory/FunctionFactory.kt b/app/src/main/java/com/lt2333/simplicitytools/utils/factory/FunctionFactory.kt new file mode 100644 index 00000000..8eb4b73c --- /dev/null +++ b/app/src/main/java/com/lt2333/simplicitytools/utils/factory/FunctionFactory.kt @@ -0,0 +1,40 @@ +@file:Suppress("unused") + +package com.lt2333.simplicitytools.utils.factory + +import android.content.Context +import android.content.res.Configuration + +/** + * System dark mode is enabled or not + * + * 系统深色模式是否开启 + * @return [Boolean] Whether to enable / 是否开启 + */ +val Context.isSystemInDarkMode get() = (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES + +/** + * System dark mode is disable or not + * + * 系统深色模式是否没开启 + * @return [Boolean] Whether to enable / 是否开启 + */ +inline val Context.isNotSystemInDarkMode get() = isSystemInDarkMode.not() + +/** + * dp to pxInt + * + * dp 转换为 pxInt + * @param context using instance / 使用的实例 + * @return [Int] + */ +fun Number.dp(context: Context) = dpFloat(context).toInt() + +/** + * dp to pxFloat + * + * dp 转换为 pxFloat + * @param context using instance / 使用的实例 + * @return [Float] + */ +fun Number.dpFloat(context: Context) = toFloat() * context.resources.displayMetrics.density \ No newline at end of file diff --git a/app/src/main/res/drawable/app_icon.png b/app/src/main/res/drawable/app_icon.png new file mode 100644 index 00000000..03a6fec8 Binary files /dev/null and b/app/src/main/res/drawable/app_icon.png differ diff --git a/app/src/main/res/drawable/ic_baseline_fullscreen_24.xml b/app/src/main/res/drawable/ic_baseline_fullscreen_24.xml new file mode 100644 index 00000000..98f67e3a --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_fullscreen_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_fps.xml b/app/src/main/res/drawable/ic_fps.xml new file mode 100644 index 00000000..4f74d572 --- /dev/null +++ b/app/src/main/res/drawable/ic_fps.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..11bc6433 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..027e706d --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_small_window_dark.xml b/app/src/main/res/drawable/ic_small_window_dark.xml new file mode 100644 index 00000000..31000841 --- /dev/null +++ b/app/src/main/res/drawable/ic_small_window_dark.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_small_window_light.xml b/app/src/main/res/drawable/ic_small_window_light.xml new file mode 100644 index 00000000..ef0c1a3b --- /dev/null +++ b/app/src/main/res/drawable/ic_small_window_light.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/lt.jpg b/app/src/main/res/drawable/lt.jpg new file mode 100644 index 00000000..daca6ce4 Binary files /dev/null and b/app/src/main/res/drawable/lt.jpg differ diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..bbd3e021 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..bbd3e021 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..a3faedf8 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 00000000..3d2352e2 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..01054e1d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 00000000..80ded114 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..e8cfacc1 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 00000000..3c2ca0b0 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..aafd6f91 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..dca8444e Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..5ec70d38 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..5b6c1644 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-af/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml new file mode 100644 index 00000000..9fa05c41 --- /dev/null +++ b/app/src/main/res/values-ar/strings.xml @@ -0,0 +1,14 @@ + + + غير ذلك + السماح بلقطة الشاشة + الصفحة الرئيسية + عرض ساعة الشاشة الرئيسية دائماً + إعادة تشغيل النظام + + أيقونات شريط الحالة + إخفاء أيقونة No SIM + إخفاء أيقونة SIM Card 1 + إخفاء أيقونة SIM Card 2 + إخفاء أيقونة VPN + diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-ca/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml new file mode 100644 index 00000000..c454d7dc --- /dev/null +++ b/app/src/main/res/values-cs/strings.xml @@ -0,0 +1,213 @@ + + + Výkon + Zamknout horní limit aktuální obnovovací frekvence + Rozhraní + Odstranit zobrazení přes oznámení + Odstranit oznámení \"Tato aplikace se zobrazuje přes ostatní aplikace\" + Další + Povolit snímek obrazovky + Povolit snímek obrazovky v softwaru, který to neumožňuje\nPodpora přidávání rychlého rozbalovacího nastavení v ovládacím centru pro zabezpečení + Domů + Vždy zobrazovat hodiny na domovské obrazovce + Restartovat celý rozsah + Restartovat systém + + Ikony ve stavové liště + Skrýt ikonu Žádná SIM + Skrýt ikonu 1 SIM karty + Skrýt ikonu 2 SIM karty + Skrýt ikonu VPN + Skrýt ikonu režimu letadlo + Skrýt ikonu WIFI + Skrýt ikonu Bluetooth + Skrýt zvuk a ikonu režimu Nerušit + Skrýt ikonu budíku + Skrýt ikonu přenosného hotspotu + Skrýt ikonu sluchátek + Skrýt ikonu baterie Bluetooth + Skrýt ikonu NFC + Skrýt velkou HD ikonu + Skrýt malou ikonu HD + Skrýt ikonu HD bez služby + Podrobnosti + O modulu + Verze + Autor Coolapk + Open Source repozitář + Vítejte více vývojářů, aby se podíleli na vývoji + Zpětná vazba/návrh + Kliknutím zobrazíte problémy GitHub + Stavová lišta + Zobrazit vteřiny + Obnovení rychlosti sítě v sekundách + Odstranit maximální počet ikon oznámení + Hlavní přepínač modulu + Skrýt ikonu GPS + Skrýt jednotky rychlosti sítě (/s) + Tipy + Přeskočit upozornění na 5/10 vteřin + Odstranit omezení oříznutí obrázků/snímků obrazovky + Skrýt sekundární ikonu WIFI + Skrýt ikonu launcheru + Skrýt baterii (%) + Skrýt ikonu baterie + Formát hodin ve stavové liště + Zobrazit rok + Zobrazit měsíc + Zobrazit datum + Zobrazit den + Skrýt mezeru + Povolit snímek obrazovky + Zamknout aktuální limit + Zobrazit čínskou 12 hodin + Vlastní přepínač hodin + Zobrazit AM/PM + Dvojitý řádek + Velikost hodin (0: neměnit) + Velikost dvojitého řádku (0: neměnit) + Funkce nefunguje? + Zobrazit informace o modulu + Seznam přispěvatelů Open source repozitáře + Vývojář + Seznam poděkování + Prohlášení Open Source třetí strany + Odstranit omezení + Podpora downgrade/různá podpis/nepodepsaná instalace + Zabránit obnovení bílého seznamu povolených optimalizace baterie + Bude obnoven po restartu systému + Optimalizace baterie + Rychlé otevření nabídky optimalizace baterie skryté v MIUI + Vynutit malá okna + Přijďte a dejte nám pětihvězdičkové hodnocení + To nás může více odhalit + Připojte se k oficiálnímu kanálu QQ + Připojte se k oficiálnímu kanálu TG + Můžete vstoupit do chatové skupiny na kanálu + Diskuse + Ignorovat systémovou černou listinu a zakázání softwaru malých oken + Odstranit boční panel zamykací obrazovky + Odstranit funkci fotoaparátu na zamykací obrazovce + Podporovány jsou pouze oficiální výchozí motivy + Nastavit 100 bodů v bezpečnostní aplikaci + Rozsah + Systémový framework + Domovská obrazovka + Ostatní + Změnit frekvenci obnovení složky rychlosti sítě ve stavové liště na 1 s + Zobrazení procenta baterie musí být zapnuto sami sebou + Skrýt (/s) jednotky rychlosti ve stavové liště + Odstranit limit 3 oznámení ve stavové liště + Přizpůsobit systémové rozhraní, stavovou lištu, zamykací obrazovku atd. + Po prvním povolení modulu nebo po aktualizaci modulu se funkce projeví po restartu systému + Bezpečnostní aplikace, editor galerie, baterie a výkon, atd. + Baterie a výkon + Bezpečnostní aplikace + Editor galerie + Pokud je zapnuto, hodiny nebudou skryty ve stavové liště ani v případě widgetu hodin + Ignorovat dobu čekání MIUI při ladění USB, neznámých zdrojů a přístupnosti + Nastavte skóre v bezpečnostní aplikaci na 100 bodů a zablokujte tlačítko Optimalizovat + Ignorovat minimální limit oříznutí obrázku MIUI + Skrýt ikonu aktivity WIFI + Skrýt ikonu mobilní aktivity + Skrýt ikonu mobilního typu + Zobrazit počasí - hlavní přepínač + Zamykací obrazovka + Oznamovací centrum + Zobrazit město + Podpora přidávání rychlého nastavení kontrolního centra v reálném čase + Centrum ovládání + Verze Mi Smart Hub není aktuálně podporována + Zdá se, že používáte zastaralou verzi LSPosed nebo LSPosed není aktivní, prosím aktualizujte LSPosed nebo ho aktivujte a zkuste to znovu. + Po první aktivaci nebo aktualizaci\nVětšina změn vyžaduje restartování telefonu v pravém horním rohu + Opravdu chcete restartovat? + Zrušit + Opravdu chcete restartovat celý rozsah? + Skrýt ikonu nabíjení + Skrýt standardní ikonu WIFI + Centrum času ve stavové liště + Další rozložení stavové lišty jsou ve vývoji + Rozložení stavové lišty + Režim kompatibility + Levý okraj (0: Auto) + Pravý okraj (0: Auto) + Odstranit makro-černou listinu + Skrýt rozdělovač rychlosti sítě + - Podpořte pouze použití VAB série, prosím neotevírejte jiné série.\n- Nemusí být potřeba interní testovací kvalifikace, aby bylo možné nainstalovat celý interní testovací balíček.\n- Ti, kdo mají interní testovací oprávnění, nebudou moci přijímat aktualizace interních testů a mohou být použity k blokování aktualizací systému.\n- Po aktualizaci křížových verzí je doporučeno vymazat data.\n- Neoficiální ROM použití není podporováno. + Nastavení + Zobrazit důležitost oznámení + Zobrazit nastavení důležitosti oznámení, která jsou skryta v MIUI 12 a v pozdějších verzích + Odstranit reklamy + Odstranit reklamy pro správce motivů + Stránka baterie zobrazuje aktuální teplotu + Povolit animaci nabíjení vln + Maximální velikost tapety + "Výchozí: " + Aktuální: + Účast na překladu + Pomozte nám přeložit aplikaci do vašeho jazyka + Zobrazit aktuální informace při nabíjení + Elektrický proud + Odstranit otevřené vyskakovací okno aplikace + Odebrat \"Povolit XXX otevřít XXX\" vyskakovací okno pro start řetězce + Skrýt ikonu hlasitosti + Skrýt ikonu ZEN + Skrýt ikonu + Dvojím klepnutím uspat + Dvojitým klepnutím na prázdný prostor uspat zařízení + Starý panel rychlého nastavení + Vlastní řádky a sloupce + Sloupce (Nerozbaleno) + Řádky + Sloupce + Řádky (horizontální) + Rychlost sítě se dvěma řádky + Zobrazení rychlosti sítě nahoru a dolů + Rychlost sítě ve stavovém řádku + Velikost dvojitého řádku (0: neměnit) + Ikona dvojitého řádku + Žádné + Zarovnání dvojitého řádku + Vlevo + Vpravo + Velká ikona mobilního typu + Zobrazit Wifi Standard + Převést většinu oznámení do malého okna + Velikost písma procenta baterie + 0: neměnit + Velká velikost ikony mobilního typu + Velké ikony mobilního typu tučně + Velká ikona mobilního typu nahoru a dolů + Chyba vstupu + Rozsah: + Velká ikona mobilního typu doleva a doprava + Vynutit otevření všech aplikací na jiném zařízení + Zarovnání uprostřed dvojité řádky + Výchozí + Hodiny na střed + Hodiny vpravo + Režim rozložení stavové lišty + Střed hodin a ikona vlevo + Maximální počet ikon oznámení + Maximální počet teček oznámení + Vlastní text mobilního typu + Přepínač textu vlastního mobilního typu + Povolit downgrade + Povolit downgrade aplikací. + Zakázat ověřování digestu + Umožňuje nainstalovat aplikace po změně souboru v apk (ignorovat neplatnou chybu). + Zakázat porovnávání podpisů + Povolit přeinstalování aplikace s různými podpisy. + Použít nainstalované podpisy + Vždy používat podpisy z již nainstalovaných aplikací.\nToto je extrémně nebezpečné.\nPovolte pouze, když je opravdu potřeba! + Vylepšený režim + Předejte nějaké ověření v aplikaci + Zadní displej (11Ultra) + Zobrazit sekundy + Zvuk + Kroky hlasitosti médií + Povolit nedůvěryhodné dotyky + Převést se po restartu + Zapnutí může způsobit, že posun panelu hlasitosti zmizí nebo že hlasitost Bluetooth je abnormální + Některá oznámení přes Mi Push nemusí být podporována. + diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-da/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-de/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-el/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml new file mode 100644 index 00000000..3875ef0a --- /dev/null +++ b/app/src/main/res/values-es/strings.xml @@ -0,0 +1,250 @@ + + + Rendimiento + Bloquear la tasa actual de refresco por arriba del límite + Interfaz + Eliminar notificación de mostrar encima + Eliminar la notificación \"Está aplicación se está mostrando sobre otras aplicaciones\" + Otro + Permitir capturas de pantalla + Permite realizar capturas de pantalla en aplicaciones que no lo permiten\nPor seguridad permite añadir un ajuste rápido en el Centro de Control + Inicio + Mostrar siempre el reloj en la pantalla de inicio + Reinicia todo el ámbito + Reiniciar el sistema + + Iconos de la barra de estado + Ocultar icono sin SIM + Ocultar icono SIM 1 + Ocultar icono SIM 2 + Ocultar icono VPN + Ocultar icono modo fuera de línea + Ocultar icono WIFI + Ocultar icono Bluetooth + Ocultar icono de Sonido y No Molestar + Ocultar icono de alarma + Ocultar icono de punto de accesos inalámbrico + Ocultar icono de audífonos + Ocultar icono de batería de Bluetooth + Ocultar icono de NFC + Ocultar icono grande HD + Ocultar icono pequeño HD + Ocultar nuevo icono HD + Ocultar icono sin servicio HD + Acerca de + Acerca del Módulo + Versión + Autor Coolapk + Repositorio de Código Abierto + Más desarrolladores están invitados a participar en el proyecto + Comentarios/Sugerencias + Clic para ver errores en GitHub + Herramienta de personalización para MIUI13+(Android 12+) + Barra de estado + Mostrar segundos + La velocidad de red se actualiza en segundos + Eliminar el número máximo de iconos de notificaciones + Interruptor principal del módulo + Ocultar icono GPS + Ocultar unidad (/s) en velocidad de red + Menú + Consejos + Saltar tiempo de advertencia de 5/10 segundos + Elimina la restricción de recorte en imágenes/capturas de pantalla + Ocultar icono de WIFI secundario + Esconder el icono del Launcher + Esconder la batería (%) + Ocultar icono de batería + Formato de reloj de la barra de estado + Mostrar año + Mostrar mes + Mostrar fecha + Mostrar día + Ocultar espacio + Permitir captura de pantalla + Bloquear límite actual + Mostrar doce horas Chino + Interruptor de reloj personalizado + Mostrar AM/PM + Fila dual + Tamaño del reloj (0: no cambiar) + Tamaño de la fila dual (0: no cambiar) + ¿Alguna característica no funciona? + Ok + Ver información relacionada con el módulo + Lista de colaboradores del repositorio de código abierto + Desarrollador + Agradecimientos + Declaración de Código Abierto de Terceros + Eliminar restricciones + Permite instalar versiones anteriores/con firma diferente/sin firma + Evita la recuperación de la lista de blanca de optimización de batería + Se restaurará después del reinicio del sistema + Optimización de la batería + Abre rápidamente el menú oculto por MIUI de optimización de batería + Fuerza ventanas pequeñas + Ayúdanos con una reseña de cinco estrellas + Esto hará que más personas nos encuentren + Únete al canal oficial de QQ + Únete al canal oficial de TG + Pues entrar al grupo de chat desde la página del canal + Discusiones + Ignorar la lista negra del sistema y bloqueo de software para ventanas pequeñas + Remueve el panel lateral de la pantalla de bloqueo + Remueve el acceso a la cámara en la pantalla de bloqueo + Solo temas oficiales por defecto son soportados + Estable 100 puntos en la aplicación de Seguridad + Ámbito + Framework del sistema + UI del Sistema + Pantalla de inicio + Otros + Cambia la frecuencia de actualización de la velocidad de red de la barra de estado a 1 s + La función de porcentaje de batería debe de ser activada manualmente + Ocultar la unidad (/s) de la velocidad de red en la barra de estado + Eliminar el límite de 3 notificaciones en la barra de estado + Personaliza la interfaz del sistema, barra de estado, pantalla de bloqueo, etc. + Después de activar el módulo por primera vez o al actualizarlo, los cambios serán aplicados después de reiniciar el sistema + App de seguridad, Editor de galería, Batería y rendimiento, etc. + Batería y rendimiento + App de seguridad + Editor de Galería + Cuando se activa, el reloj no se ocultará en la barra de estado incluso si hay un widget de reloj + Ignora el tiempo de espera de MIUI cuando se habilita la depuración USB, fuentes desconocidas y accesibilidad + Establecer la puntuación de la app de Seguridad en 100 puntos y bloquea el botón de Optimización + Ignorar el límite mínimo de recorte de imagen por MIUI + Ocultar icono de actividad de WIFI + Ocultar icono de actividad red móvil + Ocultar icono tipo de red móvil + Mostrar Tiempo - Interruptor Principal + Pantalla de bloqueo + Centro de Notificaciones + Mostrar la ciudad + Permite añadir un mosaico de acceso rápido en el centro de control para un cambio rápido + Centro de Control + Esta versión de Mi Smart Hub no es compatible + Al parecer estás usando una versión antigua de LSPosed o LSPosed no está activo, por favor actualiza LSPosed o actívalo e intenta de nuevo. + Se recomienda reiniciar el teléfono después de la primera activación o al actualizarla\nLa mayoría de los cambios requieren un reinicio desde la esquina superior derecha para que surtan efecto + ¿Está seguro de reiniciar? + Cancelar + ¿Está seguro de reiniciar todo el ámbito? + Ocultar el icono de carga + Ocultar el icono estándar de WIFI + Centrar el reloj en la barra de estado + Más diseños para la barra de estado están en desarrollo + Diseño de la barra de estado + Modo de compatibilidad + Margen izquierdo (0: Auto) + Margen derecho (0: Auto) + Forzar el diseño a pantalla completa (compatible con cualquier forma de pantalla) + Remueve la lista negra de game macro + Remover el divisor de la velocidad de red + Actualizador + *Remueve validación de OTA [LAB] + - Sólo soporta series que usen VAB, por favor no use en otras series.\n- No se requiere aplicar para pruebas internas para flashear los paquetes completos de éstos.\n- Para aquellos que cuentan con permisos, ya no serán capaces de recibir actualizaciones de pruebas internas, y se podrá usar para bloquear actualizaciones del sistema.\n Después de actualizar entre versiones diferentes, se recomienda borrar datos.\n- ROM no oficiales no están soportadas. + Configuración + Mostrar importancia de notificaciones + Mostrar configuración de importancia de notificación que está oculto en MIUI 12 y versiones posteriores + Remover publicidad + Remueve publicidad del gestor de Temas + La página de batería muestra la temperatura actual + Activar la animación de carga de onda + Escala máxima de fondo de pantalla + "Predeterminado: " + Actual: + Participa en la traducción + Ayúdanos a traducir la app en tu idioma + Mostrar la información de corriente durante la carga + Corriente de carga + Remover popup de inicio en cadena + Eliminar ventana de inicio en cadena \"Permitir XXX abrir XXX\" + Ocultar icono de volumen + Ocultar icono ZEN + Ocultar Iconos + Doble toque para bloquear + Doble toque en espacio en blanco para bloquear + Panel de ajustes rápido antiguo + Filas y columnas personalizadas + Columnas (contraídas) + Filas + Columnas + Filas (horizontal) + Velocidad de red en fila dual + Mostrar velocidad de subida y bajada + Velocidad de red en barra de estado + Tamaño de fila dual (0: no cambiar) + Icono de fila dual + Ninguno + Alineación de icono en fila dual + Izquierda + Derecha + Icono grande de red móvil + Mostrar estándar de Wifi + Hacer que la mayoría de las notificaciones puedan abrirse en ventana flotante + Tamaño de la fuente del porcentaje de batería + 0: sin cambios + Tamaño del icono red móvil grande + Icono red móvil grande en negrita + Posición arriba y abajo del icono red móvil grande + Error de entrada + Rango: + Margen izquierdo y derecho del icono de red móvil grande + Transmitir + Forzar que todas las apps soporten abrir en otro dispositivo + Alinear al centro fila dual + Por defecto + Reloj centrado + Reloj a la derecha + Modo de diseño de barra de estado + Centrar reloj e icono a la izquierda + Número máximo de iconos de notificación + Número máximo de puntos de notificaciones + Texto red móvil personalizado + Interruptor texto red móvil personalizado + Permitir volver a la versión anterior + Permitir volver a la versión anterior de la aplicación. + Deshabilitar verificación de digest + Permite instalar las apps después de modificar el archivo apk (ignorar error de digest inválido). + Deshabilitar comparación de firmas + Permitir reinstalar apps con firmas diferentes. + Usar firmas instaladas + Usar siempre las firmas de las aplicaciones instaladas cuando se instale una.\nEsto es extremadamente<b<peligroso</b>.\n¡Habilitar únicamente cuando sea necesario! + Modo mejorado + Pasar algunas validaciones en la aplicación + Pantalla trasera (11Ultra) + Mostrar segundos en el reloj + Sonido + Pasos de volumen multimedia + Permitir toques no confiables + Se activa después de reiniciar + Activar esta opción puede hacer que el desplazamiento de la barra de volumen se congele o que el volumen Bluetooth sea anormal + Es posible que algunas notificaciones a través de Mi Push no sean soportadas. + Ubicación del agujero de pantalla + Modo de reloj personalizado + Formato de reloj + Apagado + Centro + Izquierda o Derecha + Preajuste + Geek + Evitar cerrar apps en segundo plano + Puede incrementar el consumo de batería, recomendado con \"Hacer el Millet más agresivo\", NO recomendado para usar con tombstones + Hacer el Millet más agresivo + Permitr a Millet congelar apps mientras las apps en segundo plano tengan notificaciones, servicios y procesos ejecutándose.\nApps que no se deseen congelar se pueden configurar como Sin restricciones en Ahorro de batería.\nPor favor desinstala módulos relacionados con tombstone y NoANR antes de activar esta opción. + Permitir a Millet congelar apps activas + Muy agresivo y puede afectar el comportamiento de la aplicación + Instalador de Paquetes + Desactivar la comprobación del conteo de la instalación + Tipo de móvil grande solo muestra tarjeta de red + Ubicación del tipo de red móvil grande + Modificar la animación de marcado de tarjetas + Modificar el efecto de animación al remover ventana de tareas recientes + Deshabilitar atenuación de fondo de pantalla + Esto deshabilitará el efecto en el que el fondo de pantalla se ilumina gradualmente cuando se abre y se cierra una tarea reciente + Desplazar el nombre de la app + Si el nombre de la aplicación es demasiado largo se mostrará con desplazamiento y sin ningúna línea nueva + Añadir ventana al menú de accesos directos + Mantener presionando el icono del escritorio para añadir a una ventana de acceso rápido + Ventana pequeña + Clic para ver casos de uso + diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-fi/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml new file mode 100644 index 00000000..2126b411 --- /dev/null +++ b/app/src/main/res/values-fr/strings.xml @@ -0,0 +1,168 @@ + + + Verrouiller le taux de rafraîchissement actuel + Supprimer l\'affichage sur la notification + Supprimer la notification \"Cette application s\'affiche au-dessus des autres applications\" + Autre + Permettre la capture d\'écran + Permettre une capture d\'écran dans un logiciel qui ne permet pas\najouter des paramètres rapides dans le centre de contrôle pour la sécurité + Homepage + Toujours afficher l\'horloge à l\'écran d\'accueil + Redémarrer SystemUI + Redémarrer le système + + Icônes de la barre d\'état + Masquer l\'icône Aucune SIM + Masquer l\'icône SIM 1 + Masquer l\'icône SIM 2 + Masquer l\'icône VPN + Masquer l\'icône du mode avion + Masquer l\'icône WiFi + Masquer l\'icône Bluetooth + Masquer l\'icône Sonnerie et Ne Pas Déranger + Cacher l\'icône de l\'horloge + Masquer l\'icône de point d\'accès mobile + Masquer l\'icône de casque + Masquer l\'icône de Batterie Bluetooth + Masquer l\'icône HD grosse + Masquer l\'icône HD petite + Masquer l\'icône HD Non Service + À propos + À propos du Module + Développeur en Coolapk + Référentiel Open Source + Bienvenue à d\'autres développeurs pour participer au développement + Feed-back/Proposition + Cliquez pour voir GitHub + Barre d\'État + Affichage des secondes + Rafraichissement de la vitesse du réseau en secondes + Supprimer le nombre maximum d\'icônes de notification + Interrupteur Généra + Masquer l\'icône GPS + Masquer les unités de vitesse réseau (/s) + Conseils + Supprimer la restriction lors du recadrage des photos/captures d\'écran + Masquer l\'icône secondaire WIFI + Masquer l\'icône en Homepage + Masquer l\'icône Batterie(%) + Masquer l\'icône batterie + Format de l\'horloge de la barre d\'état + Afficher l\'année + Afficher le mois + Afficher la date + Afficher les jours + Masquer l\'écart + Permettre la capture d\'écran + Verrouiller la limite courante + Douze heures Chinoise + Interrupteur généra de l\'horloge + Afficher AM/PM + Double ligne + Taille de l\'horloge (0: ne pas changer) + Taille de double ligne (0: ne pas changer) + Fonctionnalité ne fonctionne pas ? + Ok + Informations Relatives au module + Liste des contributeurs + Développeur + Liste de remerciements + Déclaration Open Source Tiers + Supprimer les restrictions + Prise en charge de la rétrograde/de différentes signatures/installation non signée + Empêcher la récupération de la liste blanche de l\'optimisation de la batterie + Il sera restauré après le redémarrage du système + Optimisation de la batterie + Ouvrir commodément le menu d\'optimisation de la batterie masqué par MIUI + Forcer les petites fenêtres + Ddonnez un avis cinq étoiles + Cela peut nous rendre plus découverts + Joignez la chaîne officielle en QQ + Joignez la chaîne officielle en Télégramme + Vous pouvez entrer dans le groupe de discussion sur la page de la chaîne + Ignorer la liste noire du système et l\'interdiction du logiciel des petites fenêtres + Supprimer le panneau latéral de l\'écran de verrouillage + Supprimer le caméra de l\'écran de verrouillage + Seuls les thèmes officiels par défaut sont supportés + Définir 100 points dans la Centre Security + Aapplication activée + Cadre du Système + Homepage + Autres + Changer la fréquence d\'actualisation du composant de vitesse réseau de la barre d\'état à 1s + La fonction d\'affichage du pourcentage de la batterie doit être activée par vous-même + Masquer les unités (/s) de la vitesse réseau en barre d\'état + Supprimer la limite de 3 notifications en barre d\'état + Personnaliser l\'interface système, la barre d\'état, l\'écran de verrouillage, etc. + Après avoir activé le module pour la première fois ou le module est mis à jour, la fonctionnalité prendra effet après le redémarrage du système + Centre de Sécurité, Éditeur de Galerie, Batterie et Performances, etc. + Batterie et performance + Centre de Sécurité + Éditeur de Galerie + Quand activé, l\'horloge ne sera pas manqueé en barre d\'état même s\'il y a un widget horloge + Ignorer le temps d\'attente de MIUI lorsque le débogage USB, les sources inconnues et l\'accessibilité + Définissez le score sur la Centre Security à 100 points et bloquez le bouton optimiser + Ignorer la limite minimale de recadrage d\'image par MIUI + Masquer l\'icône WIFI activeé + Masquer l\'icône trafic mobile activeé + Masquer l\'icône de type trafic mobile + Afficher la météo - Interrupteur principal + Écran de Verrouillage + Centre de Notifications + Afficher la ville + Prise en charge de l\'ajout des paramètres rapides du centre de contrôle déroulant pour le changement en temps réel + Centre de Contrôle + La version Mi Smart Hub n\'est pas supportée pour le moment + Vous semblez utiliser une version obsolète de LSPosed ou LSPosed n\'est pas active, veuillez mettre à jour LSPosed ou l\'activer et réessayer. + Il est recommandé de redémarrer le téléphone après la première activation ou la première mise à jour\nLa plupart des modifications nécessitent un redémarrage SystemUI dans le coin supérieur droit pour prendre effet + Êtes-vous sûr de vouloir redémarrer ? + Annuler + Êtes-vous sûr de redémarrer SystemUI? + Masquer l\'icône de charge + Masquer l\'icône WIFI standard + Horloge au centre en barre d\'état + Plus de mises style barre d\'état sont en cours de développement + Style de la barre d\'état + Mode Compatibilité + Marge gauche (0: Auto) + Marge droite (0: Auto) + Supprimer la liste noire des macros du jeu + Masquer le écart de vitesse du réseau + Mise à jour + *Supprimer OTA valider [LAB] + - Supporte uniquement l\'utilisation de la série VAB, s\'il vous plaît ne pas ouvrir d\'autres séries.\n- Pas besoin de qualification de test interne pour flash dans le package de test interne complet.\n- Ceux qui ont une permission de test interne ne seront pas en mesure de recevoir des mises à jour de test internes, et peuvent être utilisés pour bloquer les mises à jour du système.\n- Après une mise à jour de type multi-version, il est recommandé d\'effacer les données.\n- L\'utilisation non officielle de la ROM n\'est pas prise en charge. + Réglages + Afficher l\'importance notification + Afficher les paramètres d\'importance de la notification qui sont manqueés dans les versions MIUI 12 et ultérieures + Supprimez les pubs + Supprimer les publicités pour le gestionnaire de thème + La page de la batterie affiche la température actuelle + Activer l\'animation de chargement de la vague + Échelle maximum du fond d\'écran + "Défaut: " + Actuelles: + Participer à la traduction + Aidez-nous à traduire l\'application dans votre langue + Afficher les informations actuelles pendant le chargement + Actuelles + Masquer l\'icône de le volume + Masquer l\'icône ZEN + Masquer l\'icône + Double tapper pour veille + Double-tapez l\'espace vide pour mettre en veille + Vieux panneau de réglages rapide + Lignes et colonnes personnalisés + Colonnes (Inexpansé) + Lignes + Colonnes + Lignes (horizontal) + Vitesse du réseau à double ligne + Affichage de download et upload en vitesse de réseau + Vitesse du réseau en barre d\'état + Taille de double ligne (0: ne pas changer) + Icône de double ligne + Aucune + Alignement double ligne + Gauche + Droite + diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-he/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml new file mode 100644 index 00000000..bf73b5ea --- /dev/null +++ b/app/src/main/res/values-hu/strings.xml @@ -0,0 +1,216 @@ + + + Teljesítmény + Az aktuális jkijelzőfrissítési sebesség felső határértékének rögzítése + Kezelőfelület + Távolítsa el a kijelzőt az értesítés felett + \"Ez az alkalmazás más alkalmazások felett jelenik meg\" értesítés eltávolítása + Egyéb + Képernyőkép engedélyezése + Képernyőkép készítésének engedélyezése olyan szoftverben, amely nem teszi lehetővé\nTámogatás a Vezérlőközpontban a biztonság érdekében történő legördülő gyors beállítás hozzáadásához + Kezdőlap + Mindig megjeleníti a kezdőképernyő óráját + Újraindítás minden hatókörben + Rendszer-újraindítás + + Állapotsor ikonjai + Hiányzó SIM ikon elrejtése + SIM-kártya 1 ikon elrejtése + SIM-kártya 2 ikon elrejtése + VPN ikon elrejtése + Repülőgép üzemmód ikon elrejtése + WIFI ikon elrejtése + Bluetooth ikon elrejtése + Hang és Ne zavarjon ikon elrejtése + Riasztás ikon elrejtése + Hordozható hotspot ikon elrejtése + Headset ikon elrejtése + Bluetooth akkumulátor ikon elrejtése + Nagy HD ikon elrejtése + Kis HD ikon elrejtése + HD nincs szolgáltatás ikon elrejtése + Névjegy + Névjegy Modul + Verzió + Szerző Coolapk + Forráskód megnyitása + Szeretnénk, hogy több fejlesztő vegyen részt a fejlesztésben + Visszajelzés/javaslat + Kattintson a GitHub problémák megtekintéséhez + Állapotsor + Másodpercek kijelzése + Hálózati sebesség frissítése másodpercekben + Az értesítési ikonok maximális számának eltávolítása + Modul főkapcsoló + GPS ikon elrejtése + Hálózati sebesség (/s) egységek elrejtése + Menü + Tippek + 5/10 másodperces figyelmeztető idő kihagyása + A képek/képernyőképek vágására vonatkozó korlátozás megszüntetése + Másodlagos WIFI ikon elrejtése + Indító ikon elrejtése + Akkumulátor (%) elrejtése + Akkumulátor ikon elrejtése + Állapotsori óra formátuma + Év megjelenítése + Hónap megjelenítése + Dátum megjelenítése + Nap megjelenítése + Hely elrejtése + Képernyőkép engedélyezése + Jelenlegi limit rögzítése + Kínai tizenkét órás kijelző + Egyedi óra kapcsoló + AM/PM kijelző + Kétsoros + Óraméret (0: nem változtatható) + Kettős sorméret (0: nem változtatható) + A funkció nem működik? + Modulhoz kapcsolódó információk megtekintése + Nyílt forráskódú adattár közreműködőinek listája + Fejlesztő + Köszönettel + Harmadik fél nyílt forráskódú nyilatkozat + Korlátozások megszüntetése + Támogatás leminősítés/eltérő aláírás/aláírás nélküli telepítés + Az akkumulátor-optimalizálás fehér lista helyreállításának megakadályozása + A rendszer újraindítása után helyreáll + Akkumulátor optimalizálása + MIUI által rejtett akkumulátor-optimalizálás menü megnyitása + Kis ablakok kényszerítése + Adjon nekünk ötcsillagos értékelést + Segíthetsz abban, hogy többen ránk találjanak + Csatlakozzon a hivatalos QQ-csatornához + Csatlakozz a hivatalos TG csatornához + A csevegőcsoportba a csatorna oldalán léphetsz be + Beszélgetések + A rendszer feketelistájának és a kis ablakok szoftvertilalmának figyelmen kívül hagyása + Távolítsa el a zárolási képernyő oldalsó paneljét + A képernyőzárolási kamera funkció eltávolítása + Csak a hivatalos alapértelmezett témák támogatottak + Állítson be 100 pontot a biztonsági alkalmazáson + Hatáskör + Keretrendszer + Rendszer Ui + Kezdőképernyő + Egyebek + Az állapotsor hálózati sebesség összetevőjének frissítési gyakoriságát 1s-re módosíthatja + Az akkumulátor százalékos kijelzésének funkciót saját magának kell bekapcsolnia + Az állapotsor hálózati sebességkomponensének (/s) egységeinek elrejtése + A 3 értesítésre vonatkozó korlát megszüntetése az állapotsoron + Rendszerfelület, állapotsor, zárolási képernyő stb. testreszabása. + A modul első engedélyezése vagy a modul frissítése után a funkció a rendszer újraindítása után lép hatályba + Biztonsági alkalmazás, Galéria szerkesztő, akkumulátor és teljesítmény stb. + Akkumulátor és teljesítmény + Biztonsági alkalmazás + Galéria szerkesztő + Ha be van kapcsolva, az óra nem lesz elrejtve az állapotsoron, még akkor sem, ha van egy óra widget + A MIUI várakozási idő figyelmen kívül hagyása az USB hibakeresés, az ismeretlen források és a hozzáférhetőség engedélyezésekor + Állítsa be a biztonsági alkalmazás pontszámát 100 pontra, és blokkolja az Optimalizálás gombot + A MIUI által a képkivágás minimális korlátjának figyelmen kívül hagyása + WIFI aktivitás ikon elrejtése + Mobil tevékenység ikon elrejtése + Mobil típus ikon elrejtése + Időjárás megjelenítése - Főkapcsoló + Zárolási képernyő + Értesítési központ + Város nevének mutatása + Támogatás a legördülő vezérlőközpont gyorsbeállításának hozzáadásához a valós idejű váltáshoz + Irányító központ + A Mi Smart Hub verziója jelenleg nem támogatott + Úgy tűnik, hogy az LSPosed egy elavult verzióját használja, vagy az LSPosed nem aktív, kérjük, frissítse az LSPosed-et vagy aktiválja, és próbálja újra. + Az első aktiválás vagy frissítés után ajánlott újraindítani a telefont\nA legtöbb változtatás hatálybalépéséhez a jobb felső sarokban található újraindítás szükséges + Biztosan újraindítod a telefont? + Mégse + Biztos, hogy újraindítod az összes hatókört? + Töltés ikon elrejtése + WIFI ikon elrejtése + Állapotsor időközpont + Több állapotsor elrendezés van fejlesztés alatt + Állapotsor elrendezése + Kompatibilitási mód + Bal margó (0: Automatikus) + Jobb margó (0: Automatikus) + Játék makró feketelista eltávolítása + Hálózati sebességosztó elrejtése + Frissítés + *Távolítsa el az OTA érvényesítését [LAB] + - Csak a VAB sorozat használatát támogatja, kérjük, ne nyisson meg más sorozatokat.\n- Nincs szükség a belső tesztelési képesítésre a teljes belső tesztelési csomagba való flasheléshez.\n- Azok, akik belső tesztelési engedéllyel rendelkeznek, nem kaphatnak belső tesztelési frissítéseket, és a rendszerfrissítések blokkolására használhatók.\n- A keresztverziós típusú frissítés után ajánlott az adatok törlése.\n- A nem hivatalos ROM használata nem támogatott. + Beállítások + Értesítés fontosságának megjelenítése + A MIUI 12 és későbbi verziókban elrejtett fontossági beállítások megjelenítése az értesítésben + Reklámok eltávolítása + Hirdetések eltávolítása a téma menedzser számára + Az akkumulátor oldal mutatja az aktuális hőmérsékletet + Hullámtöltés animáció engedélyezése + Maximális háttérkép méretarány + "Alapértelmezett: " + Jelenlegi: + Részvétel a fordításban + Segítsen nekünk lefordítani az alkalmazást az Ön nyelvére + Jelenlegi információk megjelenítése töltés közben + Jelenlegi + Megnyitott alkalmazás felugró ablakának eltávolítása + \"Engedélyezed XXX számára, hogy megnyissa ezt: XXX\" felugró ablak eltávolítása + Hangerő ikon elrejtése + ZEN ikon elrejtése + Ikon elrejtése + Alvás dupla érintésre + Alváshoz duplán koppintson az üres területre + Régi gyorsbeállítások panel + Egyéni sorok és oszlopok + Oszlopok (kibontatlan) + Sorok + Oszlopok + Sorok (vízszintesen) + Kétsoros hálózati sebesség + Hálózati sebesség (fel és le) kijelzése + Állapotsor hálózati sebesség + Kettős sorméret (0: nem változtatható) + Kétsoros ikon + Semmi + Kétsoros igazítás + Balra + Jobbra + Nagy mobil típus ikon + A legtöbb értesítés kis ablakba csúsztatható + Akkumulátor százalékos betűmérete + 0: ne változtassa meg + Nagy mobil típus ikon mérete + Nagy mobil típus ikon félkövér + Nagy mobil típus ikon fel és le pozíció + Bemeneti hiba + Távolság: + Nagy mobil típus ikon bal és jobb margó + Átvitel + Minden alkalmazás támogatásának kikényszerítése egy másik eszközön + Kétsoros középre igazítás + Alapértelmezett + Óra központ + Óra jobbra + Állapotsor elrendezési mód + Óra középen és ikon balra + Az értesítési ikonok maximális száma + Az értesítési pontok maximális száma + Egyedi mobil típusú szöveg + Egyedi mobil típusú szöveges kapcsoló + Engedélyezze a leminősítést + Engedélyezze a leminősítésett alkalmazásokat. + Digest ellenőrzés kikapcsolása + Lehetővé teszi az alkalmazások telepítését az apk fájl módosítása után (figyelmen kívül hagyja az érvénytelen digest hibát). + Aláírások összehasonlításának letiltása + Engedélyezze az alkalmazás újratelepítését különböző aláírásokkal. + Telepített aláírások használata + Telepítéskor mindig a már telepített alkalmazások aláírásait használja.\nEz rendkívül veszélyes.\nCsak akkor engedélyezze, ha tényleg szükséges! + Továbbfejlesztett mód + Néhány érvényesítés átadása az alkalmazásban + Hátsó kijelző (11Ultra) + Óra kijelző másodpercek + Hang + Média hangerőfokozatok + Nem megbízható érintések engedélyezése + Újraindítás után lép hatályba + A bekapcsolás hatására a hangerő sáv görgetése lefagyhat, vagy a Bluetooth hangerő rendellenes lehet + Előfordulhat, hogy egyes, a Mi Push-on keresztül érkező értesítések nem támogatottak. + diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml new file mode 100644 index 00000000..94c8335c --- /dev/null +++ b/app/src/main/res/values-id/strings.xml @@ -0,0 +1,157 @@ + + + Kunci batas atas kecepatan refresh layar saat ini + Tampilan + Hapus tampilan di atas notifikasi + Hapus pemberitahuan \"Aplikasi ini sedang ditampilkan di atas aplikasi lain\" + Lainnya + Izinkan tangkapan layar + Izinkan tangkapan layar dalam perangkat lunak yang tidak mengizinkan\nMendukung penambahan setelan jalan pintas di Pusat kendali demi keamanan + Halaman Utama + Selalu tampilkan jam layar Utama + Mulai ulang semua cakupan + Mulai Ulang Sistem + + Ikon status bar + Sembunyikan ikon Tanpa SIM + Sembunyikan ikon Kartu SIM 1 + Sembunyikan ikon Kartu SIM 2 + Sembunyikan ikon VPN + Sembunyikan ikon mode Pesawat + Sembunyikan ikon WIFI + Sembunyikan ikon Bluetooth + Sembunyikan ikon Suara dan Jangan Ganggu + Sembunyikan ikon Alarm + Sembunyikan ikon hotspot portabel + Sembunyikan ikon Headset + Sembunyikan ikon baterai pada Bluetooth + Sembunyikan ikon HD besar (MIUI China) + Sembunyikan ikon HD kecil (MIUI China) + Sembunyikan ikon HD Tanpa Layanan (MIUI China) + Tentang + Tentang Module + Versi + Repositori Sumber Terbuka + Selamat datang lebih banyak developer untuk berpartisipasi dalam pengembangan + Umpan Balik/Usulan + Klik untuk melihat Masalah GitHub + Tampilkan detik + Perubahan kecepatan jaringan dalam detik + Hapus jumlah maksimum ikon notifikasi + Tombol modul + Sembunyikan ikon GPS + Sembunyikan unit kecepatan jaringan (/d) + Hilangkan pembatasan untuk memotong gambar/cuplikan layar + Sembunyikan ikon WIFI tambahan + Sembunyikan ikon launcher + Sembunyikan battery (%) + Sembunyikan ikon baterai + Format jam pada status + Tampilkan tahun + Tampilkan bulan + Tampiulkan tanggal + Tampilkan hari + Sembunyikan spasi + Izinkan cuplikan layar + Kunci batas saat ini + Tampilkan waktu sistem 12-jam + Sesuaikan Perubahan Jam + Tampilkan AM/PM + Baris ganda + Ukuran jam (0: jangan di ganti) + Baris ganda (0: jangan di ganti) + Fitur tidak berjalan? + Lihat informasi terkait modul + Daftar kontributor repositori sumber terbuka + Daftar ucapan terimakasih + Pernyataan Sumber Terbuka Pihak Ketiga + Hapus pembatasan + Dukungan untuk menurunkan versi/berbeda lisensi/tidak terdaftar terhadap instalasi aplikasi + Cegah pemulihan daftar pembolehan pengoptimalan baterai + Fitur ini akan dipulihkan setelah merestart sistem + Pengoptimalan baterai + Buka menu pengoptimalan baterai dengan cepat yang disembunyikan oleh MIUI + Paksa jendela kecil + Ayo datang dan beri kami ulasan bintang lima + Ini membuat kita lebih mudah ditemukan + Bergabunglah dengan saluran QQ resmi + Bergabunglah dengan saluran TG resmi + Anda dapat masuk ke grup obrolan di halaman saluran + Diskusi + Abaikan pengecualian sistem dan larangan perangkat lunak dari jendela kecil + Lepaskan panel samping pada kunci layar + Hapus fitur kamera pada kunci layar + Hanya tema default resmi yang didukung + Tetapkan 100 poin di aplikasi Keamanan Miui + Jangkauan + Kerangka Sistem + Tampilan Sistem + Layar Utama + Lainnya + Ubah frekuensi perubahan keterangan kecepatan pada status jaringan menjadi 1 detik + Fitur tampilan persentase baterai harus diaktifkan sendiri + Sembunyikan unit (/d) dari keterangan status kecepatan jaringan + Hapus batas 3 notifikasi di status bar + Perubahan antarmuka sistem, bilah status, layar kunci, dll. + Setelah mengaktifkan modul untuk pertama kalinya atau modul diperbarui, fitur di sini akan berlaku setelah memulai ulang sistem + Aplikasi keamanan, Galeri editor, Baterai dan perfoma, dll. + Baterai dan perfoma + Aplikasi keamanan + Galeri Editor + Saat dihidupkan, jam tidak akan disembunyikan di status meskipun ada widget jam + Abaikan waktu tunggu MIUI saat mengaktifkan debugging USB, sumber tidak dikenal, dan aksesibilitas + Atur skor pada aplikasi Keamanan menjadi 100 poin dan blokir tombol Optimalkan + Abaikan batas minimum pemotongan gambar oleh MIUI + Sembunyikan ikon aktivitas WIFI + Sembunyikan ikon aktivitas seluler + Sembunyikan ikon jenis seluler + Tampilkan Cuaca - Tombol Utama + Layar kunci + Pusat Notifikasi + Tampilkan kota + Dukungan menambahkan pengaturan cepat pusat kendali, taruh-dibawah untuk peralihan waktu nyata + Pusat kendali + Mi Smart Hub pada versi saat ini tidak didukung + Anda sepertinya menggunakan LSPosed versi lama atau LSPosed tidak aktif, harap perbarui LSPosed atau aktifkan dan coba lagi. + Disarankan untuk me-restart perangkat setelah aktivasi atau pembaruan pertama \nSebagian besar perubahan memerlukan restart di sudut kanan atas untuk diterapkan + Apakah Anda yakin untuk mulai ulang? + Batal + Apakah Anda yakin untuk mulai ulang semua cakupan? + Sembunyikan ikon pengisian daya + Sembunyikan ikon standar WIFI + Pusat status waktu + Lebih banyak tata letak status sedang dalam pengembangan + Tata letak status + Mode kompatibel + Batas kiri (0: Otomatis) + Batas kanan (0: Otomatis) + Hapus pengecualian makro game + Sembunyikan pembagi kecepatan jaringan + Pembaruan + *Hapus validasi OTA [UJICOBA] + - Hanya mendukung penggunaan seri VAB, jangan buka seri lain.\n- Tidak perlu kualifikasi pengujian internal untuk mem-flash ke dalam paket pengujian internal lengkap.\n- Mereka yang memiliki izin pengujian internal tidak akan dapat menerima pembaruan pengujian internal, dan dapat digunakan untuk memblokir pembaruan sistem.\n- Setelah peningkatan versi lintas versi, disarankan untuk menghapus data.\n- Penggunaan ROM tidak resmi tidak didukung. + Pengaturan + Tampilkan notifikasi penting + Tampilkan pengaturan pemberitahuan penting yang disembunyikan di MIUI 12 dan versi yang lebih baru + Hapus iklan + Hapus iklan untuk pengelola tema + Halaman baterai menunjukkan suhu saat ini + Tampilkan animasi gelombang saat pengisian daya + Maksimal skala Wallpaper + Saat ini: + Partisipasi dalam penejermahan + Bantu kami menerjemahkan aplikasi ke dalam bahasa Anda + Tampilkan informasi pengisian saat mengecas + Pengisian + Sembunyikan ikon suara + Sembunyikan ikon ZEN (MIUI China) + Sembunyikan ikon + Ketuk ganda untuk tidur + Ketuk ganda pada layar kosong untuk membuat perangkat tidur + Panel lama pengaturan cepat + Kustomisasi jumlah kolom dan baris + Kolom (tidak diperluas) + Baris + Kolom + Baris (Horizontal) + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml new file mode 100644 index 00000000..17cb8f53 --- /dev/null +++ b/app/src/main/res/values-it/strings.xml @@ -0,0 +1,5 @@ + + + Alte prestazioni + + diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml new file mode 100644 index 00000000..7f292b4a --- /dev/null +++ b/app/src/main/res/values-ja/strings.xml @@ -0,0 +1,250 @@ + + + パフォーマンス + 現在のリフレッシュレート上限をロック + インターフェース + 「他のアプリの上に表示」通知を削除 + 「このアプリは他のアプリの上に表示されています」通知を削除します + その他 + スクリーンショットを許可 + 許可されていないアプリのスクリーンショットを許可します\nセキュリティのため、クイック設定に「許可/禁止」を切り替えるトグルを追加します + ホーム + ホーム画面の時計を常に表示する + すべてのスコープを再起動する + システムを再起動する + + ステータスバーのアイコン + SIM未挿入アイコンを隠す + SIMカード1のアイコンを隠す + SIMカード2のアイコンを隠す + VPN アイコンを隠す + 機内モードのアイコンを隠す + Wi-Fi アイコンを隠す + Bluetooth アイコンを隠す + サウンドとマナーモードのアイコンを隠す + アラームアイコンを隠す + ポータブルホットスポットアイコンを隠す + ヘッドセットアイコンを隠す + Bluetooth機器のバッテリーアイコンを非表示 + NFC アイコンを隠す + 大きな HD アイコンを隠す + 小さな HD アイコンを隠す + 新しい HD 通話アイコンを隠す + HD サービスなしアイコンを隠す + 概要 + モジュールについて + バージョン + 開発者の Coolapk + オープンソースリポジトリ + 開発に参加できる開発者を歓迎します + ご意見・ご提案 + クリックして GitHub Issues を表示する + MIUI13 (Android 12) 以降向けカスタマイズツール + ステータスバー + 秒を表示する + ネットワーク速度を秒単位で更新 + 通知アイコン数の上限を削除する + モジュールのメインスイッチ + GPS アイコンを隠す + ネットワーク速度の単位(/s)を隠す + メニュー + 注意事項 + 5/10秒間の警告時間をスキップ + 写真・スクリーンショットをトリミングする際の制限を解除する + Wi-Fiセカンダリアイコンを隠す + ランチャーアイコンを隠す + バッテリー (%) を隠す + バッテリーアイコンを隠す + ステータスバーの時計の形式 + 年を表示 + 月を表示 + 日付を表示 + 曜日を表示 + スペースを隠す + スクリーンショットを許可 + 現在の制限をロック + 中国語を12時間表示する + カスタム時計スイッチ + 午前/午後を表示 + 2行で表示 + 時計のサイズ (0: 変更しない) + デュアル行サイズ (0: 変更しない) + 機能が動作していませんか? + OK + モジュール関連情報を表示 + オープンソースリポジトリの貢献者一覧 + 開発者 + 感謝リスト + サードパーティーのオープンソースに関する声明 + インストール制限を削除 + ダウングレード、異なる署名、署名なしでのインストールを許可 + バッテリー最適化ホワイトリストのリカバリを防止する + システム再起動後に復元されます + 電池の最適化 + MIUI で非表示になったバッテリー最適化メニューをすばやく開く + 小さなウィンドウを強制的に表示 + 5つ星のレビューをお願いします。 + 多くの人に見つけてもらいやすくなります + 公式QQチャンネルに参加する + 公式 Telegram チャンネルに参加する + チャンネルページにチャットグループを入力することができます + 討論 + 小さなウィンドウへのシステムのブラックリストとソフトウェア制限を無視します + ロック画面のサイドパネルを削除 + ロック画面のカメラ機能を削除 + 公式のデフォルトテーマのみサポートされています + セキュリティアプリで 100 ポイントを設定 + 範囲 + システムフレームワーク + システム UI + ホーム画面 + その他 + ステータスバーのネットワーク速度コンポーネントの更新頻度を1秒に変更します + バッテリー残量表示機能は自分でオンにする必要があります + ステータスバーのネットワーク速度表示の (/s) 単位を隠す + ステータスバーの通知数の3つまでの上限を削除します + システムインターフェース、ステータスバー、ロック画面などをカスタマイズします + 初めてモジュールを有効にした後、またはモジュールが更新された後、システムを再起動した後にここの機能が有効になります + セキュリティアプリ、ギャラリーエディタ、バッテリー、パフォーマンスなど。 + バッテリーとパフォーマンス + セキュリティアプリ + ギャラリーエディター + オンにすると、時計ウィジェットがある場合でも、ステータスバーに時計が表示されます + USBデバッグ、不明なソース、ユーザー補助を利用する際のMIUIによる待機時間を無視します + セキュリティアプリのスコアを100ポイントに設定し、最適化ボタンをブロックします + MIUI による画像トリミングの最小制限を無視します + Wi-Fiアクティビティアイコンを隠す + モバイルアクティビティのアイコンを隠す + モバイルタイプのアイコンを隠す + 天気の表示 - メインスイッチ + ロック画面 + 通知センター + 市区町村を表示 + リアルタイム切り替えのためのドロップダウンコントロールセンタークイック設定の追加をサポート + コントロールセンター + Mi Smart Hub バージョンは現在サポートされていません + 古いバージョンの LSPosed を使用しているか、または、LSPosed がアクティブではないようです。LSPosed を更新するか、それを有効にしてもう一度やり直してください。 + 最初のインストールまたは更新後は端末を再起動することをお勧めします\n多くの変更は右上隅から再起動することで適用されます + 再起動しますか? + キャンセル + 全てのスコープを再起動しますか? + 充電アイコンを隠す + Wi-Fi標準アイコンを隠す + ステータスバーのタイムセンター + より多くのステータスバーのレイアウトが開発中です + ステータスバーのレイアウト + 互換モード + 左マージン(0:自動) + 右マージン(0:自動) + 全画面レイアウトを強制(すべての特殊な形状の画面に対応) + ゲームのマクロブラックリストを削除 + ネットワーク速度分割器を非表示 + 更新 + *OTA 検証を無効化 [実験的] + - 仮想AB対応端末のみ対応しています。\ n -内部テストの資格を必要とせず、内部テストパッケージをインストールできるようにします。\ n -内部テスト許可を持っている方は、内部のテストの更新を受け取れなくなるため、システムアップデートをブロックするために使用できます。\ n -OSバージョンが変わる場合は工場出荷状態に戻すことをお勧めします。\ n -非公式のROMでの使用には非対応です。 + 設定 + 通知の重要性を表示 + MIUI 12 以降のバージョンで非表示になっている通知の重要性設定を表示します + 広告を除去する + テーママネージャーの広告を削除 + バッテリーページに現在の温度を表示します + Wave のチャージアニメーションを有効化 + 壁紙の最大スケール + "既定:" + 現在: + 翻訳に参加する + 翻訳を手伝ってください! + 充電中に電流の情報を表示 + 電流 + 外部アプリを開くときのポップアップを削除 + 「アプリAがアプリBを開くことを許可」のチェーンのポップアップを削除します + 音量アイコンを非表示 + ZENアイコンを隠す + アイコンを隠す + 2回タップでスリープ + ホーム画面の空白を2回タップしてスリープする + 古いクイック設定パネル + クイック設定の行数と列数をカスタマイズ + 縦(未展開時) + + + 横(横持ち時) + ネットワーク速度の2行表示 + ネットワーク速度を上下に表示する + ステータスバーのネットワーク速度 + 2行のサイズ(0:変更なし) + 2行アイコン + なし + 2行の配置 + + + 大きなモバイルタイプアイコン + Wi-Fi 規格を表示 + ポップアップ通知を下スライドしてフローティングウィンドウにするやつをほとんどのアプリで有効にする + バッテリー残量のフォントサイズ + 0:変更しない + 大きな電波アイコンのサイズ + 大きな電波アイコンの太さ + 大きな電波アイコンの上下の位置 + 入力エラー + 範囲: + 大きな電波アイコンの左右の余白 + キャスト + すべてのアプリを別のデバイスで開くようにする + 2行中央揃え + デフォルト + 時計を中央に配置 + 時計を右に配置 + ステータスバーのレイアウトモード + 時計を中央、アイコンを左 + 通知アイコンの最大数 + 通知ドットの最大数 + モバイルタイプのカスタムテキスト + モバイルタイプのカスタムテキストスイッチ + ダウングレードを許可 + アプリのダウングレードを許可します。 + ダイジェスト認証を無効にする + 改変されたAPKパッケージのインストールを許可します(無効なダイジェストエラーを無視します)。 + 比較署名を無効にする + 異なる署名を持つアプリの再インストールを許可します。 + インストール済みの署名を使用 + アプリのインストール時に、常に既存アプリの署名を使用します。\nこのオプションは大変危険です。\n本当に必要なときだけ有効にしてください!! + 強化モード + アプリケーションでいくつかの検証に合格する + 背面ディスプレイ (11 Ultra) + 時計の秒数表示 + サウンド + メデイア音量の段階数 + 信頼されていないタッチを許可 + 機能は再起動後に有効になります + オンにすると、ボリュームバーのスクロールがフリーズしたり、Bluetoothの音量が異常になる場合があります + 一部のMi Pushによる通知では機能しない場合があります。 + 画面穴の場所 + カスタム時計モード + 時刻の表示方法 + オフ + 中央 + 左または右 + プリセット + オタク + バックグラウンドアプリの終了を防止 + 消費電力が増える可能性があります。「よりアグレッシブにする」と併用することをおすすめします。Tombstone との併用はおすすめしません。 + よりアグレッシブにする + バックグラウンドアプリに通知、実行中のサービスやプロセスがあっても停止させることを許可します。\n停止させたくないアプリはバッテリーセーバーを制限なしに設定してください。\n有効にする前に Tombstone と NoANR 関連モジュールをアンインストールしてください。 + アクティブなアプリの停止を許可 + 非常にアグレッシブで、アプリの実行に影響する可能性があります + パッケージインストーラー + アプリインストール時のカウントチェックを無効にします + ネットワークカードのみを表示する大きなモバイルタイプ + 大きなモバイルタイプの位置 + カードマーキングアニメーションを変更する + アプリ履歴でカードを削除するときのアニメーション効果を変更します + 壁紙の調整を無効にする + アプリ履歴へ出入りするときに壁紙の明るさが徐々に変化する効果を無効します + アプリ名をスクロール + アプリ名が長すぎるとき、改行させずスクロール表示させます + ショートカットメニューの追加ウィンドウ + ホーム画面のアイコンを長押しすると、素早く開けるウィンドウを追加できます + 小さいウィンドウ + クリックして使用例を表示 + diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml new file mode 100644 index 00000000..cf61125d --- /dev/null +++ b/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,107 @@ + + + 성능 + 최대 프레임으로 고정 + UI + 알림 위에 표시 끄기 + \"이 앱은 다른 앱 위에 표시됩니다\" 알림 끄기 + 다른 + 스크린샷 허용 + 허용되지 않은 소프트웨어의 스크린샷 허용\n보안을 위해 제어 센터에 드롭다운 빠른 설정 추가 지원 + + 홈 화면 시계 항상 켜짐 + 모든 범위 다시 시작 + 시스템 재부팅 + + 상태 표시줄 아이콘 + 유심 없음 아이콘 숨기기 + 1번 심 아이콘 숨기기 + 2번 심 아이콘 숨기기 + VPN 아이콘 숨기기 + 비행기 모드 아이콘 숨기기 + 와이파이 아이콘 숨기기 + 블루투스 아이콘 숨기기 + 무음 및 방해 금지 모드 아이콘 숨기기 + 알람 아이콘 숨기기 + 모바일 핫스팟 아이콘 숨기기 + 해드셋 아이콘 숨기기 + 블루투스 기기 배터리 아이콘 숨기기 + NFC 아이콘 숨기기 + 큰 HD 아이콘 숨기기 + 작은 HD 아이콘 숨기기 + HD 서비스 없음 아이콘 숨기기 + 에 대한 + 모듈에 대해 + 버전 + 작성자 Coolapk + 소스 저장소 열기 + 개발에 참여하는 더 많은 개발자를 환영합니다 + 피드백 및 제안 + 클릭해 GitHub 이슈 보기 + 상태 바 + 화면 표시 시간 + 몇 초에 네트워크 속도 새로 고침 + 알림 아이콘의 최대 숫자 끄기 + 모듈 메인 스위치 + GPS 아이콘 숨기기 + 네트워크 속도 단위(/s) 숨기기 + 메뉴 + + 5/10초 경고 시간 건너뛰기 + 사진/스크린샷 자르기 제한 끄기 + WIFI 보조 아이콘 끄기 + 런처 아이콘 끄기 + 배터리 퍼센트 표시(%) 끄기 + 배터리 아이콘 숨기기 + 상태바 시계 형태 + 연도 표시 + 달 표시 + 일 표시 + 요일 표시 + 공간 숨기기 + 스크린샷 허용 + 현재 제한 고정 + 중국식 12시간 표시 + 맞춤형 시계 스위치 + 오전/오후 표시 + 두 줄 + 시계 크기(0: 변경 안함) + 이중 행 크기(0: 변경 안함) + 기능이 작동하지 않나요? + 확인 + 모듈 관련 정보 보기 + 오픈소스 저장소 기여자 목록 + 개발자 + 기여자 목록 + 서드파티 오픈소서 상태 + 제한 끄기 + 다운그레이드/다른 서명/서명되지 않은 설치 지원 + 배터리 최적화 화이트리스트 복구 방지 + 시스템 다시시작 후 복원됩니다 + 배터리 최적화 + MIUI에서 숨겨진 배터리 최적화 메뉴 퀵 오픈 + 작은 창 강제하기 + 5점 리뷰 해주세요! + 이것은 우리를 더 쉽게 찾을 수 있게 해줍니다 + 공식 QQ 채널에 참여하세요 + 공식 TG 채널에 참여하세요 + 채널 페이지에 있는 대화 그룹에 입장 할 수 있습니다 + 토론 + 작은 창의 시스템 블랙리스트 및 소프트웨어 금지 무시 + 잠금화면 사이드 패널 끄기 + 잠금화면 카메라 끄기 + 공식 기본 테마만이 지원됩니다 + 보안 앱에서 100포인트 설정 + 스코프 + 시스템 프레임워크 + 시스템 Ui + 홈 화면 + 기타 + 상태 표시줄에 있는 네트워크 속도의 새로 고침 빈도를 1초로 변경 + 배터리 백분율 표시 기능은 직접 켜야 합니다 + 상태 표시줄에 있는 네트워크 속도의 (/s) 단위 숨기기 + 상태 표시줄의 알림 3개 제한 끄기 + 시스템 인터페이스, 상태 표시줄, 잠금 화면 등 커스텀하기 + 모듈을 처음 활성화하거나 모듈이 업데이트된 후, 여기의 기능은 시스템을 다시 시작한 후 적용됩니다. + 보안 앱, 사진 편집기, 배터리, 성능 등 + diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..ad38ea98 --- /dev/null +++ b/app/src/main/res/values-night/styles.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml new file mode 100644 index 00000000..dab50fab --- /dev/null +++ b/app/src/main/res/values-nl/strings.xml @@ -0,0 +1,54 @@ + + + Prestatie + Vergrendel het huidige ververspercentage van het bovenlimiet + Verwijder weergave over notificatie + Verwijder \"Deze app geeft weer over andere apps\" notificatie + Andere + Sta schermafbeelding toe + Sta schermafbeelding toe in software die niet toestaan\nOndersteuning voor het toevoegen van drop-down snelle instelling op Controle center voor beveiliging + Startpagina + Geef altijd de klok op het startscherm weer + Herstart alle scope + Herstart Systeem + + Statusbalk iconen + Verberg Geen SIM icoon + Verberg SIM Kaart 1 icoon + Verberg SIM Kaart 2 icoon + Verberg VPN icoon + Verberg Vliegtuigmodus icoon + Verberg WIFI icoon + Verberg Bluetooth icoon + Verberg Geluid en Niet Storen icoon + Verberg Alarm icoon + Verberg Draagbare hotspot icoon + Verberg Hoofdtelefoon icoon + Verberg Bluetooth batterij icoon + Verberg groot HD icoon + Verberg klein HD icoon + Verberg HD Geen Service icoon + Over + Over Module + Versie + Auteur Coolapk + Welkom meer ontwikkelaars om deel te nemen in de ontwikkeling + Feedback/Voorstel + Klik om GitHub Problemen te bekijken + Statusbalk + Seconden weergeven + Netwerksnelheid vernieuwen in seconden + Verwijder de maximum nummers van notificatie iconen + Module hoofdschakelaar + Verberg GPS icoon + Verberg netwerksnelheid (/s) eenheden + Hint + Sla 5/10 seconden van waarschuwingstijd over + Verwijder restrictie op bijsnijden van afbeeldingen/schermafbeelingen + Verberg WIFI tweede icoon + Verberg Launcher icoon + Aanpassen van systeeminterface, statusbalk, vergrendelingsscherm etc. + Na het inschakelen van de module voor de eerste keer of de module is bijgewerkt, zal de functie hier van kracht worden na het herstarten van het systeem + Beveiligingsapp, Gallerij aanpasser, Batterij en prestatie, enz. + Batterij en prestatie + diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-no/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml new file mode 100644 index 00000000..07ddf239 --- /dev/null +++ b/app/src/main/res/values-pl/strings.xml @@ -0,0 +1,250 @@ + + + Wydajność + Zablokuj górny limit częstotliwości odświeżania + Interfejs + Usuń powiadomienie dot. wyświetlania nad innymi aplikacjami + Usuń powiadomienie \"Ta aplikacja wyświetla się nad innymi aplikacjami\" + Inne + Zezwalaj na wykonywanie zrzutów ekranu + Zezwalaj na wykonywanie zrzutów ekranu w aplikacjach, które na to domyślnie nie pozwalają\nObsługuje dodawanie rozwijanych szybkich ustawień w Centrum kontroli dla bezpieczeństwa + Ekran główny + Zawsze wyświetlaj zegar Ekranu głównego + Zrestartuj hosta + Restart systemu + + Ikony paska statusu + Ukryj ikonę braku karty SIM + Ukryj ikonę karty SIM 1 + Ukryj ikonę karty SIM 2 + Ukryj ikonę VPN + Ukryj ikonę trybu samolotowego + Ukryj ikonę Wi-Fi + Ukryj ikonę Bluetooth + Ukryj ikonę dźwięku i Nie przeszkadzać + Ukryj ikonę alarmu + Ukryj ikonę przenośnego hotspotu + Ukryj ikonę słuchawek + Ukryj ikonę poziomu baterii Bluetooth + Ukryj ikonę NFC + Ukryj dużą ikonę HD + Ukryj małą ikonę HD + Ukryj nową ikonę HD + Ukryj ikonę braku usługi HD + O module + O module + Wersja + Autor Coolapk + Otwartoźródłowe repozytorium + Zachęcam do rozwijania projektu innych deweloperów + Opinie/propozycje + Kliknij, aby wyświetlić zgłoszenia na GitHubie + Narzędzie do dostosowywania MIUI 13+ (Android 12+) + Pasek statusu + Wyświetlaj sekundy + Odświeżenie prędkości sieci w sekundach + Usuń limit maksymalnej liczby ikon powiadomień + Główny przełącznik modułu + Ukryj ikonę GPS + Ukryj jednostki prędkości sieci (/s) + Menu + Porady + Pomiń 5/10-sekundowe zakładki z ostrzeżeniem + Usuń ograniczenie przycinania zdjęć/zrzutów ekranu + Ukryj dodatkową ikonę Wi-Fi + Ukryj ikonę launchera + Ukryj baterię (%) + Ukryj ikonę baterii + Format zegara na pasku statusu + Wyświetlaj rok + Wyświetlaj miesiąc + Wyświetlaj datę + Wyświetlaj dzień + Ukryj spację + Zezwalaj na zrzut ekranu + Zablokuj bieżący limit + Wyświetlaj czas chiński (12 godz.) + Własny przełącznik zegara + Wyświetlaj AM/PM + Dwa wiersze + Rozmiar zegara (0: brak zmian) + Rozmiar wiersza (0: brak zmian) + Funkcja nie działa? + OK + Wyświetl informacje dotyczące modułu + Lista współtwórców repozytorium + Deweloper + Podziękowania + Deklaracja Open Source dla stron trzecich + Usuń ograniczenia + Wspieraj instalację starszej wersji/innej sygnatury/niepodpisanej aplikacji + Zapobiegaj przywracaniu białej listy optymalizacji baterii + Zostanie przywrócone po ponownym uruchomieniu systemu + Optymalizacja baterii + Szybkie otwieranie menu optymalizacji baterii ukrytego przez MIUI + Wymuś małe okna + Przejdź i daj nam 5 gwiazdek + Być może dzięki temu będziemy bardziej rozpoznawalni + Dołącz do oficjalnego kanału QQ + Dołącz do oficjalnego kanału Telegram + Możesz wejść na naszą grupę na stronie kanału + Dyskusje + Ignoruj systemową czarną listę, a także ograniczenia oprogramowania dot. pływających okien + Usuń panel boczny Ekranu blokady + Usuń funkcję aparatu z Ekranu blokady + Obsługiwane są tylko oficjalne domyślne motywy + Ustaw 100 punktów w teście Panelu sterowania + Obszar + Framework systemu + Interfejs + Ekran główny + Inne + Zmień częstotliwość odświeżania wskaźnika prędkości sieci na 1 sekundę + Procentowe wyświetlanie poziomu baterii musi być włączone ręcznie + Ukryj jednostki (/s) wskaźnika prędkości sieci na pasku statusu + Usuń limit 3 powiadomień na pasku statusu + Dostosuj interfejs systemu, pasek statusu, ekran blokady itp. + Po pierwszym włączeniu modułu lub jego aktualizacji funkcja będzie działać po ponownym uruchomieniu systemu + Panel sterowania, Edytor Galerii, Bateria i wydajność itp. + Bateria i wydajność + Panel sterowania + Edytor Galerii + Po włączeniu zegar nie będzie ukryty na pasku stanu, nawet jeśli istnieje widżet zegara + Ignoruj czas oczekiwania, który wymusza MIUI podczas włączania debugowania USB, instalacji aplikacji z nieznanych źródeł czy ułatwień dostępu + Ustaw wynik testu wydajności w Panelu sterowania na 100 punktów i zablokuj przycisk Optymalizuj + Ignoruj minimalny limit przycinania obrazów w MIUI + Ukryj ikonę aktywności Wi-Fi + Ukryj ikonę aktywności mobilnej + Ukryj ikonę typu sieci + Wyświetlaj pogodę + Ekran blokady + Centrum powiadomień + Pokaż miasto + Dodaj przełącznik w Centrum funkcji dot. przełączania się na ten tryb w czasie rzeczywistym + Centrum funkcji + Wersja zawierająca Mi Smart Hub nie jest obecnie obsługiwana + Wygląda na to, że używasz przestarzałej wersji LSPosed lub nie jest on aktywny. Zaktualizuj lub aktywuj go, a następnie spróbuj ponownie. + Zalecane jest ponowne uruchomienie telefonu po pierwszej aktywacji lub aktualizacji\nWiększość zmian wymaga restartu w prawym górnym rogu, aby zacząć działać + Na pewno chcesz ponownie uruchomić system? + Anuluj + Czy na pewno chcesz zrestartować wszystkie zakresy? + Ukryj ikonę ładowania + Ukryj standardową ikonę Wi-Fi + Wyśrodkowanie czasu w pasku statusu + Inne układy paska statusu są w trakcie tworzenia + Układ paska statusu + Tryb zgodności + Lewy margines (0: autom.) + Prawy margines (0: autom.) + Wymuś układ pełnoekranowy (obsługuje wszystkie ekrany o specjalnym kształcie) + Usuń czarną listę gier, dla których wyłączono obsługę makr + Ukryj rozdzielacz prędkości sieci + Aktualizacje + *Usuwanie sprawdzania OTA [LAB] + - Wsparcie tylko dla urządzeń z partycjami VAB. Nie używać na telefonach nieposiadających tych partycji.\n- Nie musisz znajdować się w grupie wewnętrznych testów MIUI, aby móc wgrać testowy ROM.\n- Osoby posiadające takowe uprawnienia nie będą mogły już otrzymywać aktualizacji z testowymi paczkami.\n- Po przejściu między różnymi typami aktualizacji (np. beta -> stable) zalecane jest wyczyszczenie danych.\n- Używanie tej funkcji z nieoficjalnymi ROM-ami nie jest wspierane. + Ustawienia + Pokazuj ważność powiadomień + Pokaż ustawienia ważności powiadomień ukryte w MIUI 12 i nowszych + Usuń reklamy + Usuń reklamy w aplikacji Motywy + Wyświetlanie obecnej temperatury w menu Baterii + Włąćz animację ładowania Fala + Maksymalna skala tapety + "Domyślnie: " + Obecnie: + Przetłumacz moduł + Pomóż nam przetłumaczyć aplikację na swój język + Wyświetlaj informacje dot. podawanego prądu podczas ładowania + Prąd + Usuń okno pop-up dot. otwarcia aplikacji + Usuń okno pop-up Uruchamiania łańcuchowego \"Zezwól aplikacji XXX na otwarcie XXX\" + Ukryj ikonę głośności + Ukryj ikonę ZEN + Ukrywanie ikon + Dwukrotnie dotknij, aby uśpić + Dotknij dwukrotnie pustego miejsca, aby uśpić + Stary panel szybkich ustawień + Niestandardowe wiersze i kolumny + Kolumny (nierozwinięte) + Wiersze + Kolumny + Wiersze (poziomo) + Prędkość sieci w dwóch wierszach + Wyświetlaj prędkość wysyłania i pobierania + Prędkość sieci na pasku statusu + Rozmiar wiersza (0: brak zmian) + Ikona drugiego wiersza + Brak + Wyrównanie wierszy + Do lewej + Do prawej + Duża ikona typu sieci + Pokaż standard Wi-Fi + Zezwól większości powiadomień na otwieranie się w pływających oknach + Procent rozmiaru czcionki baterii + 0: brak zmian + Rozmiar dużej ikony typu sieci + Pogrubienie dużej ikony typu sieci + Pozycja pobierania i wysyłania w dużej ikonie typu sieci + Błąd danych wejściowych + Zasięg: + Marginesy po lewej i prawej stronie dużej ikony typu sieci + Projekcja + Wymuś wsparcie wszystkich aplikacji dla wyświetlania się na innym urządzeniu + Wyrównanie do środka dla obu wierszy + Domyślne + Zegar pośrodku + Zegar po prawej + Tryb układu paska statusu + Zegar pośrodku, ikona po lewej + Maksymalna ilość ikon powiadomień + Maksymalna liczba kropek powiadomień + Własny typ sieci + Przełącznik dla własnego tekstu typu sieci + Instalacja starszych wersji + Zezwalaj na instalację starszych wersji aplikacji. + Wyłącz weryfikację Digest + Pozwala instalować aplikacje po modyfikacji jakiegoś pliku w archiwum APK (ignoruje nieprawidłowy błąd digest). + Wyłącz porównywanie podpisów + Zezwalaj na ponowną instalację aplikacji z różnymi podpisami. + Użyj zainstalowanych podpisów + Zawsze używaj podpisów już zainstalowanych aplikacji podczas instalacji.\nJest to niezwykle niebezpieczne.\nWłączaj tylko, gdy jest to naprawdę potrzebne! + Tryb ulepszony + Wymaga potwierdzenia w aplikacji + Tylny wyświetlacz (Mi 11 Ultra) + Wyświetlanie sekund w zegarze + Dźwięk + Kroki głośności multimediów + Zezwalaj na niezaufane dotknięcia + Efekt po restarcie + Włączenie może spowodować, że przewijanie paska głośności zamraża lub głośność Bluetooth jest nieprawidłowa + Niektóre powiadomienia Mi Push mogą nie być obsługiwane. + Pozycja otworu ekranu + Niestandardowy format zegara + Format zegara + Wył + Środek + Lewo / Prawo + Szablon + Maniak + Zapobiegaj zabijaniu aplikacji w tle + Może powodować zwiększone zużycie energii i jest zalecane do stosowania z opcją \"Spraw, by Millet był bardziej agresywny\", a nie z modułami takimi jak Tombstone + Spraw, by Millet był bardziej agresywny + Zezwala Milletowi na zamrożenie aplikacji, gdy aplikacje w tle mają powiadomienia, uruchomione usługi i procesy.\nAplikacje, które nie chcą być zamrożone, mogą ustawić opcję oszczędzania baterii na \"Bez ograniczeń\"\nProsimy o odinstalowanie modułów związanych z Tombstone i NoAMR przed włączeniem. + Zezwól Milletowi na zamrożenie aktywnych aplikacji + Bardzo agresywny, może wpływać na działanie aplikacji + Instalator pakietów + Wyłącz sprawdzanie licznika instalacji aplikacji + Duża ikona typu sieci tylko dla aktywnej karty SIM + Pozycja dużej ikony typu sieci + Zmodyfikuj animację oznaczania kart + Zmodyfikuj efekt animacji karty usunięcia ostatniego zadania + Wyłącz przyciemnianie tapety + Spowoduje to wyłączenie efektu polegającego na tym, że tapeta stopniowo rozjaśnia się od przyciemnienia podczas wchodzenia i wychodzenia z ostatnich zadań + Przewiń nazwę aplikacji + Zbyt długa nazwa aplikacji zostanie przewinięta i wyświetlona bez nowego wiersza + Dodaj widżet \"Menu skrótów\" + Naciśnij i przytrzymaj ikonę na ekranie głównym, aby dodać okno szybkiego otwierania + Małe okno + Kliknij, aby wyświetlić przypadki użycia + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml new file mode 100644 index 00000000..7739aef3 --- /dev/null +++ b/app/src/main/res/values-pt/strings.xml @@ -0,0 +1,11 @@ + + + Desempenho + Bloqueie o limite superior da taxa de atualização atual + ‘Interface’ + Remover exibição sobre notificação + Remover a notificação \"este aplicativo é exibido sobre outros aplicativos\" + Outros + Permitir captura de ecrã + + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml new file mode 100644 index 00000000..e8195f11 --- /dev/null +++ b/app/src/main/res/values-ro/strings.xml @@ -0,0 +1,226 @@ + + + Performanță + Blochează limita superioară a ratei de împrospătare curentă + Interfață + Elimină notificarea Afișare peste + Elimină notificarea \"Această aplicație se afișează peste alte aplicații\" + Altele + Permite captură de ecran + Permite captură de ecran în aplicațiile care nu permit\nAcceptă adăugarea setărilor rapide în Centrul de control pentru securitate + Acasă + Afișează întotdeauna ceasul pe ecranul de pornire + Repornire interfață utilizator + Repornire sistem + + Pictograme bară de stare + Ascundere pictogramă fără SIM + Ascunde pictograma card SIM 1 + Ascunde pictograma card SIM 2 + Ascunde pictograma VPN + Ascunde pictograma mod Avion + Ascunde pictograma WIFI + Ascunde pictograma Bluetooth + Ascunde pictograma Sonerie și Nu deranja + Ascunde pictograma Alarmă + Ascunde pictograma Hotspot mobil + Ascunde pictograma căștilor + Ascunde pictograma Baterie Bluetooth + Ascunde pictograma NFC + Ascunde pictograma HD mare + Ascunde pictograma HD mic + Ascunde pictograma Fără servicii HD + Despre + Despre modul + Versiune + Autor Coolapk + Repozitoriu sursă deschisă + Sunt bineveniți mai mulți dezvoltatori să participe la dezvoltare + Feedback/Propunere + Clic pentru a vizualiza problemele pe GitHub + Bară de stare + Afișare secunde + Reîmprospătare viteză rețea în secunde + Elimină numărul maxim de pictograme de notificare + Comutatorul principal al modulului + Ascunde pictograma GPS + Ascunde unitățile de viteză a rețelei (/s) + Meniu + Sfaturi + Se omite timpul de avertizare de 5/10 secunde + Elimină restricția la decuparea fotografiilor/capturilor de ecran + Ascunde pictograma secundară WIFI + Ascunde pictograma în lansator + Ascunde % baterie + Ascunde pictograma bateriei + Formatul ceasului în bara de stare + Afișare an + Afișare lună + Afișare dată + Afișare zi + Ascunde spațiul + Permite captură ecran + Blochează limita curentă + Format chinez + Comutator personalizare ceas + Afişare AM/PM + Rândul dublu + Dimensiune ceas (0: nu se modifică) + Dimensiune rând dublu (0: nu se modifică) + Aplicația nu funcționează? + Vizualizează informații legate de modul + Lista de contribuitori a depozitului sursă deschisă + Dezvoltator + Listă de mulțumiri + Declarație Open Source terță parte + Elimină restricțiile + Suportă downgrade/semnătură diferită/fără semnătură + Previne recuperarea excluderii din lista albă a optimizării bateriei + Va fi restabilit după repornirea sistemului + Optimizare baterie + Deschide meniul de optimizare a bateriei ascuns de MIUI + Forțează ferestrele mici + Vino și dă-ne o evaluare de cinci stele + Aceasta ne va ajuta în dezvoltarea proiectului + Alătură-te canalului oficial QQ + Alătură-te canalului oficial TG + Poți intra în grupul de discuții pe pagina canalului + Discuții + Ignoră lista neagră a sistemului și interdicția pentru ferestrele mici + Elimină panoul lateral al ecranului de blocare + Elimină camera de pe ecranul de blocare + Numai temele oficiale implicite sunt acceptate + Setează 100 de puncte în aplicația Securitate + Domeniu + Framework sistem + Interfață sistem + Ecran de pornire + Altele + Schimbă frecvența de reîmprospătare a componentei de viteză a barei de stare la 1 s + Funcția afișare procentaj baterie trebuie activată + Ascunde unitățile (/s) ale componentei de viteză a rețelei din bara de stare + Elimină limita de 3 notificări din bara de stare + Personalizează interfața de sistem, bara de stare, ecranul de blocare etc. + După activarea modulului pentru prima dată sau după actualizare, opțiunile de aici vor intra în vigoare după repornirea sistemului + Aplicația Securitate, Editor galerie, performanță și baterie etc. + Baterie și performanță + Aplicația Securitate + Editor Galerie + Când este activat, ceasul nu va fi ascuns în bara de stare chiar dacă există un widget ceas + Ignoră timpul de așteptare al MIUI atunci când se activează depanarea USB, surse necunoscute și accesibilitatea + Setează punctajul aplicației Securitate la 100 de puncte și blochează butonul Optimizare + Ignoră limita minimă pentru decuparea imaginii + Ascunde pictograma activității WIFI + Ascunde pictograma activității datelor mobile + Ascunde pictograma pentru tipul datelor mobile + Afișare date meteo - Comutator principal + Ecran blocare + Panoul de notificări + Afișează orașul + Acceptă adăugarea setării rapide în Centrul de control pentru comutare în timp real + Centru de Control + Versiunea Mi Smart Hub nu este acceptată în prezent + Se pare că utilizezi o versiune învechită a LSPosed sau LSPosed nu este activ. Actualizează LSPosed sau activează-l și încearcă din nou. + Se recomandă repornirea telefonului după prima activare sau actualizare\nCele mai multe modificări necesită repornire pentru a avea efect - trei puncte din colțul din dreapta sus + Sigur repornești? + Anulare + Sigur repornești interfața utilizatorului? + Ascunde pictograma Încărcare + Ascunde pictograma standard WIFI + Ceas la centru în bara de stare + Mai multe aspecte ale barei de stare sunt în curs de dezvoltare + Aspect bară de stare + Mod compatibilitate + Marginea din stânga (0: Auto) + Marginea din dreapta (0: auto) + Elimină lista neagră a macrocomenzilor jocurilor + Ascunde separatorul vitezei rețelei + Actualizator + *Eliminare validare OTA [LAB] + - Acceptă numai utilizarea seriilor VAB, nu utiliza alte serii.\n- Nu este nevoie de o calificare de testare internă pentru a instala pachetul complet de testare.\n- Cei care au permisiunea de testare internă nu vor putea primi actualizări și pot fi folosiți pentru a bloca actualizările sistemului.\n- După actualizarea tipului de versiuni încrucișate, se recomandă ștergerea datelor.\n- Utilizarea ROM-urilor neoficiale nu este acceptată. + Setări + Arată importanța notificării + Arată setările importanței notificărilor care sunt ascunse în MIUI 12 și versiunile ulterioare + Eliminare anunțuri + Elimină reclamele din managerul de teme + Pagina bateriei afișează temperatura curentă + Activează animația de încărcare Val + Scară maximă imagine de fundal + "Implicit: " + Actual: + Participă în traducere + Ajută-ne să traducem aplicația + Afișare informații despre curent în timpul încărcării + Curent + Elimină fereastra pop-up a aplicației deschise + Elimină mesajul \"Permite XXX să deschidă XXX\" în lanț + Ascunde pictograma volum + Ascunde pictograma ZEN + Ascundere pictograme + Apăsare dublă pentru a opri ecranul + Atinge de două ori spațiul gol pentru a opri ecranul + Panoul vechi al setărilor rapide + Rânduri și coloane personalizate + Coloane (Restrâns) + Rânduri + Coloane + Rânduri (orizontal) + Viteză rețea în linie dublă + Afișare viteză rețea în sus și în jos + Viteza rețelei în bara de stare + Dimensiune rând dublu (0: nu se modifică) + Pictogramă rând dublu + Nimic + Aliniere rândul dublu + Stânga + Dreapta + Pictogramă mare pentru tipul datelor mobile + Afișare Standard Wifi + Cele mai multe notificări pot fi glisate în fereastră mică + Dimensiune font procentaj baterie + 0: nu se modifică + Dimensiune pictogramă tip mobil mare + Pictogramă tip mobil mare îngroșată + Poziție pictogramă mare tip date mobile sus/jos + Eroare de intrare + Interval: + Pictogramă mare tip date mobil, marginile din stânga și din dreapta + Proiectare + Forțează trimiterea tuturor aplicațiilor către alt dispozitiv + Aliniere rândului dublu la centru + Implicit + Ceas la centru + Ceas la dreapta + Aspect bară de stare + Ceas la centru și pictograme în stânga + Numărul maxim de pictograme de notificare + Numărul maxim de puncte de notificare + Text personalizat tip date mobile + Comutator text personalizat tip date mobile + Permite downgrade + Permite retrogradarea aplicațiilor. + Dezactivare verificare digest + Permite instalarea aplicațiilor după modificarea fișierului în apk (ignorați eroarea de rezumat nevalidă). + Dezactivează compararea semnăturilor + Permite reinstalarea aplicației cu semnături diferite. + Utilizează semnăturile instalate + Se folosesc întotdeauna semnături din aplicațiile deja instalate.\nAcest lucru este extrem de periculos.\nActiveză numai dacă este cu adevărat necesar! + Mod îmbunătățit + Trece o anumită validare în aplicație + Afișaj spate (11Ultra) + Afișare secunde ceas + Sunet + Trepte volum media + Permite atingeri nesigure + Intră în vigoare după repornire + Activarea poate provoca înghețarea derulării barei de volum sau volumul Bluetooth să fie anormal + Este posibil ca unele notificări prin Mi Push să nu fie acceptate. + Locație gaură ecran + Mod ceas personalizat + Format ceas + Oprit + La centru + Stânga sau dreapta + Presetare + Tocilar + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml new file mode 100644 index 00000000..d7a360ba --- /dev/null +++ b/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,252 @@ + + + Производительность + Зафиксировать текущую частоту обновления + Интерфейс + Удалить уведомление наложения + Удалить уведомление \"Это приложение отображается поверх других приложений\" + Другое + Разрешить скриншот + Разрешить скриншот в приложениях, которые имеют ограничение на снятие скриншота + Домашний экран + Всегда отображать часы в строке состояния + Перезагрузка SystemUI + Полная перезагрузка + + Иконки в строке состояния + Скрыть нет сим + Скрыть сим 1 + Скрыть сим 2 + Скрыть vpn + Скрыть режим полета + Скрыть wifi + Скрыть блютуз + Скрыть без звука и не беспокоить + Скрыть будильник + Скрыть точку доступа + Скрыть гарнитуру + Скрыть батарею блютуз устройства + Скрыть иконку NFC + Скрыть большую иконку HD + Скрыть маленькую иконку HD + Скрыть новую иконку HD + Скрыть HD No Service + Информация + О модуле + Версия + Автор Coolapk + Исходный код + Приглашаем больше разработчиков принять участие в разработке + Обратная связь + Нажмите, чтобы просмотреть обсуждение на GitHub + Строка состояния + Секунды + Обновление скорости сети в секундах + Максимальное количество значков уведомлений + Вкл/Выкл модуль + Скрыть GPS + Скрыть единицы измерения скорости сети + Варианты перезагрузки + Подсказка + Пропустить 5/10 секундное уведомление + Снять ограничение на обрезку изображений/скриншотов + Скрыть вторичный wifi + Скрыть иконку с рабочего стола + Скрыть проценты батареи + Скрыть батарею + Формат часов строки состояния + Год + Месяц + Дата + День + Скрыть пробел + Разрешить скриншот + Заблокировать текущий предел + Китайский формат + Пользовательские настройки часов + AM/PM + Время в 2 строки + Размер часов (0: не изменять) + Размер часов в 2 строки (0: не изменять) + Функция не работает? + ОК + Просмотр информации + Список участников + Разработчик + Список благодарностей + Официальный репозиторий + Снять ограничения + Поддержка понижения версии/переподписи/неподписанной установки + Предотвратить восстановление белого списка оптимизации батареи + Будет восстановленно после перезагрузки системы + Оптимизация батареи + Открывает меню оптимизации заряда батареи + Принудительное создание плавающих окон + Перейти и оставить отзыв + Это поможет в развитии проэкта + Присоединяйтесь к официальному каналу QQ + Присоединяйтесь к официальному каналу в Telegram + Вы можете войти в чат на странице канала + Контакты + Игнорировать системный запрет на создание плавающих окон + Убирает боковую панель экрана блокировки + Удаляет функцию камеры с экрана блокировки + Поддерживаются только официальные темы + Оптимизация безопасности + Основное + Системный фреймворк + SystemUI + Начальный экран + Другое + Изменяет частоту обновления скорости сети в строке состояния на 1 с + Функция отображения процента заряда батареи должна быть включена + Скрыть единицы измерения скорости сети в строке состояния + Убирает ограничение в 3 иконки уведомлений в строке состояния + Настройте системный интерфейс, строку состояния, экран блокировки и т.д. + После первой установки или обновления модуля, данные функции вступят в силу после перезагрузки + Безопасность, редактор галереи, батарея, производительность и т.д. + Батарея и производительность + Безопасность + Редактор галереи + При включении часы не будут скрыты в строке состояния, даже если есть виджет часов + Отключает время ожидания при отладке по USB, установке из неизвестных источников + Устанавливает оценку в приложении безопасности на 100 баллов и блокирует кнопку Оптимизации + Игнорирует минимальное ограничение на обрезку изображения + Скрыть стрелки wifi + Скрыть стрелки сети + Скрыть тип сети + Показывать погоду + Экран блокировки + Панель уведомлений + Показывать город + Поддержка добавления быстрой настройки выпадающего центра управления для переключения в режиме реального времени + Центр Управления + ЦУ в стиле MIUI 13 в настоящее время не поддерживается + Похоже, вы используете устаревшую версию LSPosed или LSPosed не активен. Пожалуйста, обновите LSPosed или активируйте его и повторите попытку. + Рекомендуется перезагрузить телефон после первой активации или обновления.Большинство изменений требуют перезапуска. Используйте 3 точки в правом верхнем углу + Перезагрузить устройство? + Отмена + Перезагрузить интерфейс? + Скрыть зарядку + Скрыть стандарт wifi + Часы по центру строки состояния + В настоящее время разрабатываются дополнительные стили строки состояния + Стиль строки состояния + Режим совместимости + Отступ слева (0: Авто) + Отступ справа (0: Автоматически) + Удалить черный список игровых макросов + Скрыть разделитель скорости сети + OTA + *Удалить OTA-проверку [БЭТА] + - Поддерживайте только использование серии VAB, пожалуйста, не используйте другие серии. +- Нет необходимости в статусе внутреннего тестирования для включения в программу внутреннего тестирования. +- Те, у кого есть разрешение на внутреннее тестирование, не смогут получать обновления для внутреннего тестирования и могут использоваться для блокировки системных обновлений. +- После обновления типа кросс-версии рекомендуется очистить данные. +- Неофициальные прошивки не поддерживаются. + Настройки + Показывать важные уведомления + Показывать настройки важных уведомлений, которые скрыты в MIUI 12 и более поздних версиях + Удалить рекламу + Удалить рекламу из менеджера тем + Показывает текущую температуру АКБ + Анимация зарядки волна + Максимальный масштаб обоев + "Ум: " + Тек: + Участвуйте в переводе + Помогите нам перевести приложение на ваш язык + Показывать ток при зарядке на экране блокировки + Текущее + Удалить всплывающее окно открытия приложения + Удалить уведомление цепного запуска + Скрыть иконку без звука + Скрыть иконку не беспокоить + Скрытие иконок строки состояния + Двойное нажатие для отключения экрана + Дважды коснитесь экрана для блокировки устройства + Настройки старой шторки + Настраиваемые строки и столбцы + Столбцы (нерасширенные) + Строки + Столбцы + Строки (горизонтальные) + Скорость сети в 2 строки + Смещение скорости сети по вертикали + Скорость сети в строке состояния + Размер скорости сети в 2 строки (0: не изменять) + Иконка двойной скорости сети + Нет + Выравнивание скорости сети в 2 ряда + Влево + Вправо + Большая иконка типа сети + Показывать стандарт Wifi + Сделать так, чтобы все уведомления можно было сдвинуть в всплывающее окно + Размер шрифта процентов заряда батареи + 0: не изменять + Размер большого значка типа сети + Жирный шрифт большого значка типа сети + Регулировка по высоте типа сети + Ошибка ввода + Диапазон: + Положение типа сети по горизонтали + Трансляция + Принудительно открывать все приложения на другом устройстве + Выравнивание по центру двойной строки + Ум + Часы по центру + Часы справа + Стиль строки состояния + Часы по центру и иконки слева + Максимальное количество значков уведомлений + Максимальное количество значков уведомлений + Пользовательский текст типа сети + Переключатель текста типа сети + Разрешить понижение + Разрешить понижение версий приложений. + Отключить дайджест проверки + Позволяет устанавливать приложения после изменения apk. (игнорирует ошибку дайджеста). + Отключить сравнение подписи + Разрешить повторную установку приложения с изменённой подписью. + Использование установленных подписей + Всегда использовать подписи из уже установленных приложений при установке.\nЭто чрезвычайно опасно.\nВключайте только при необходимости! + Улучшенный режим + Пройдите проверку в приложении + Индикация задней части (11Ultra) + Часы отображают секунды + Звук + Шаги громкости + Разрешить нежелательные прикосновения + Вступит в силу после перезагрузки + Включение может привести к ненормальной прокрутке строки громкости + Некоторые уведомления через Mi Push могут не поддерживаться. + Расположение выреза на экране + Пользовательский режим часов + Формат часов + Выкл. + Центр + Влево/Вправо + Шаблон + Продвинутый + Предотвращение отключения фоновых приложений + Может привести к увеличению энергопотребления + Сделать Millet более агрессивным + Позволяет Millet замораживать приложения, когда фоновые приложения имеют уведомления, запущенные службы и запущенные процессы. + Разрешить Millet замораживать активные приложения + Очень агрессивно и может повлиять на работу приложений + Установщик пакетов + Отключить проверку количества установок + Большая иконка типа сети только для активной сим + Положение большой иконки типа сети + Изменение анимации обозначения карты + Изменить эффект анимации последней карты удаления задачи + Отключить затемнение обоев + Отключит эффект видимости обоев от затемнения при запуске и выходе из недавней задачи + Бегущая строка имени приложений + Длинное имя приложения будет прокручено и отображено в одну строку + Меню добавления окна + Нажмите и удерживайте иконку рабочего стола, чтобы добавить быстрое открытое окно + Маленькое окно + Нажмите, чтобы просмотреть варианты использования + diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-sr/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-sv/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml new file mode 100644 index 00000000..6c6cb39e --- /dev/null +++ b/app/src/main/res/values-th/strings.xml @@ -0,0 +1,8 @@ + + + ประสิทธิภาพ + ล็อคค่า FPS สูงสุด + การแสดงผล + ลบการแสดงผล บนแถบการแจ้งเตือน + + diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml new file mode 100644 index 00000000..e840925a --- /dev/null +++ b/app/src/main/res/values-tr/strings.xml @@ -0,0 +1,219 @@ + + + Performans + Geçerli yenileme hızı üst sınırını kilitle + Arayüz + Bildirim üzerinden ekranı kaldır + \"Bu uygulama diğer uygulamaların üzerinde görüntüleniyor\" bildirimini kaldırın + Diğer + Ekran görüntüsüne izin ver + Güvenlik için Kontrol merkezinde açılır hızlı ayar eklemeye izin vermeyen yazılımda ekran görüntüsüne izin ver + Ev + Her zaman Ana ekran saatini göster + Cihazı yeniden başlat + Sistemi Yeniden Başlat + + Durum çubuğu simgeleri + SIM yok simgesini gizle + SIM Kart 1 simgesini gizle + SIM Kart 2 simgesini gizle + VPN simgesini gizle + Uçak modu simgesini gizle + WIFI simgesini gizle + Bluetooth simgesini gizle + Sesi Gizle ve Rahatsız Etmeyin simgesi + Alarm simgesini gizle + Taşınabilir erişim noktası simgesini gizle + Kulaklık simgesini gizle + Bluetooth pil simgesini gizle + NFC simgesini gizle + Büyük HD simgesini gizle + Küçük HD simgesini gizle + HD Hizmet Yok simgesini gizle + + Hakkında + Modül Hakkında + Sürüm + Yazar Coolapk + Açık Kaynak Deposu + Geliştirmeye katılmak için daha fazla geliştiriciye hoş geldiniz + Geribildirim/Teklif + GitHub Sorunlarını görüntülemek için tıklayın + Durum çubuğu + Saniye göster + Saniyeler içinde ağ hızı yenileme + Maksimum bildirim simgesi sayısını kaldırın + Modül ana şalteri + GPS simgesini gizle + Ağ hızı (/s) birimlerini gizle + Menü + İpuçları + 5/10 saniye uyarı süresini atla + Resimleri/ekran görüntülerini kırpma kısıtlamasını kaldırın + WIFI ikincil simgesini gizle + Başlatıcı simgesini gizle + Pili yüzdesini gizle (%) + Pil simgesini gizle + Durum çubuğu saat biçimi + Yılı göster + Ayı göster + Tarihi göster + Günü göster + Alanı gizle + Ekran görüntüsüne izin ver + Akım sınırını kilitle + Çince on iki saat göster + Özel Saat Anahtarı + AM/PM\'yi göster + Çift sıra + Saat boyutu (0: değişmez) + Çift sıra boyutu (0: değişmez) + Özellik çalışmıyor mu? + Tamam + Modülle ilgili bilgileri görüntüleyin + Açık kaynak deposu katkıda bulunan listesi + Geliştirici + Teşekkürler listesi + Üçüncü Taraf Açık Kaynak Bildirimi + Kısıtlamaları kaldır + Sürüm düşürme/farklı imza/imzasız yükleme desteği + Pil optimizasyonu beyaz listesinin kurtarılmasını engelle + Sistem yeniden başlatıldıktan sonra geri yüklenecek + Pil optimizasyonu + MIUI tarafından gizlenen pil optimizasyon menüsünü hızla açın + Küçük pencereleri zorla + Gelin ve bize beş yıldızlı bir inceleme yapın + Bu bizi daha keşfedilebilir yapabilir + Resmi QQ kanalına katılın + Resmi Telegram kanalına katılın + Sohbet grubuna kanal sayfasından girebilirsiniz. + Tartışmalar + Küçük pencerelerin sistem kara listesini ve yazılım yasağını yoksay + Kilit ekranı yan panelini çıkarın + Kilit ekranı kamera özelliğini kaldırın + Yalnızca resmi varsayılan temalar desteklenir + Güvenlik uygulamasında 100 puan belirleyin + Kapsam + Sistem Çerçevesi + Sistem Kullanıcı Arayüzü + Ana ekran + Diğerleri + Durum çubuğu ağ hızı bileşeninin yenileme sıklığını 1s olarak değiştirin + Pil yüzdesi görüntüleme özelliği kendiniz açılmalıdır + Durum çubuğu ağ hızı bileşeninin (/s) birimlerini gizleyin + Durum çubuğundaki 3 bildirim sınırını kaldırın + Sistem arayüzünü, durum çubuğunu, kilit ekranını vb. özelleştirin. + Modül ilk kez etkinleştirildikten veya modül güncellendikten sonra, sistem yeniden başlatıldıktan sonra buradaki özellik geçerli olacaktır. + Güvenlik uygulaması, Galeri düzenleyici, Pil ve performans vb. + Pil ve performans + Güvenlik uygulaması + Galeri Editörü + Açıldığında, bir saat widget\'ı olsa bile saat durum çubuğunda gizlenmez + USB hata ayıklamasını, bilinmeyen kaynakları ve erişilebilirliği etkinleştirirken MIUI tarafından bekleme süresini yok sayın + Güvenlik uygulamasındaki puanı 100 puana ayarlayın ve Optimize Et düğmesini engelleyin + MIUI tarafından görüntü kırpmayla ilgili minimum sınırı yoksay + WIFI etkinlik simgesini gizle + Mobil etkinlik simgesini gizle + Mobil tür simgesini gizle + Hava Durumunu Göster - Ana Anahtar + Kilit ekranı + Bildirim Merkezi + Şehri göster + Gerçek zamanlı geçiş için açılır kontrol merkezi hızlı ayarı ekleme desteği + Kontrol Merkezi + Mi Smart Hub sürümü şu anda desteklenmiyor + Görünüşe göre eski bir LSPosed sürümü kullanıyorsunuz veya LSPosed aktif değil, lütfen LSPosed\'i güncelleyin veya etkinleştirin ve tekrar deneyin. + İlk etkinleştirme veya güncellemeden sonra telefonu yeniden başlatmanız önerilir\nDeğişikliklerin çoğunun geçerli olması için sağ üst köşede yeniden başlatma gerekir + Yeniden başlattığınızdan emin misiniz? + İptal + Tüm kapsamı yeniden başlattığınızdan emin misiniz? + Şarj simgesini gizle + WIFI standart simgesini gizle + Durum çubuğu zaman merkezi + Daha fazla durum çubuğu düzeni geliştirilme aşamasındadır + Durum çubuğu düzeni + Uyumluluk modu + Sol kenar boşluğu (0: Otomatik) + Sağ kenar boşluğu (0: Otomatik) + Oyun makrosu kara listesini kaldır + Ağ hızı ayırıcısını gizle + Güncelleyici + *OTA doğrulamasını [LAB] kaldırın + - Yalnızca VAB serisi kullanımını destekleyin, lütfen diğer serileri açmayın.\n- Tam dahili test paketine geçmek için dahili test yeterliliğine gerek yoktur.\n- Dahili test iznine sahip olanlar dahili test güncellemelerini alamaz , ve sistem güncellemelerini engellemek için kullanılabilir.\n- Sürümler arası tip yükseltmesinden sonra verilerin temizlenmesi önerilir.\n- Resmi olmayan ROM kullanımı desteklenmez. + Ayarlar + Bildirim önemini göster + MIUI 12 ve sonraki sürümlerde gizlenen bildirim önem ayarlarını göster + Reklamları kaldır + Tema yöneticisi için reklamları kaldırın + Pil sayfası mevcut sıcaklığı gösterir + Dalga yükü şarj animasyonu + Maksimum duvar kağıdı ölçeği + "Varsayılan:" + Akım + Çeviriye katılmak + Uygulamayı kendi dilinize çevirmemize yardımcı olun + Şarj sırasında mevcut bilgileri görüntüleyin + Akım + Açık uygulama açılır penceresini kaldır + \"XXX\'in XXX\'i açmasına izin ver\" Zincir başlatma açılır penceresini kaldırın + Ses Düzeyi simgesini gizle + ZEN simgesini gizle + Simgeyi gizle + Uyumak için iki kez dokunun + Uyumak için boş alana iki kez dokunun + Eski hızlı ayarlar paneli + Özel satırlar ve sütunlar + Sütunlar (Genişletilmemiş) + satırlar + sütunlar + Satırlar (yatay) + Çift sıra ağ hızı + Yukarı ve aşağı ağ hızı göstergesi + Durum çubuğu ağ hızı + Çift sıra boyutu (0: değişmez) + Çift satır simgesi + Hiçbiri + Çift sıra hizalama + Sol + Sağ + Büyük mobil ikon tipi + Çoğu bildirimin küçük pencereye kaydırılabilmesini sağlayın + Pil yüzdesi yazı tipi boyutu + 0: değiştirme + Büyük mobil tip simge boyutu + Büyük mobil tip simgesi kalın + Büyük mobil tip simgesi yukarı ve aşağı konumu + Giriş hatası + Menzil: + Büyük mobil tip simgesi sol ve sağ kenar boşlukları + Yayınlama + Tüm uygulama desteğini başka bir cihazda açmaya zorla + Çift sıralı merkez hizalama + Varsayılan + Merkezi saat + Saat Sağ + Durum çubuğu düzeni modu + Saat Merkezi ve Sol Simge + Maksimum bildirim simgesi sayısı + Maksimum bildirim noktası sayısı + Özel mobil tip metin + Özel mobil tip metin anahtarı + Sürüm düşürmeye izin ver + Sürüm düşürme uygulamalarına izin ver. + Özet doğrulamayı devre dışı bırak + Apk\'te dosya değiştirildikten sonra uygulamaların yüklenmesine izin verir (geçersiz özet hatasını yoksay). + Karşılaştırma imzalarını devre dışı bırak + Uygulamayı farklı imzalarla yeniden yüklemeye izin ver + Yüklü imzaları kullan + Yüklerken her zaman önceden yüklenmiş uygulamaların imzalarını kullanın.\nBu son derece tehlikelidir.\nYalnızca gerçekten gerektiğinde etkinleştirin! + Gelişmiş Mod + Uygulamada bazı doğrulamaları geç + Arka Ekran (11Ultra + Saat göstergesi saniye + Ses + Medya ses adımları + Güvenilmeyen dokunuşlara izin ver + Yeniden başlattıktan sonra etkili ol + Açmak, ses seviyesi çubuğunun kaymasının donmasına veya Bluetooth ses seviyesinin anormal olmasına neden olabilir. + Mi Push aracılığıyla yapılan bazı bildirimler desteklenmeyebilir. + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml new file mode 100644 index 00000000..a23c4616 --- /dev/null +++ b/app/src/main/res/values-uk/strings.xml @@ -0,0 +1,4 @@ + + + + diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml new file mode 100644 index 00000000..a3e5c50f --- /dev/null +++ b/app/src/main/res/values-vi/strings.xml @@ -0,0 +1,250 @@ + + + Hiệu năng + Khoá giới hạn trên của tốc độ làm mới hiện tại + Giao diện + Xoá thông báo hiển thị trên ứng dụng khác + Xoá thông báo \"Ứng dụng này đang hiển thị trên ứng dụng khác\" + Khác + Cho phép chụp màn hình + Cho phép ảnh chụp màn hình trong phần mềm không cho phép để\nHỗ trợ thêm cài đặt nhanh thả xuống trên Trung tâm điều khiển để bảo mật + Trang chủ + Luôn hiển thị đồng hồ trên màn hình khoá + Khởi động lại ứng dụng liên quan + Khởi động lại hệ thống + + Biểu tượng thanh trạng thái + Ẩn biểu tượng không SIM + Ẩn biểu tượng thẻ SIM 1 + Ẩn biểu tượng thẻ SIM 2 + Ẩn biểu tượng VPN + Ẩn biểu tượng chế độ máy bay + Ẩn biểu tượng WIFI + Ẩn biểu tượng Bluetooth + Ẩn biểu tượng am thanh và không làm phiền + Ẩn biểu tượng báo thức + Ẩn biểu tượng điểm phát sóng di động + Ẩn biểu tượng tai nghe + Ẩn biểu tượng pin Bluetooth + Ẩn biểu tượng NFC + Ẩn biểu tượng mạng HD lớn + Ẩn biểu tượng mạng HD nhỏ + Ẩn biểu tượng mạng HD mới + Ẩn biểu tượng không có dịch vụ HD + Giới thiệu + Thông tin module + Phiên bản + Tác giả Coolapk + Kho nguồn mở + Chào mừng các nhà phát triển tham gia vào quá trình phát triển + Phản hồi/Đề xuất + Ấn để xem GitHub Issues + Công cụ tuỳ chỉnh cho MIUI13+(Android 12+) + Thanh trạng thái + Hiển thị giây + Làm mới tốc độ mạng trong vài giây + Gỡ số lượng biểu tượng thông báo tối đa + Công tắc module + Ẩn biểu tượng GPS + Ẩn đơn vị tốc độ mạng (/s) + Menu + Mẹo + Bỏ qua 5/10 giây cảnh báo + Bỏ qua danh sách đen hệ thống và phần mềm cấm cửa sổ nhỏ + Ẩn biểu tượng WIFI thứ hai + Ẩn biểu tượng trình khởi chạy + Ẩn (%) pin + Ẩn biểu tượng pin + Định dạng đồng hồ thanh trạng thái + Hiển thị năm + Hiển thị tháng + Hiện thị ngày + Hiển thị ngày + Ẩn khoảng cách + Cho phép chụp màn hình + Khoá giới hạn hiện tại + Hiển thị giờ con giáp - tiếng trung + Công tắc đồng hồ tuỳ chỉnh + Hiển thị SA/CH + Hàng kép + Kích cỡ đồng hồ (0: không đổi) + Kích cỡ hàng kép (0: không đổi) + Tính năng không hoạt động? + Đồng ý + Xem thông tin liên quan tới mô-đun + Danh sánh người đóng góp kho nguồn mở + Nhà phát triển + Danh sách cảm ơn + Tuyên bố về Mã nguồn mở của bên thứ ba + Gỡ bỏ các hạn chế + Hỗ trợ hạ cấp/chữ ký khác/cài đặt ứng dụng không chữ kí + Danh sách ngoại lệ ngăn chặn sự khôi phục của tối ưu hoá pin + Nó sẽ được khôi phục sau khi khởi động lại hệ thống + Tối ưu hóa pin + Mở nhanh trình đơn tối ưu hóa pin bị ẩn bởi MIUI + Buộc tất cả ứng dụng đều mở cửa sổ nhỏ + Tới và đánh giá chúng tôi 5 sao + Điều này có thể giúp chúng tôi dễ được biết tới hơn + Tham gia kênh QQ chính thức + Tham gia kênh TG chính thức + Bạn có thể vào nhóm trò chuyện trên kênh + Thảo luận + Bỏ qua danh sách đen hệ thống và phần mềm cấm cửa sổ nhỏ + Xóa bảng điều khiển bên màn hình khoá + Gỡ chức năng camera khỏi màn hình khoá + Chỉ hỗ trợ những chủ đề mặc định chính thức + Đặt 100 điểm cho ứng dụng bảo mật + Ứng dụng + Framework hệ thống + Giao diện hệ thống + Màn hình chính + Khác + Thay đổi tần số làm mới của tốc độ mạng trên thanh trạng thái thành 1 giây + Bạn phải tự bật tính năng hiển thị phần trăm pin + Ẩn đơn vị (/s) của tốc độ mạng trên thanh trạng thái + Gỡ giới hạn 3 thông báo trên thanh trạng thái + Tuỳ chỉnh giao diện hệ thống, thanh trạng thái, màn hình khoá, v.v. + Sau khi bật mô-đun lần đầu tiên hoặc cập nhật, tính năng ở đây sẽ có hiệu lực sau khi khởi động lại hệ thống + Ứng dụng bảo mật, chỉnh sửa thư viện, pin và hiệu năng, v.v. + Pin và hiệu năng + Ứng dụng bảo mật + Chỉnh sửa thư viện + Khi được bật, đồng hồ sẽ không bị ẩn trên thanh trạng thái ngay cả khi có widget đồng hồ + Bỏ qua thời gian chờ do MIUI khi kích hoạt gỡ lỗi USB, nguồn gốc không xác định và trợ năng + Đặt 100 điểm cho ứng dụng bảo mật và chặn nút tối ưu hóa + Bỏ qua giới hạn tối thiểu khi cắt ảnh bởi MIUI + Ẩn biểu tượng hoạt động WIFI + Ẩn biểu tượng hoạt động đi động + Ẩn biểu tượng kiểu dữ liệu di động + Hiện thời tiết - Công tắc chính + Màn hình khoá + Trung tâm thông báo + Hiện thành phố + Hỗ trợ thêm công tắc chuyển đổi cài đặt nhanh trung tâm điều khiển thả xuống thời gian thực + Trung tâm điều khiển + Phiên bản Mi Smart Hub hiện không được hỗ trợ + Có vẻ bạn đang dùng LSPosed bản cũ hoặc LSPosed chưa được kích hoạt, vui lòng cập nhật hoặc kích hoạt LSPosed rồi thử lại. + Nên khởi động lại điện thoại sau lần kích hoạt hoặc cập nhật đầu tiên\nHầu hết các thay đổi yêu cầu khởi động lại ở góc trên cùng bên phải để có hiệu lực + Bạn chắc chắn muốn khởi động lại? + Hủy + Bạn có muốn khởi động lại tất cả ứng dụng liên quan? + Ẩn biểu tượng sạc + Ẩn biểu tượng WIFI tiêu chuẩn + Thời gian hiển thị ở chính giữa thanh trạng thái + Nhiều bố cục thanh trạng thái khác đang được phát triển + Bố cục thanh trạng thái + Chế độ tương thích + Lề trái (0: Tự động) + Lề phải (0: Tự động) + Bắt buộc bố cục toàn màn hình (hỗ trợ tất cả các màn hình có hình dạng đặc biệt) + Xóa danh sách đen macro trò chơi + Ẩn bộ chia tốc độ mạng + Trình cập nhật + *Gỡ xác thực OTA [LAB] + - Chỉ hỗ trợ sử dụng sê-ri VAB, vui lòng không mở sê-ri khác.\n- Không cần đủ điều kiện thử nghiệm nội bộ để sử dụng gói thử nghiệm nội bộ đầy đủ.\n- Những người có quyền thử nghiệm nội bộ sẽ không thể nhận được bản cập nhật thử nghiệm nội bộ và có thể được sử dụng để chặn cập nhật hệ thống.\n- Sau khi nâng cấp loại phiên bản chéo, bạn nên xóa dữ liệu.\n- Không hỗ trợ sử dụng ROM không chính thức. + Cài đặt + Hiện thông báo quan trọng + Hiển thị cài đặt mức độ quan trọng của thông báo bị ẩn trong MIUI 12 và các phiên bản mới hơn + Gỡ quảng cáo + Gỡ bỏ quảng cáo cho trình quản lí chủ đề + Trang pin hiển thị nhiệt độ hiện tại + Bật hoạt ảnh dạng sóng khi sạc + Tỉ lệ hình nền tối đa + "Mặc định: " + Hiện tại: + Tham gia dịch + Giúp chúng tôi dịch ứng dụng sang ngôn ngữ của bạn + Hiển thị thông tin hiện tại trong khi sạc + Hiện tại + Xóa cửa sổ bật lên ứng dụng đang mở + Gỡ bỏ cửa sổ nổi \"Cho phép XXX mở XXX\" + Ẩn biểu tượng âm lượng + Ẩn biểu tượng ZEN + Ẩn biểu tượng + Chạm hai lần để tắt màn hình + Chạm hai lần vào vùng trống để tắt màn hình + Bảng cài đặt nhanh cũ + Tùy chỉnh các hàng và cột + Các cột (Không mở rộng) + Hàng + Cột + Hàng (ngang) + Tốc độ mạng hàng kép + Hiển thị tốc độ mạng tải lên và tải xuống + Tốc độ mạng trên thanh trạng thái + Kích thước hàng kép (0: không thay đổi) + Biểu tượng hàng kép + Không + Căn chỉnh hàng kép + Trái + Phải + Biểu tượng mạng dữ liệu lớn + Hiển thị tiêu chuẩn Wifi + Làm cho hầu hết các thông báo có thể được trượt thành cửa sổ nhỏ + Kích thước phông chữ phần trăm pin + 0: không thay đổi + Kích thước biểu tượng mạng dữ liệu lớn + Bôi đậm biểu tượng mạng dữ liệu lớn + Vị trí mũi tên của biểu tượng mạng dữ liệu di động lớn + Nhập lỗi + Phạm vi: + Căn lề biểu tượng mạng dữ liệu lớn + Truyền + Ép tất cả ứng dụng hỗ trợ mở trên thiết bị khác + Căn giữa hàng kép + Mặc định + Đồng hồ trung tâm + Đồng hồ bên phải + Chế độ bố cục thanh trạng thái + Đồng hồ ở giữa và biểu tượng bên trái + Số lượng biểu tượng thông báo tối đa + Số lượng chấm thông báo tối đa + Tùy biến kiểu chữ loại di động + Chuyển đổi kiểu chữ loại di động tùy chỉnh + Chấp nhận hạ cấp + Chấp nhận hạ cấp ứng dụng. + Tắt xác minh thông báo + Chấp nhận cài đặt ứng dụng sau khi chỉnh sửa file apk (bỏ qua lỗi thông báo không hợp lệ). + Tắt so sánh chữ ký + Chấp nhận cài đặt lại ứng dụng với chữ kí xác thực khác. + Sử dụng chữ kí xác thực đã cài đặt + Luôn luôn sử dụng chữ kí từ ứng dụng đã cài đặt trong khi cài đặt.\nĐiều này hết sức nguy hiểm.\nChỉ kích hoạt khi thực sự cần! + Chế độ nâng cao + Vượt qua một số xác thực trong ứng dụng + Hiển thị màn hình lưng (11Ultra) + Hiển thị giây + Âm thanh + Các mức âm lượng + Cho phép chạm không đáng tin cậy + Có hiệu lực sau khi khởi động lại + Bật có thể khiến cuộn thanh âm lượng bị đơ hoặc âm lượng Bluetooth bất thường + Một số thông báo qua Mi Push có thể không được hỗ trợ. + Vị trí lỗ màn hình + Chế độ tùy chỉnh đồng hồ + Định dạng đồng hồ + Tắt + Trung tâm + Trái hoặc phải + Thiết lặp sẵn + Lập dị + Ngăn chặn tắt ứng dụng nền + Có thể làm tăng mức tiêu thụ điện năng, được khuyến nghị với \"Make MIUI tích cực hơn\", KHÔNG được khuyến nghị sử dụng với bia mộ + Làm cho Miui linh hoạt hơn + Cho phép Miui đóng băng ứng dụng trong khi các ứng dụng nền có thông báo, dịch vụ đang chạy và quy trình đang chạy.\nNhững ứng dụng không muốn bị đóng băng có thể đặt Trình tiết kiệm pin thành Không hạn chế\nVui lòng gỡ cài đặt các mô-đun liên quan đến Tombstone và NoANR trước khi bật. + Cho phép Miui đóng băng các ứng dụng đang hoạt động + Rất tích cực và có thể ảnh hưởng đến ứng dụng đang chạy + Trình cài đặt gói + Tắt kiểm tra số lần cài đặt ứng dụng + Mạng dữ liệu lớn chỉ hiển thị thẻ mạng + Vị trí mạng dữ liệu lớn + Sửa đổi hoạt ảnh đánh dấu thẻ + Sửa đổi hiệu ứng hoạt ảnh của thẻ loại bỏ nhiệm vụ gần đây + Tắt làm mờ hình nền + Điều này sẽ vô hiệu hóa hiệu ứng mà hình nền sẽ sáng lên rồi mờ khi vào và ra khỏi tác vụ gần đây + Cuộn tên ứng dụng + Tên ứng dụng quá dài sẽ bị cuộn và hiển thị mà không có dòng mới nào + Menu phím tắt thêm cửa sổ + Nhấn và giữ biểu tượng màn hình chính để thêm cửa sổ mở nhanh + Cửa sổ nhỏ + Nhấp để xem các trường hợp sử dụng + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 00000000..7afa2ee8 --- /dev/null +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,251 @@ + + + 性能 + 锁定当前刷新率上限 + 界面 + 移除上层显示通知 + 移除 \"此应用正显示在屏幕上其他应用的上层\" 通知 + 其他 + 允许截图 + 开启后允许在不允许截图的软件中截图\n支持添加下拉控制中心快速开关,保障安全 + 桌面 + 始终显示桌面时钟 + 重启全部作用域 + 重启系统 + + 状态栏图标 + 隐藏 无SIM卡 图标 + 隐藏 SIM卡一 图标 + 隐藏 SIM卡二 图标 + 隐藏 VPN 图标 + 隐藏 飞行模式 图标 + 隐藏 WIFI 图标 + 隐藏 蓝牙 图标 + 隐藏 声音、勿扰 图标 + 隐藏 闹钟 图标 + 隐藏 WIFI热点 图标 + 隐藏 耳机 图标 + 隐藏 蓝牙电量 图标 + 隐藏 NFC 图标 + 隐藏 大HD 图标 + 隐藏 小HD 图标 + 隐藏 新HD 图标 + 隐藏 HD无服务 图标 + 关于 + 关于模块 + 版本 + 开发者酷安 + 开源仓库 + 欢迎更多开发者共同参与开发 + 反馈/提议 + 点击查看GitHub Issues + 基于 MIUI13+(Android 12+) 适配的自定义工具 + 状态栏 + 显示秒数 + 网速秒刷新 + 解除通知图标个数上限 + 模块总开关 + 隐藏 GPS 图标 + 隐藏网速(/s)单位 + 菜单 + 提示 + 跳过 5/10 秒警告时间 + 移除裁剪图片/屏幕截图的限制 + 隐藏 WIFI辅助 图标 + 隐藏桌面图标 + 隐藏电量(%) + 隐藏 电池 图标 + 状态栏时钟格式 + 显示年份 + 显示月份 + 显示日期 + 显示星期 + 隐藏间隔 + 允许截图 + 锁定当前上限 + 显示时辰 + 自定义时钟-总开关 + 显示时段 + 双排显示 + 时钟大小(0:不更改) + 双排大小(0:不更改) + 功能无法生效? + 确定 + 查看模块相关信息 + 开源仓库贡献者名单 + 开发者 + 感谢名单 + 第三方开源声明 + 解除安装限制 + 支持降级/不同签名/无签名安装 + 防止恢复电池优化白名单 + 系统重启后仍会还原 + 电池优化 + 快速打开被MIUI隐藏的电池优化功能 + 强制使用小窗 + 来酷安给我们五星好评 + 这可以使我们被更多的人发现 + 加入 官方QQ频道 + 加入 官方TG频道 + 可在频道资料页进入交流群 + 讨论 + 忽略系统黑名单与软件禁止小窗 + 移除锁屏负一屏功能 + 移除锁屏相机功能 + 仅支持官方默认主题 + 手机管家锁定100分 + 作用域 + 系统框架 + 系统界面 + 系统桌面 + 其他 + 将状态栏网速组件的刷新频率改成1s + 需自行开启电池百分比外显功能 + 隐藏状态栏网速组件的(/s)单位 + 解除状态栏最多只能显示3个通知的限制 + 自定义系统界面、状态栏、锁屏等 + 首次激活模块 或 模块更新后,\n此处的功能需重启系统后才能生效 + 手机管家、相册编辑、电量与性能等 + 电量与性能 + 手机管家 + 相册编辑 + 开启后即使存在时钟小组件,\n也不会对状态栏隐藏时钟 + 开启后可忽略MIUI在开启USB调试、\n未知来源、无障碍时的冻结时间 + 锁定手机管家100分并屏蔽修复按钮 + 无视MIUI对图片裁切的最小限制 + 隐藏 WIFI箭头 图标 + 隐藏 移动箭头 图标 + 隐藏 移动类型 图标 + 显示天气-总开关 + 锁屏 + 通知中心 + 显示城市 + 支持添加下拉控制中心快速开关,实时切换 + 控制中心 + 暂不支持妙享版控制中心 + 您似乎正在使用过时的 LSPosed 版本或 LSPosed 未激活,请更新 LSPosed 或者激活后再试。 + 首次激活或更新后建议重启手机\n绝大部分功能更改后需要在右上角重启作用域后生效 + 确定重启系统? + 取消 + 确定重启全部作用域? + 隐藏 充电 图标 + 隐藏 WIFI标准 图标 + 时间居中 + 更多状态栏布局等待开发中 + 状态栏布局 + 兼容模式 + 左边距 (0: 自动) + 右边距 (0: 自动) + 强制完整屏布局(支持所有异形屏) + 去除游戏自动连招黑名单 + 隐藏网速分隔符 + 系统更新 + *移除OTA验证 [实验性] + - 仅支持VAB系列使用,其余系列请不要开启。\n- 无需内测试资格即可刷入完整内测包。\n- 拥有内测权限的用户将无法接收内测更新\n可用于屏蔽系统更新。\n- 跨版本类型升级后,建议清空数据。\n- 不支持非官方ROM使用。 + 设置 + 显示通知重要程度 + 显示 MIUI 12 及之后版本被隐藏的通知重要程度设置 + 去广告 + 移除主题壁纸的广告 + 电池页面显示当前温度 + 启用Alpha充电动画 + 壁纸缩放比例 + "默认值:" + 当前值: + 参与翻译 + 帮助我们将应用翻译成您的语言 + 充电时显示当前电流 + 当前电流 + 移除打开应用弹窗 + 移除 \"XXX 想要打开 XXX\" 的弹窗 + 隐藏 音量 图标 + 隐藏 勿扰 图标 + 隐藏图标 + 双击锁定屏幕 + 双击空白位置锁屏 + 旧版快速设置面板 + 自定义行列数 + 列 (未展开) + + + 行 (横向) + 双排网络速度 + 上下行网络速度显示 + 状态栏网络速度 + 双排大小(0:不更改) + 双排图标 + + 双排对齐 + 左边 + 右边 + 大移动类型图标 + 显示 WiFi 标准 + 允许大多数应用通知下拉展开小窗 + 电池百分比字体大小 + 0: 不更改 + 大移动类型图标大小 + 大移动类型图标加粗 + 大移动类型图标上下位置 + 输入错误 + 范围: + 大移动类型图标左右边距 + 投屏 + 强制所有应用支持在另一个设备打开 + 双排居中对齐 + 默认 + 时钟居中 + 时钟居右 + 状态栏布局模式 + 时间居中+左侧图标 + 通知图标最大数量 + 通知点数最大数量 + 自定义移动类型文本 + 自定义移动类型文本开关 + 允许降级安装应用 + 允许应用在安装新版本的情况下直接覆盖安装旧版本 + 禁用软件包管理器签名验证 + 关闭安装应用时的签名验证,可以安装被篡改的应用 + 禁用APK签名验证 + 允许直接覆盖安装同包名不同签名的应用 + 安装时始终使用已装app的签名 + 安装时总是使用已安装应用的签名。\n不是一般的危险\n仅在绝对需要时启用 + 增强模式 + 可以解决一些APP内部的完整性校验,一般不需要开启 + 背屏 (11Ultra) + 时钟显示秒数 + 声音 + 媒体音量阶数 + 允许不受信任的触摸 + 重新启动后生效 + 打开可能会导致音量条的滚动卡顿或蓝牙音量异常。 + 一些通过Mi Push推送的通知可能不受支持 + 屏幕挖孔位置 + 自定义时钟模式 + 时钟格式 + 关闭 + 中间 + 左右 + 预设 + 极客 + 防止杀死后台应用 + 可能造成耗电增加,建议配合“使 Millet 更加激进”食用,不建议配合墓碑、A1内存管理等会强制应用进入缓存的模块使用。 + 使 Millet 更加激进 + 允许 Millet 在后台应用有通知、有服务运行、有进程运行的情况下冻结应用。\n不希望被冻结的应用可将省电策略设置为无限制\n启用前请先卸载墓碑和 NoANR 相关模块。 + 允许 Millet 冻结活跃的应用 + 非常激进,可能会影响应用运行 + 应用包管理组件 + 禁用频繁安装应用检查 + 大移动类型图标只显示上网卡 + 大移动类型图标位置 + 修改划卡动画 + 修改最近任务移除卡片的动画效果 + 禁用壁纸压暗效果 + 这将禁用进出最近任务时壁纸从压暗逐渐变亮的效果 + 滚动显示应用名称 + 过长的应用名称将滚动进行显示,不再进行换行 + 快捷菜单添加小窗 + 桌面图标长按快捷菜单位置添加快速打开小窗 + 小窗 + 点击查看用例 + 禁用临时关闭蓝牙 + diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml new file mode 100644 index 00000000..6fc486aa --- /dev/null +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -0,0 +1,177 @@ + + + 性能 + 鎖定當前刷新率上限 + 界面 + 移除上層顯示通知 + 移除 \"此應用正顯示在螢幕上其他應用的上層\" 通知 + 其他 + 允許截圖 + 開啟後允許在不允許截圖的軟件中截圖\n支持添加下拉控制中心快速開關,保障安全 + 桌面 + 始終顯示桌面時鐘 + 重啟全部作用域 + 重啟系統 + + 狀態欄圖標 + 隱藏 無SIM卡 圖標 + 隱藏 SIM卡一 圖標 + 隱藏 SIM卡二 圖標 + 隱藏 VPN 圖標 + 隱藏 飛行模式 圖標 + 隱藏 WIFI 圖標 + 隱藏 藍牙 圖標 + 隱藏 聲音、勿擾 圖標 + 隱藏 鬧鐘 圖標 + 隱藏 WIFI熱點 圖標 + 隱藏 耳機 圖標 + 隱藏 藍牙電量 圖標 + 隱藏 NFC 圖標 + 隱藏 大HD 圖標 + 隱藏 小HD 圖標 + 隱藏 新HD 圖標 + 隱藏 HD無服務 圖標 + 關於 + 關於模塊 + 版本 + 開發者酷安 + 開源倉庫 + 歡迎更多開發者共同參與開發 + 反饋/提議 + 點擊查看GitHub Issues + 狀態欄 + 顯示秒數 + 網速秒刷新 + 解除通知圖標個數上限 + 模塊總開關 + 隱藏 GPS 圖標 + 隱藏網速(/s)單位 + 菜單 + 提示 + 跳過 5/10 秒警告時間 + 移除裁剪圖片/螢幕截圖的限制 + 隱藏 WIFI輔助 圖標 + 隱藏桌面圖標 + 隱藏電量(%) + 隱藏 電池 圖標 + 狀態欄時鐘格式 + 顯示年份 + 顯示月份 + 顯示日期 + 顯示星期 + 隱藏間隔 + 允許截圖 + 鎖定當前上限 + 顯示時辰 + 自定義時鐘-總開關 + 顯示時段 + 雙行顯示 + 時鐘大小(0:不更改) + 雙排大小(0:不更改) + 功能無法生效? + 確定 + 查看模塊相關訊息 + 開源倉庫貢獻者名單 + 開發者 + 感謝名單 + 第三方開源聲明 + 解除安裝限制 + 支持降級/不同簽名/無簽名安裝 + 防止恢復電池優化白名單 + 系統重啟後仍會還原 + 電池優化 + 快速打開被MIUI隱藏的電池優化功能 + 強制使用小窗 + 來酷安給我們五星好評 + 這可以使我們被更多的人發現 + 加入 官方QQ頻道 + 加入 官方TG頻道 + 可在頻道資料頁進入交流群 + 討論 + 忽略系統黑名單與軟件禁止小窗 + 移除鎖定螢幕負一屏功能 + 移除鎖定螢幕相機功能 + 僅支持官方默認主題 + 手機管家鎖定100分 + 作用域 + 系統框架 + 系統界面 + 系統桌面 + 其他 + 將狀態欄網速組件的刷新頻率改成1s + 需自行開啟電池百分比外顯功能 + 隱藏狀態欄網速組件的(/s)單位 + 解除狀態欄最多只能顯示3個通知的限制 + 自定義系統界面、狀態欄、鎖定螢幕等 + 首次啟動模塊 或 模塊更新後,\n此處的功能需重啟系統後才能生效 + 手機管家、相冊編輯、電量與性能等 + 電量與性能 + 手機管家 + 相冊編輯 + 開啟後即使存在時鐘小組件,\n也不會對狀態欄隱藏時鐘 + 開啟後可忽略MIUI在開啟USB調試、\n未知來源、無障礙時的凍結時間 + 鎖定手機管家100分並屏蔽修復按鈕 + 無視MIUI對圖片裁切的最小限制 + 隱藏 WIFI箭頭 圖標 + 隱藏 移動箭頭 圖標 + 隱藏 移動類型 圖標 + 顯示天氣-總開關 + 鎖定螢幕 + 通知中心 + 顯示城市 + 支持添加下拉控制中心快速開關,實時切換 + 控制中心 + 暫不支持妙享版控制中心 + 您似乎正在使用過時的 LSPosed 版本或 LSPosed 未啟動,請更新 LSPosed 或者啟動後再試。 + 首次啟動或更新後建議重啟手機\n絕大部分功能更改後需要在右上角重啟作用域後生效 + 確定重啟系統? + 取消 + 確定重啟全部作用域? + 隱藏 充電 圖標 + 隱藏 WIFI標準 圖標 + 時間居中 + 更多狀態欄佈局等待開發中 + 狀態欄佈局 + 兼容模式 + 左邊距 (0: 自動) + 右邊距 (0: 自動) + 去除遊戲自動連招黑名單 + 隱藏網速分隔符 + 系統更新 + *移除OTA驗證 [實驗性] + - 僅支持VAB系列使用,其餘系列請不要開啟。\n- 無需內測試資格即可刷入完整內測包。\n- 擁有內測權限的用戶將無法接收內測更新\n可用於屏蔽系統更新。\n- 跨版本類型升級後,建議清空數據。\n- 不支持非官方ROM使用。 + 設定 + 顯示通知重要程度 + 顯示 MIUI 12 及之後版本被隱藏的通知重要程度設定 + 去廣告 + 拿掉主題壁紙的廣告 + 電池頁面展示當前溫度 + 啟用Alpha充電動畫 + 壁紙縮放比例 + "默認值:" + 當前值: + 參與翻譯 + 幫助我們將這個APP翻譯成您的語言 + 充電時顯示當前電流 + 當前電流 + 移除打開應用彈窗 + 移除 \"XXX 想要打開 XXX\" 的彈窗 。 + 隱藏 音量 圖標 + 隱藏 勿擾 圖標 + 隱藏圖標 + 雙擊鎖定螢幕 + 雙擊空白處鎖定螢幕 + 舊版快速設定面板 + 自定義行列數 + 列 (未展開) + + + 列 (橫屏) + 雙排網路速度 + 上下行網路速度顯示 + 狀態列網路速度 + 雙排大小(0:不更改) + 雙排圖標 + 應用包管理組件 + 禁用頻繁安裝應用檢查 + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 00000000..cbfede62 --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,250 @@ + + + 性能 + 鎖定目前重新整理速率上限 + 介面 + 移除上層顯示通知 + 移除「此應用程式正顯示在螢幕上其他應用程式的上層」通知 + 其他 + 允許螢幕截圖 + 開啟後允許在不允許截圖的軟體中截圖\n支援新增下拉控制中心快速開關,保障安全 + 桌面 + 始終顯示桌面時鐘 + 重啟所有作用範圍 + 重啟系統 + + 狀態列圖示 + 隱藏「無 SIM 卡」圖示 + 隱藏「SIM 卡 1」圖示 + 隱藏「SIM 卡 2」圖示 + 隱藏「VPN」圖示 + 隱藏「飛航模式」圖示 + 隱藏「WIFI」圖示 + 隱藏「藍牙」圖示 + 隱藏「聲音、勿擾」圖示 + 隱藏「鬧鐘」圖示 + 隱藏「WIFI 熱點」圖示 + 隱藏「耳機」圖示 + 隱藏「藍牙電量」圖示 + 隱藏「NFC」圖示 + 隱藏「大型 HD」圖示 + 隱藏「小型 HD」圖示 + 隱藏「新 HD」圖示 + 隱藏「HD 無服務」圖示 + 關於 + 關於模組 + 版本 + 開發人員酷安 + 開放原始碼存放庫 + 歡迎更多開發人員共同參與開發 + 回饋/提議 + 按一下以檢視 GitHub 問題 + 基於 MIUI13+(Android 12+) 的客製化工具 + 狀態列 + 顯示秒數 + 每秒更新即時網路速度 + 移除通知圖示數量上限 + 模組主開關 + 隱藏「GPS」圖示 + 隱藏網路速度 (/s) 單位 + 選單 + 提示 + 跳過 5/10 秒警告時間 + 移除裁剪圖片/螢幕截圖的限制 + 隱藏「WIFI 次要」圖示 + 隱藏「桌面」圖示 + 隱藏電量 (%) + 隱藏「電池」圖示 + 狀態列時鐘格式 + 顯示年份 + 顯示月份 + 顯示日期 + 顯示星期 + 隱藏間隔 + 允許截圖 + 鎖定目前上限 + 顯示時辰 + 自訂時鐘 - 主開關 + 顯示時段 + 雙列顯示 + 時鐘大小 (0:無變更) + 雙列大小 (0:無變更) + 功能無法生效? + 確定 + 檢視模組相關資訊 + 開放原始碼存放庫貢獻者名單 + 開發人員 + 感謝名單 + 第三方開放原始碼聲明 + 移除安裝限制 + 支援降級/不同簽章/無簽章安裝 + 防止復原電池效能最佳化白名單 + 系統重啟後仍會還原 + 電池效能最佳化 + 快速開啟被 MIUI 隱藏的電池效能最佳化功能 + 強制使用小窗 + 來酷安給我們五星好評 + 這可以使我們被更多的人發現 + 加入官方 QQ 頻道 + 加入官方 TG 頻道 + 可在頻道頁面進入聊天群組 + 討論 + 忽略系統黑名單與軟體小窗封鎖 + 移除負一屏功能鎖定 + 移除鎖定螢幕相機功能 + 僅支援官方預設主題 + 手機管家鎖定 100 分 + 作用範圍 + 系統架構 + 系統 UI + 系統桌面 + 其他 + 將狀態列網路速度元件的更新間隔變更為 1s + 需自行開啟電池百分比外顯功能 + 隱藏狀態列網路速度元件的 (/s) 單位 + 移除狀態列最多僅能顯示三條通知的限制 + 自訂系統介面、狀態列、鎖定螢幕等 + 首次啟動模組或模組更新後,\n此處的功能需重啟系統後才能生效 + 手機管家、相簿編輯、電量與性能等 + 電量與性能 + 手機管家 + 相簿編輯器 + 開啟後即使存在時鐘小工具,\n也不會隱藏狀態列時鐘 + 開啟後可忽略 MIUI 在開啟 USB 偵錯、\n未知應用程式來源、無障礙時的凍結時間 + 鎖定手機管家 100 分並封鎖修復按鈕 + 忽略 MIUI 對圖片裁切的最小限制 + 隱藏「WIFI 活動」圖示 + 隱藏「行動網路活動」圖示 + 隱藏「行動網路類型」圖示 + 顯示天氣 - 主開關 + 鎖定螢幕 + 通知中心 + 顯示城市 + 支援新增下拉控制中心快速開關,即時切換 + 控制中心 + 暫不支援妙享版控制中心 + 您似乎正在使用過時的 LSPosed 版本或 LSPosed 未啟用,請更新 LSPosed 或啟用後再試一次。 + 首次啟動或更新後建議重啟手機\n絕大部分功能變更後需要在右上角重啟範圍後生效 + 確定重啟系統? + 取消 + 確定要重啟所有作用範圍? + 隱藏「充電」圖示 + 隱藏「WIFI 標準」圖示 + 時間置中 + 更多狀態列版面配置等候開發中 + 狀態列版面配置 + 相容性模式 + 左邊距 (0:自動) + 右邊距 (0:自動) + 強制全螢幕版面配置 (支援所有螢幕凹口或空缺) + 移除遊戲自動連招黑名單 + 隱藏網路速度分割器 + 系統更新 + *移除 OTA 驗證 [實驗性] + - 僅支援 VAB 系列使用,其餘系列請不要開啟。\n- 無需內測資格即可刷入完整內測包。\n- 擁有內測權限的使用者將無法接收內測更新\n可用於隱藏系統更新。\n- 跨版本類型升級後,建議清除資料。\n- 不支援非官方 ROM 使用。 + 設定 + 顯示通知重要程度 + 顯示 MIUI 12 及之後版本被隱藏的通知重要程度設定 + 移除廣告 + 移除個性主題廣告 + 電池頁面顯示目前溫度 + 啟用 MIX Alpha 充電動畫 + 桌布縮放比例 + "預設值: " + 目前值: + 參與翻譯 + 協助我們將這個應用程式翻譯為您的語言 + 充電時顯示目前電流 + 目前電流 + 移除「開啟應用程式」彈出式視窗 + 移除「XXX 想要開啟 XXX」的彈出式視窗 + 隱藏「音量」圖示 + 隱藏「勿擾」圖示 + 隱藏圖示 + 輕觸兩下鎖定螢幕 + 輕觸兩下空白位置鎖定螢幕 + 舊版快速設定面板 + 自訂行列 + 行 (未展開) + + + 列 (橫向) + 雙列網路速度 + 上下列網路速度顯示 + 狀態列網路速度 + 雙列大小 (0:無變更) + 雙列圖示 + + 雙列對齊 + 置左 + 置右 + 大型行動網路圖示 + 顯示 WiFi 標準 + 強制允許所有通知使用小窗 + 電量百分比字型大小 + 0:無變更 + 大型行動網路圖示大小 + 大型行動網路圖示粗體 + 大型行動網路圖示上下位置 + 輸入錯誤 + 範圍: + 大型行動網路圖示左右邊距 + 投放 + 強制所有應用程式支援在其他裝置開啟 + 雙列置中對齊 + 預設值 + 時鐘置中 + 時鐘置右 + 狀態列版面配置模式 + 時鐘置中 + 圖示置左 + 通知圖示最大數量 + 通知圓點最大數量 + 自訂行動網路類型文字 + 自訂行動網路類型文字開關 + 允許降級安裝應用程式 + 允許在已安裝新版的情況下覆寫為舊版本 + 停用安裝程式簽章驗證 + 關閉安裝應用程式時的簽名驗證,可以安裝被修改的 APK + 停用 APK 簽章驗證 + 允許安裝套件名稱相同但簽章不同的應用程式 + 安裝時始終使用已安裝應用程式的簽章 + 安裝時始終使用已安裝應用程式的簽章\n這非常危險\n僅在真正需要時啟用! + 增強模式 + 可以解決一些應用程式內部的完整性驗證,一般不需要開啟 + 後方螢幕 (11 Ultra) + 時鐘顯示秒數 + 聲音 + 媒體音量階數 + 允許不受信任的觸控 + 重新開機後生效 + 開啟後可能會導致音量列捲動卡頓或藍牙音量異常 + 可能無法支援一些使用小米推送 (Mi Push) 推播的通知 + 螢幕凹口位置 + 自訂時鐘模式 + 時鐘格式 + 關閉 + 置中 + 左右 + 預設 + 極客 + 防止終止背景應用程式 + 可能會增加耗電,建議配合「使 Millet 更加積極」使用,不建議配合墓碑、A1 記憶體管理等會強制應用程式進入快取的模組使用 + 使 Millet 更加積極 + 允許 Millet 在背景應用程式有通知、有服務執行、有處理程序執行的狀況下凍結應用程式。\n不希望被凍結的應用程式可將省電策略設為無限制\n啟用前請先解除安裝墓碑和 NoANR 相關模組。 + 允許 Millet 凍結使用中的應用程式 + 非常積極,可能會影響應用程式執行 + 套件安裝程式 + 停用頻繁應用程式安裝檢查 + 大型行動網路僅會顯示網路卡 + 大型行動網路位置 + 修改卡片動畫 + 修改在最近任務介面移除卡片的動畫效果 + 停用桌布壓暗 + 這將會停用進出最近任務介面時的桌布壓暗效果 + 捲動顯示應用程式名稱 + 過長的應用程式名稱將會捲動,而不會在多列顯示 + 捷徑選單新增小窗 + 長按桌面圖示以快速開啟小窗應用程式 + 小窗應用程式 + 按一下以檢視案例 + diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml new file mode 100644 index 00000000..71b9bb5d --- /dev/null +++ b/app/src/main/res/values/array.xml @@ -0,0 +1,7 @@ + + + + android + com.android.systemui + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 00000000..471881bb --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,12 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + #FF0000 + #0d84ff + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 00000000..69d5381e --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,255 @@ + + WooBox For MIUI + Customization tool for MIUI13+(Android 12+) + + Performance + Lock the current refresh rate upper limit + Interface + Remove display over notification + Remove \"This app is displaying over other apps\" notification + Other + Allow screenshot + Allow screenshot in software that does not allow to\nSupport adding drop-down quick setting on Control center for security + Home + Always display Home screen clock + Restart all scope + Reboot System + + + Status bar icons + Hide No SIM icon + Hide SIM Card 1 icon + Hide SIM Card 2 icon + Hide VPN icon + Hide Airplane mode icon + Hide WIFI icon + Hide Bluetooth icon + Hide Sound and Do Not Disturb icon + Hide Alarm icon + Hide Portable hotspot icon + Hide Headset icon + Hide Bluetooth battery icon + Hide NFC icon + Hide big HD icon + Hide small HD icon + Hide new HD icon + Hide HD No Service icon + + About + About Module + Version + Author Coolapk + \@乌堆小透明 + Open Source Repository + Welcome more developers to participate in the development + Feedback/Proposal + Click to view GitHub Issues + Status bar + Display seconds + Network speed refresh in seconds + Remove the maximum number of notification icons + Module main switch + Hide GPS icon + Hide network speed (/s) units + Menu + Tips + Skip 5/10 seconds warning time + Remove restriction on cropping pictures/screenshots + Hide WIFI secondary icon + Hide Launcher icon + Hide battery (%) + Hide battery icon + Status bar clock format + Display year + Display month + Display date + Display day + Hide space + Allow screenshot + Lock current limit + Display chinese twelve hour + Custom Clock Switch + Display AM/PM + Dual row + Clock size (0: do not change) + Dual row size (0: do not change) + Feature is not working? + OK + View module related information + Open source repository contributor list + Developer + Thanks list + Third Party Open Source Statement + Remove restrictions + Support downgrade/different signature/unsigned installation + Prevent recovery of battery optimization whitelist + It will be restored after system restart + Battery optimization + Quickly open the battery optimization menu hidden by MIUI + Force small windows + Come and give us five-star review + This can make us more discoverable + Join the official QQ channel + Join the official TG channel + You can enter the chat group on the channel page + Discussions + Ignore system blacklist and software prohibition of small windows + Remove the lock screen side panel + Remove the lock screen camera feature + Only official default themes are supported + Set 100 points on Security app + Scope + System Framework + SystemUI + Home screen + Others + Change the refresh frequency of the status bar network speed component to 1s + Battery percentage display feature must be turned on by yourself + Hide the (/s) units of the status bar network speed component + Remove the limit of 3 notifications on the status bar + Customize system interface, status bar, lock screen, etc. + After enabling the module for the first time or the module is updated, the feature here will take effect after restarting the system + Security app, Gallery editor, Battery and performance, etc. + Battery and performance + Security app + Gallery Editor + When turned on, the clock will not be hidden on the status bar even if there is a clock widget + Ignore the waiting time by MIUI when eanbling USB debugging, unknown sources and accessibility + Set the score on Security app to 100 points and block the Optimize button + Ignore the minimum limit on image cropping by MIUI + Hide WIFI activity icon + Hide mobile activity icon + Hide mobile type icon + Show Weather - Main Switch + Lock screen + Notification Center + Show the city + Support adding drop-down control center quick setting for real-time switching + Control Center + The Mi Smart Hub version is not currently supported + You seem to be using an outdated version of LSPosed or LSPosed is not active, please update LSPosed or activate it and try again. + It is recommended to restart the phone after the first activation or update\nMost of changes require restart in the top right corner to take effect + Are you sure to reboot? + Cancel + Are you sure to reboot all scope? + Hide charging icon + Hide WIFI standard icon + Status bar time center + More status bar layouts are under development + Status bar layout + Compatibility mode + Left margin (0: Auto) + Right margin (0: Auto) + Force full screen layout (supports all special-shaped screens) + Remove game macro blacklist + Hide network speed splitter + Updater + *Remove OTA validate [LAB] + - Only support VAB series use, please do not open other series.\n- No need for internal testing qualification to flash into the full internal testing package.\n- Those who have internal testing permission will not be able to receive internal testing updates, and can be used to block system updates.\n- After cross-version type upgrade, it is recommended to clear data.\n- Unofficial ROM usage is not supported. + Settings + Show notification importance + Show notification importance settings which are hidden in MIUI 12 and later versions + Remove ads + Remove ads for theme manager + Battery page shows the current temperature + Enable wave charge animation + Max wallpaper scale + "Default: " + Current: + Participate in translation + Help us translate the app into your language + Display current information during charging + Current + Remove open app popup + Remove \"Allow XXX to open XXX\" Chain start popup + Hide Volume icon + Hide ZEN icon + Hide Icon + Double tap to sleep + Double-tap the blank space to sleep + Old quick settings panel + Custom rows and columns + Columns (Unexpanded) + Rows + Columns + Rows (horizontal) + Dual row network speed + Up and down network speed display + Status bar network speed + Dual row size (0: do not change) + Dual row icon + None + Dual row align + Left + Right + Big Mobile Type Icon + Show Wifi Standard + Make most notifications can be slide to small window + Battery percentage font size + 0: do not change + Big mobile type icon size + Big mobile type icon bold + Big mobile type icon up and down position + Input error + Range: + Big mobile type icon left and right margins + Cast + Force all apps support open on another device + Dual row center align + Default + Clock Center + Clock Right + Status bar layout mode + Clock Center and Icon Left + Maximum number of notification icons + Maximum number of notification dots + Custom mobile type text + Custom mobile type text switch + Allow downgrade + Allow downgrade applications. + Disable digest verify + Allows install apps after modify file in apk (ignore invalid digest error). + Disable compare signatures + Allow re-install app with different signatures. + Use installed signatures + Always use signatures from already installed apps when installing.\nThis is extremely dangerous.\nOnly enable when really needed! + Enhanced Mode + Pass some validation in the application + Rear Display (11Ultra) + Clock display seconds + Sound + Media volume steps + Allow untrusted touches + Take effect after reboot + Turning on may cause the scrolling of the volume bar to freeze or the Bluetooth volume to be abnormal + Some notifications through Mi Push may not be supported. + Screen hole location + Custom clock mode + Clock format + Off + Center + Left or Right + Preset + Geek + Prevent killing background apps + May cause increased power consumption, recommended with \"Make Millet more aggressive\", NOT recommended for use with tombstones + Make Millet more aggressive + Allows Millet to freeze apps while background apps have notifications, services running, and processes running.\nApps that don\'t want to be frozen can set Battery saver to No restriction\nPlease uninstall tombstone and NoANR related modules before enabling. + Allow Millet to freeze active apps + Very aggressive and may affect application running + Package Installer + Disable the app installation\'s count checking + Big mobile type only show network card + Big mobile type location + Modify the card marking animation + Modify the animation effect of the recent task removal card + Disable wallpaper dimming + This will disable the effect that the wallpaper will gradually brighten from dimming when going in and out of the recent task + Scroll app name + The application name that is too long will be scrolled and displayed without any new line + Shortcut Menu Add Window + Press and hold the desktop icon to add a quick open window + Small window + Click to view use cases + Disable bluetooth temporarily off + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..c9f26e38 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 00000000..58e1fc1e --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,4 @@ + + +