diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cf05cb6f..f6849529 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,6 +20,7 @@ * . */ +import android.databinding.tool.ext.capitalizeUS import com.android.build.gradle.internal.tasks.factory.dependsOn import com.android.tools.build.apkzlib.sign.SigningExtension import com.android.tools.build.apkzlib.sign.SigningOptions @@ -139,9 +140,12 @@ android { } } androidResources { - additionalParameters("--allow-reserved-package-id", "--package-id", "0x39") + additionalParameters += arrayOf( + "--allow-reserved-package-id", + "--package-id", "0x39" + ) } - packagingOptions { + packaging { resources.excludes.addAll(arrayOf( "META-INF/**", "kotlin/**", @@ -166,7 +170,7 @@ android { ) } applicationVariants.all { - val variantCapped = name.capitalize() + val variantCapped = name.capitalizeUS() val mergeAssets = tasks.getByName("merge${variantCapped}Assets") mergeAssets.dependsOn(generateEulaAndPrivacy) mergeAssets.dependsOn("data${variantCapped}Descriptor") @@ -240,7 +244,7 @@ val restartQQ = tasks.register("restartQQ") { }.dependsOn(killQQ) androidComponents.onVariants { variant -> - val variantCapped = variant.name.capitalize() + val variantCapped = variant.name.capitalizeUS() task("install${variantCapped}AndRestartQQ") { group = "qauxv" dependsOn(":app:install$variantCapped") diff --git a/app/src/main/java/cc/ioctl/dialog/RepeaterIconSettingDialog.java b/app/src/main/java/cc/ioctl/dialog/RepeaterIconSettingDialog.java index 60f68b65..596ab0b7 100644 --- a/app/src/main/java/cc/ioctl/dialog/RepeaterIconSettingDialog.java +++ b/app/src/main/java/cc/ioctl/dialog/RepeaterIconSettingDialog.java @@ -35,6 +35,7 @@ import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; import androidx.annotation.NonNull; @@ -212,18 +213,19 @@ public class RepeaterIconSettingDialog implements View.OnClickListener, return 0; } int id = dpiGroup.getCheckedRadioButtonId(); - switch (id) { - case R.id.selectRepeaterIcon_RadioButtonXxxhdpi: + RadioButton button = dpiGroup.findViewById(id); + switch (button.getText().toString()) { + case "xxxhdpi": return 640; - case R.id.selectRepeaterIcon_RadioButtonXxhdpi: + case "xxhdpi": return 480; - case R.id.selectRepeaterIcon_RadioButtonXhdpi: + case "xhdpi": return 320; - case R.id.selectRepeaterIcon_RadioButtonHdpi: + case "hdpi": return 240; - case R.id.selectRepeaterIcon_RadioButtonMdpi: + case "mdpi": return 160; - case R.id.selectRepeaterIcon_RadioButtonLdpi: + case "ldpi": return 120; default: return 0; diff --git a/app/src/main/java/cc/ioctl/fragment/FakeBatteryConfigFragment.java b/app/src/main/java/cc/ioctl/fragment/FakeBatteryConfigFragment.java index 9e8c4c6c..985404f6 100644 --- a/app/src/main/java/cc/ioctl/fragment/FakeBatteryConfigFragment.java +++ b/app/src/main/java/cc/ioctl/fragment/FakeBatteryConfigFragment.java @@ -129,12 +129,12 @@ public class FakeBatteryConfigFragment extends BaseRootLayoutFragment implements ll.addView(charging, newLinearLayoutParams(MATCH_PARENT, WRAP_CONTENT, 3 * _5dp, _5dp, 2 * _5dp, _5dp)); Button apply = new Button(context); btnApply = apply; - apply.setId(R.id.btn_apply); + apply.setTag("btn_apply"); apply.setOnClickListener(this); // ResUtils.applyStyleCommonBtnBlue(apply); ll.addView(apply, newLinearLayoutParams(MATCH_PARENT, WRAP_CONTENT, 2 * _5dp, _5dp, 2 * _5dp, _5dp)); Button dis = new Button(context); - dis.setId(R.id.btn_disable); + dis.setTag("btn_disable"); btnDisable = dis; dis.setOnClickListener(this); // ResUtils.applyStyleCommonBtnBlue(dis); @@ -185,8 +185,8 @@ public class FakeBatteryConfigFragment extends BaseRootLayoutFragment implements @Override public void onClick(View v) { Context context = requireContext(); - switch (v.getId()) { - case R.id.btn_apply: + switch (v.getTag().toString()) { + case "btn_apply": if (mMsfResponsive) { doUpdateBatCfg(); } else { @@ -233,7 +233,7 @@ public class FakeBatteryConfigFragment extends BaseRootLayoutFragment implements }); } break; - case R.id.btn_disable: + case "btn_disable": FakeBatteryHook.INSTANCE.setEnabled(false); showStatus(); break; diff --git a/app/src/main/java/cc/ioctl/fragment/JefsRuleConfigFragment.java b/app/src/main/java/cc/ioctl/fragment/JefsRuleConfigFragment.java index 1f1e2e1b..6ea183bb 100644 --- a/app/src/main/java/cc/ioctl/fragment/JefsRuleConfigFragment.java +++ b/app/src/main/java/cc/ioctl/fragment/JefsRuleConfigFragment.java @@ -108,7 +108,7 @@ public class JefsRuleConfigFragment extends BaseRootLayoutFragment implements Vi LayoutHelper.newLinearLayoutParams(MATCH_PARENT, WRAP_CONTENT, __5)); Button editBtn = new Button(context); - editBtn.setId(R.id.jefsRulesEditButton); + editBtn.setTag("jefsRulesEditButton"); editBtn.setOnClickListener(this); editBtn.setText("编辑规则"); // ResUtils.applyStyleCommonBtnBlue(editBtn); @@ -148,7 +148,7 @@ public class JefsRuleConfigFragment extends BaseRootLayoutFragment implements Vi LayoutHelper.newLinearLayoutParams(MATCH_PARENT, WRAP_CONTENT, __10)); Button saveBtn = new Button(context); - saveBtn.setId(R.id.jefsRulesSaveButton); + saveBtn.setTag("jefsRulesSaveButton"); saveBtn.setOnClickListener(this); saveBtn.setText("确认"); // ResUtils.applyStyleCommonBtnBlue(saveBtn); @@ -161,7 +161,7 @@ public class JefsRuleConfigFragment extends BaseRootLayoutFragment implements Vi TextView cancelBtn = new TextView(context); // cancelBtn.setTextColor(ResUtils.skin_black); cancelBtn.setTextSize(16); - cancelBtn.setId(R.id.jefsRulesCancelButton); + cancelBtn.setTag("jefsRulesCancelButton"); cancelBtn.setGravity(Gravity.CENTER); cancelBtn.setPadding(__10, __5, __10, __10 / 2); cancelBtn.setText("取消"); @@ -171,7 +171,7 @@ public class JefsRuleConfigFragment extends BaseRootLayoutFragment implements Vi TextView resetBtn = new TextView(context); // resetBtn.setTextColor(ResUtils.skin_black); resetBtn.setTextSize(16); - resetBtn.setId(R.id.jefsRulesResetButton); + resetBtn.setTag("jefsRulesResetButton"); resetBtn.setGravity(Gravity.CENTER); resetBtn.setPadding(__10, __5, __10, __10 / 2); resetBtn.setText("恢复默认规则"); @@ -202,20 +202,20 @@ public class JefsRuleConfigFragment extends BaseRootLayoutFragment implements Vi @Override public void onClick(View v) { - switch (v.getId()) { - case R.id.jefsRulesEditButton: { + switch (v.getTag().toString()) { + case "jefsRulesEditButton": { goToEditMode(); break; } - case R.id.jefsRulesCancelButton: { + case "jefsRulesCancelButton": { confirmLeaveEditMode(); break; } - case R.id.jefsRulesResetButton: { + case "jefsRulesResetButton": { confirmResetRules(); break; } - case R.id.jefsRulesSaveButton: { + case "jefsRulesSaveButton": { checkAndSaveRules(rulesEt.getText().toString()); break; } diff --git a/app/src/main/java/io/github/qauxv/activity/ConfigV2Activity.java b/app/src/main/java/io/github/qauxv/activity/ConfigV2Activity.java index 1d79e75d..1a454712 100644 --- a/app/src/main/java/io/github/qauxv/activity/ConfigV2Activity.java +++ b/app/src/main/java/io/github/qauxv/activity/ConfigV2Activity.java @@ -158,21 +158,13 @@ public class ConfigV2Activity extends AppCompatTransferActivity { public void openModuleSettingForHost(View view) { String pkg = null; - switch (view.getId()) { - case R.id.mainRelativeLayoutButtonOpenQQ: { - pkg = HookEntry.PACKAGE_NAME_QQ; - break; - } - case R.id.mainRelativeLayoutButtonOpenTIM: { - pkg = HookEntry.PACKAGE_NAME_TIM; - break; - } - case R.id.mainRelativeLayoutButtonOpenQQLite: { - pkg = HookEntry.PACKAGE_NAME_QQ_LITE; - break; - } - default: { - } + var id = view.getId(); + if (id == R.id.mainRelativeLayoutButtonOpenQQ) { + pkg = HookEntry.PACKAGE_NAME_QQ; + } else if (id == R.id.mainRelativeLayoutButtonOpenTIM) { + pkg = HookEntry.PACKAGE_NAME_TIM; + } else if (id == R.id.mainRelativeLayoutButtonOpenQQLite) { + pkg = HookEntry.PACKAGE_NAME_QQ_LITE; } if (pkg != null) { Intent intent = new Intent(); @@ -191,86 +183,78 @@ public class ConfigV2Activity extends AppCompatTransferActivity { } public void handleClickEvent(View v) { - switch (v.getId()) { - case R.id.mainV2_githubRepo: { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://github.com/cinit/QAuxiliary")); - startActivity(intent); - break; - } - case R.id.mainV2_help: { - new AlertDialog.Builder(this) - .setMessage("如模块无法使用,EdXp可尝试取消优化+开启兼容模式 " - + "ROOT用户可尝试 用幸运破解器-工具箱-移除odex更改 移除QQ与本模块的优化, 太极尝试取消优化") - .setCancelable(true).setPositiveButton(android.R.string.ok, null).show(); - break; - } - case R.id.mainV2_troubleshoot: { - new AlertDialog.Builder(this) - .setTitle("你想要进入哪个App的故障排除") - .setItems(new String[]{"QQ", "TIM", "QQ极速版", "QQ HD"}, (dialog, which) -> { - String pkg = null; - switch (which) { - case 0: { - pkg = HookEntry.PACKAGE_NAME_QQ; - break; - } - case 1: { - pkg = HookEntry.PACKAGE_NAME_TIM; - break; - } - case 2: { - pkg = HookEntry.PACKAGE_NAME_QQ_LITE; - break; - } - case 3: { - pkg = HookEntry.PACKAGE_NAME_QQ_HD; - break; - } - default: { - } + var id = v.getId(); + if (id == R.id.mainV2_githubRepo) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse("https://github.com/cinit/QAuxiliary")); + startActivity(intent); + } else if (id == R.id.mainV2_help) { + new AlertDialog.Builder(this) + .setMessage("如模块无法使用,EdXp可尝试取消优化+开启兼容模式 " + + "ROOT用户可尝试 用幸运破解器-工具箱-移除odex更改 移除QQ与本模块的优化, 太极尝试取消优化") + .setCancelable(true).setPositiveButton(android.R.string.ok, null).show(); + } else if (id == R.id.mainV2_troubleshoot) { + new AlertDialog.Builder(this) + .setTitle("你想要进入哪个App的故障排除") + .setItems(new String[]{"QQ", "TIM", "QQ极速版", "QQ HD"}, (dialog, which) -> { + String pkg = null; + switch (which) { + case 0: { + pkg = HookEntry.PACKAGE_NAME_QQ; + break; } - if (pkg != null) { - Intent intent = new Intent(); - intent.setComponent(new ComponentName(pkg, "com.tencent.mobileqq.activity.JumpActivity")); - intent.setAction(Intent.ACTION_VIEW); - intent.putExtra(JumpActivityEntryHook.JUMP_ACTION_CMD, - JumpActivityEntryHook.JUMP_ACTION_TROUBLE_SHOOTING_ACTIVITY); - try { - startActivity(intent); - } catch (ActivityNotFoundException e) { - new AlertDialog.Builder(this).setTitle("出错啦") - .setMessage("拉起模块设置失败, 请确认 " + pkg + " 已安装并启用(没有被关冰箱或被冻结停用)\n" + e) - .setPositiveButton(android.R.string.ok, null) - .show(); - } + case 1: { + pkg = HookEntry.PACKAGE_NAME_TIM; + break; } - }) - .setPositiveButton(android.R.string.ok, null) - .setNegativeButton("无法进入?", (dialog, which) -> { - new AlertDialog.Builder(this).setTitle("手动启用安全模式") - .setMessage("如果模块已经激活但无法进入故障排除界面,或在点击进入故障排除后卡死," - + "你可以手动在以下位置建立一个空文件来强制启用 QAuxiliary 的安全模式。\n\n" + - Environment.getExternalStorageDirectory().getAbsolutePath() + - "/Android/data/包名(例如 QQ 是 com.tencent.mobileqq)/" + - SafeModeManager.SAFE_MODE_FILE_NAME + "\n\n" - + "请注意这个位置在 Android 11 及以上的系统是无法直接访问的," - + "你可以使用一些支持访问 Android/data 的第三方文件管理器来操作,例如 MT 管理器。") - .setPositiveButton(android.R.string.ok, null) - .setNegativeButton("复制文件名", (dialog1, which1) -> { - SystemServiceUtils.copyToClipboard(this, SafeModeManager.SAFE_MODE_FILE_NAME); - Toasts.info(this, "复制成功"); - }).show(); - }).show(); - break; - } - default: { - } + case 2: { + pkg = HookEntry.PACKAGE_NAME_QQ_LITE; + break; + } + case 3: { + pkg = HookEntry.PACKAGE_NAME_QQ_HD; + break; + } + default: { + } + } + if (pkg != null) { + Intent intent = new Intent(); + intent.setComponent(new ComponentName(pkg, "com.tencent.mobileqq.activity.JumpActivity")); + intent.setAction(Intent.ACTION_VIEW); + intent.putExtra(JumpActivityEntryHook.JUMP_ACTION_CMD, + JumpActivityEntryHook.JUMP_ACTION_TROUBLE_SHOOTING_ACTIVITY); + try { + startActivity(intent); + } catch (ActivityNotFoundException e) { + new AlertDialog.Builder(this).setTitle("出错啦") + .setMessage("拉起模块设置失败, 请确认 " + pkg + " 已安装并启用(没有被关冰箱或被冻结停用)\n" + e) + .setPositiveButton(android.R.string.ok, null) + .show(); + } + } + }) + .setPositiveButton(android.R.string.ok, null) + .setNegativeButton("无法进入?", (dialog, which) -> { + new AlertDialog.Builder(this).setTitle("手动启用安全模式") + .setMessage("如果模块已经激活但无法进入故障排除界面,或在点击进入故障排除后卡死," + + "你可以手动在以下位置建立一个空文件来强制启用 QAuxiliary 的安全模式。\n\n" + + Environment.getExternalStorageDirectory().getAbsolutePath() + + "/Android/data/包名(例如 QQ 是 com.tencent.mobileqq)/" + + SafeModeManager.SAFE_MODE_FILE_NAME + "\n\n" + + "请注意这个位置在 Android 11 及以上的系统是无法直接访问的," + + "你可以使用一些支持访问 Android/data 的第三方文件管理器来操作,例如 MT 管理器。") + .setPositiveButton(android.R.string.ok, null) + .setNegativeButton("复制文件名", (dialog1, which1) -> { + SystemServiceUtils.copyToClipboard(this, SafeModeManager.SAFE_MODE_FILE_NAME); + Toasts.info(this, "复制成功"); + }).show(); + }).show(); } } @Override - public boolean onCreateOptionsMenu(Menu menu) { + public boolean onCreateOptionsMenu(@NonNull Menu menu) { super.onCreateOptionsMenu(menu); if (HostInfo.isInModuleProcess()) { getMenuInflater().inflate(R.menu.main_v2_toolbar, menu); @@ -283,48 +267,36 @@ public class ConfigV2Activity extends AppCompatTransferActivity { @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { - switch (item.getItemId()) { - case R.id.menu_item_nativeLibVariantInfo: { - SettingsUiFragmentHostActivity.startActivityForFragment(this, CheckAbiVariantFragment.class, null); - return true; - } - case R.id.menu_item_about: { - SettingsUiFragmentHostActivity.startActivityForFragment(this, AboutFragment.class, null); - return true; - } - case R.id.menu_item_test_pcm2silk: { - SettingsUiFragmentHostActivity.startActivityForFragment(this, Pcm2SilkTestFragment.class, null); - return true; - } - case R.id.mainV2_menuItem_toggleDesktopIcon: { - setLauncherIconEnabled(!isLauncherIconEnabled()); - SyncUtils.postDelayed(this::updateMenuItems, 500); - return true; - } - case R.id.menu_item_changeTheme: { - showChangeThemeDialog(); - return true; - } - case R.id.menu_item_switch_to_module_process: { - Intent intent = new Intent(); - intent.setComponent(new ComponentName(BuildConfig.APPLICATION_ID, ConfigV2Activity.class.getName())); - intent.setAction(Intent.ACTION_MAIN); - intent.addCategory("de.robv.android.xposed.category.MODULE_SETTINGS"); - try { - startActivity(intent); - finish(); - } catch (ActivityNotFoundException e) { - new AlertDialog.Builder(this).setTitle("出错啦") - .setMessage("拉起模块失败, 请确认 " + BuildConfig.APPLICATION_ID + " 已安装并启用(没有被关冰箱或被冻结停用)\n" + e) - .setPositiveButton(android.R.string.ok, null) - .show(); - } - return true; - } - default: { - return ConfigV2Activity.super.onOptionsItemSelected(item); + var id = item.getItemId(); + if (id == R.id.menu_item_nativeLibVariantInfo) { + SettingsUiFragmentHostActivity.startActivityForFragment(this, CheckAbiVariantFragment.class, null); + } else if (id == R.id.menu_item_about) { + SettingsUiFragmentHostActivity.startActivityForFragment(this, AboutFragment.class, null); + } else if (id == R.id.menu_item_test_pcm2silk) { + SettingsUiFragmentHostActivity.startActivityForFragment(this, Pcm2SilkTestFragment.class, null); + } else if (id == R.id.mainV2_menuItem_toggleDesktopIcon) { + setLauncherIconEnabled(!isLauncherIconEnabled()); + SyncUtils.postDelayed(this::updateMenuItems, 500); + } else if (id == R.id.menu_item_changeTheme) { + showChangeThemeDialog(); + } else if (id == R.id.menu_item_switch_to_module_process) { + Intent intent = new Intent(); + intent.setComponent(new ComponentName(BuildConfig.APPLICATION_ID, ConfigV2Activity.class.getName())); + intent.setAction(Intent.ACTION_MAIN); + intent.addCategory("de.robv.android.xposed.category.MODULE_SETTINGS"); + try { + startActivity(intent); + finish(); + } catch (ActivityNotFoundException e) { + new AlertDialog.Builder(this).setTitle("出错啦") + .setMessage("拉起模块失败, 请确认 " + BuildConfig.APPLICATION_ID + " 已安装并启用(没有被关冰箱或被冻结停用)\n" + e) + .setPositiveButton(android.R.string.ok, null) + .show(); } + } else { + return ConfigV2Activity.super.onOptionsItemSelected(item); } + return true; } @Override diff --git a/gradle.properties b/gradle.properties index 437b4f15..b27e9fc5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,6 +14,7 @@ android.useAndroidX=true android.nonTransitiveRClass=true android.injected.testOnly=false android.includeDependencyInfoInApks=false +android.enableBuildConfigAsBytecode=true kotlin.code.style=official kotlin.daemon.useFallbackStrategy=false diff --git a/libs/dexkit/build.gradle.kts b/libs/dexkit/build.gradle.kts index 5705652f..2c2adb8d 100644 --- a/libs/dexkit/build.gradle.kts +++ b/libs/dexkit/build.gradle.kts @@ -33,7 +33,6 @@ android { main.apply { manifest.srcFile("AndroidManifest.xml") java.setSrcDirs(listOf("DexKit/dexkit/src/main/java")) - res.setSrcDirs(listOf("DexKit/dexkit/src/main/res")) } } } diff --git a/settings.gradle.kts b/settings.gradle.kts index 8930b3d1..6ae99e9a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,18 +7,34 @@ pluginManagement { includeBuild("build-logic") repositories { gradlePluginPortal() - google() mavenCentral() + google() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { - google() mavenCentral() - maven("https://jitpack.io") - maven("https://api.xposed.info/") + google() { + mavenContent { + includeGroupByRegex("androidx.*") + includeGroupByRegex("com.google.*") + includeGroupByRegex("com.android.*") + } + } + maven("https://jitpack.io") { + mavenContent { + includeGroup("com.github.livefront.sealed-enum") + includeGroup("com.github.MatteoBattilana") + includeGroup("com.github.plattysoft") + } + } + maven("https://api.xposed.info/") { + mavenContent { + includeGroup("de.robv.android.xposed") + } + } } }