Better tips for framework not installed (#62)
* Remove skip min version check * Better tips for framework not installed * Disable framework settings if not installed
This commit is contained in:
parent
8b69bdd30d
commit
94a1ba826e
|
|
@ -3,10 +3,12 @@ package io.github.lsposed.manager.ui.activity;
|
|||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
|
|
@ -28,11 +30,6 @@ public class MainActivity extends BaseActivity {
|
|||
super.onCreate(savedInstanceState);
|
||||
binding = ActivityMainBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
binding.modules.setOnClickListener(v -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setClass(getApplicationContext(), ModulesActivity.class);
|
||||
startActivity(intent);
|
||||
});
|
||||
binding.status.setOnClickListener(v -> {
|
||||
if (Constants.getXposedVersionCode() != -1) {
|
||||
new StatusDialogBuilder(this)
|
||||
|
|
@ -43,21 +40,10 @@ public class MainActivity extends BaseActivity {
|
|||
NavUtil.startURL(this, getString(R.string.about_source));
|
||||
}
|
||||
});
|
||||
binding.settings.setOnClickListener(v -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setClass(getApplicationContext(), SettingsActivity.class);
|
||||
startActivity(intent);
|
||||
});
|
||||
binding.logs.setOnClickListener(v -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setClass(getApplicationContext(), LogsActivity.class);
|
||||
startActivity(intent);
|
||||
});
|
||||
binding.about.setOnClickListener(v -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setClass(getApplicationContext(), AboutActivity.class);
|
||||
startActivity(intent);
|
||||
});
|
||||
binding.modules.setOnClickListener(new StartActivityListener(ModulesActivity.class, true));
|
||||
binding.logs.setOnClickListener(new StartActivityListener(LogsActivity.class, true));
|
||||
binding.settings.setOnClickListener(new StartActivityListener(SettingsActivity.class, false));
|
||||
binding.about.setOnClickListener(new StartActivityListener(AboutActivity.class, false));
|
||||
Glide.with(binding.appIcon)
|
||||
.load(GlideHelper.wrapApplicationInfoForIconLoader(getApplicationInfo()))
|
||||
.into(binding.appIcon);
|
||||
|
|
@ -78,6 +64,28 @@ public class MainActivity extends BaseActivity {
|
|||
binding.statusSummary.setText(R.string.InstallDetail);
|
||||
binding.status.setCardBackgroundColor(ContextCompat.getColor(this, R.color.colorInstall));
|
||||
binding.statusIcon.setImageResource(R.drawable.ic_error);
|
||||
Snackbar.make(binding.snackbar, R.string.lsposed_not_active, Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
private class StartActivityListener implements View.OnClickListener {
|
||||
boolean requireInstalled;
|
||||
Class<?> clazz;
|
||||
|
||||
StartActivityListener(Class<?> clazz, boolean requireInstalled) {
|
||||
this.clazz = clazz;
|
||||
this.requireInstalled = requireInstalled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (requireInstalled && Constants.getXposedVersion() == null) {
|
||||
Snackbar.make(binding.snackbar, R.string.lsposed_not_active, Snackbar.LENGTH_LONG).show();
|
||||
} else {
|
||||
Intent intent = new Intent();
|
||||
intent.setClass(MainActivity.this, clazz);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,16 @@ package io.github.lsposed.manager.ui.activity;
|
|||
import android.content.Intent;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Typeface;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.Spannable;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.text.style.StyleSpan;
|
||||
import android.text.style.TypefaceSpan;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
|
@ -18,6 +25,7 @@ import android.widget.TextView;
|
|||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.widget.SearchView;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
|
|
@ -42,7 +50,6 @@ import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS;
|
|||
public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleListener {
|
||||
|
||||
ActivityAppListBinding binding;
|
||||
private int installedXposedVersion;
|
||||
private ApplicationFilter filter;
|
||||
private SearchView searchView;
|
||||
private SearchView.OnQueryTextListener mSearchListener;
|
||||
|
|
@ -105,14 +112,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
|
|||
filter = new ApplicationFilter();
|
||||
moduleUtil = ModuleUtil.getInstance();
|
||||
pm = getPackageManager();
|
||||
installedXposedVersion = Constants.getXposedApiVersion();
|
||||
if (installedXposedVersion <= 0) {
|
||||
Snackbar.make(binding.snackbar, R.string.xposed_not_active, Snackbar.LENGTH_LONG).setAction(R.string.Settings, v -> {
|
||||
Intent intent = new Intent();
|
||||
intent.setClass(ModulesActivity.this, SettingsActivity.class);
|
||||
startActivity(intent);
|
||||
}).show();
|
||||
}
|
||||
adapter = new ModuleAdapter();
|
||||
adapter.setHasStableIds(true);
|
||||
moduleUtil.addListener(this);
|
||||
|
|
@ -269,33 +268,38 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
|
|||
.load(item.getPackageInfo())
|
||||
.into(holder.appIcon);
|
||||
|
||||
TextView descriptionText = holder.appDescription;
|
||||
descriptionText.setVisibility(View.VISIBLE);
|
||||
SpannableStringBuilder sb = new SpannableStringBuilder();
|
||||
if (!item.getDescription().isEmpty()) {
|
||||
descriptionText.setText(item.getDescription());
|
||||
sb.append(item.getDescription());
|
||||
} else {
|
||||
descriptionText.setText(getString(R.string.module_empty_description));
|
||||
sb.append(getString(R.string.module_empty_description));
|
||||
}
|
||||
TextView warningText = holder.warningText;
|
||||
|
||||
int installedXposedVersion = Constants.getXposedApiVersion();
|
||||
String warningText = null;
|
||||
if (item.minVersion == 0) {
|
||||
warningText.setText(getString(R.string.no_min_version_specified));
|
||||
warningText.setVisibility(View.VISIBLE);
|
||||
warningText = getString(R.string.no_min_version_specified);
|
||||
} else if (installedXposedVersion > 0 && item.minVersion > installedXposedVersion) {
|
||||
warningText.setText(String.format(getString(R.string.warning_xposed_min_version), item.minVersion));
|
||||
warningText.setVisibility(View.VISIBLE);
|
||||
warningText = String.format(getString(R.string.warning_xposed_min_version), item.minVersion);
|
||||
} else if (item.minVersion < ModuleUtil.MIN_MODULE_VERSION) {
|
||||
warningText.setText(String.format(getString(R.string.warning_min_version_too_low), item.minVersion, ModuleUtil.MIN_MODULE_VERSION));
|
||||
warningText.setVisibility(View.VISIBLE);
|
||||
warningText = String.format(getString(R.string.warning_min_version_too_low), item.minVersion, ModuleUtil.MIN_MODULE_VERSION);
|
||||
} else if (item.isInstalledOnExternalStorage()) {
|
||||
warningText.setText(getString(R.string.warning_installed_on_external_storage));
|
||||
warningText.setVisibility(View.VISIBLE);
|
||||
} else if (installedXposedVersion == 0 || (installedXposedVersion == -1)) {
|
||||
warningText.setText(getString(R.string.not_installed_no_lollipop));
|
||||
warningText.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
warningText.setVisibility(View.GONE);
|
||||
warningText = getString(R.string.warning_installed_on_external_storage);
|
||||
}
|
||||
if (warningText != null) {
|
||||
sb.append("\n");
|
||||
sb.append(warningText);
|
||||
final ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(ContextCompat.getColor(ModulesActivity.this, R.color.material_red_500));
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
final TypefaceSpan typefaceSpan = new TypefaceSpan(Typeface.create("sans-serif-medium", Typeface.NORMAL));
|
||||
sb.setSpan(typefaceSpan, sb.length() - warningText.length(), sb.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
|
||||
} else {
|
||||
final StyleSpan styleSpan = new StyleSpan(Typeface.BOLD);
|
||||
sb.setSpan(styleSpan, sb.length() - warningText.length(), sb.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
|
||||
}
|
||||
sb.setSpan(foregroundColorSpan, sb.length() - warningText.length(), sb.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
|
||||
}
|
||||
holder.appDescription.setText(sb);
|
||||
}
|
||||
|
||||
void addAll(ArrayList<ModuleUtil.InstalledModule> items) {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import androidx.preference.Preference;
|
|||
import androidx.preference.SwitchPreferenceCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
import com.takisoft.preferencex.PreferenceFragmentCompat;
|
||||
import com.takisoft.preferencex.SimpleMenuPreference;
|
||||
|
||||
|
|
@ -80,6 +81,9 @@ public class SettingsActivity extends BaseActivity {
|
|||
return insets;
|
||||
});
|
||||
}
|
||||
if (Constants.getXposedVersion() == null) {
|
||||
Snackbar.make(binding.snackbar, R.string.lsposed_not_active, Snackbar.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
private void restart() {
|
||||
|
|
@ -127,20 +131,24 @@ public class SettingsActivity extends BaseActivity {
|
|||
public void onCreatePreferencesFix(Bundle savedInstanceState, String rootKey) {
|
||||
addPreferencesFromResource(R.xml.prefs);
|
||||
|
||||
boolean installed = Constants.getXposedVersion() != null;
|
||||
SwitchPreferenceCompat prefVerboseLogs = findPreference("disable_verbose_log");
|
||||
if (prefVerboseLogs != null) {
|
||||
prefVerboseLogs.setEnabled(installed);
|
||||
prefVerboseLogs.setChecked(Files.exists(disableVerboseLogsFlag));
|
||||
prefVerboseLogs.setOnPreferenceChangeListener(new OnFlagChangeListener(disableVerboseLogsFlag));
|
||||
}
|
||||
|
||||
SwitchPreferenceCompat prefModulesLogs = findPreference("disable_modules_log");
|
||||
if (prefModulesLogs != null) {
|
||||
prefModulesLogs.setEnabled(installed);
|
||||
prefModulesLogs.setChecked(Files.exists(disableModulesLogsFlag));
|
||||
prefModulesLogs.setOnPreferenceChangeListener(new OnFlagChangeListener(disableModulesLogsFlag));
|
||||
}
|
||||
|
||||
SwitchPreferenceCompat prefEnableResources = findPreference("enable_resources");
|
||||
if (prefEnableResources != null) {
|
||||
prefEnableResources.setEnabled(installed);
|
||||
prefEnableResources.setChecked(Files.exists(enableResourcesFlag));
|
||||
prefEnableResources.setOnPreferenceChangeListener(new OnFlagChangeListener(enableResourcesFlag));
|
||||
}
|
||||
|
|
@ -150,6 +158,7 @@ public class SettingsActivity extends BaseActivity {
|
|||
if (StatusDialogBuilder.getArch().contains("x86") || requireActivity().getApplicationInfo().uid / 100000 != 0) {
|
||||
prefVariant.setVisible(false);
|
||||
} else {
|
||||
prefVariant.setEnabled(installed);
|
||||
try {
|
||||
prefVariant.setValue(new String(Files.readAllBytes(variantFlag)).trim());
|
||||
} catch (Exception e) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package io.github.lsposed.manager.util;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
|
|
@ -33,12 +32,10 @@ public final class ModuleUtil {
|
|||
private Map<String, InstalledModule> installedModules;
|
||||
private final List<String> enabledModules;
|
||||
private boolean isReloading = false;
|
||||
private final SharedPreferences prefs;
|
||||
|
||||
private ModuleUtil() {
|
||||
pm = App.getInstance().getPackageManager();
|
||||
enabledModules = AppHelper.getEnabledModuleList();
|
||||
prefs = App.getPreferences();
|
||||
}
|
||||
|
||||
public static synchronized ModuleUtil getInstance() {
|
||||
|
|
@ -226,18 +223,13 @@ public final class ModuleUtil {
|
|||
this.minVersion = 0;
|
||||
this.description = "";
|
||||
} else {
|
||||
int version = Constants.getXposedApiVersion();
|
||||
if (version > 0 && prefs.getBoolean("skip_xposedminversion_check", false)) {
|
||||
this.minVersion = version;
|
||||
Object minVersionRaw = app.metaData.get("xposedminversion");
|
||||
if (minVersionRaw instanceof Integer) {
|
||||
this.minVersion = (Integer) minVersionRaw;
|
||||
} else if (minVersionRaw instanceof String) {
|
||||
this.minVersion = extractIntPart((String) minVersionRaw);
|
||||
} else {
|
||||
Object minVersionRaw = app.metaData.get("xposedminversion");
|
||||
if (minVersionRaw instanceof Integer) {
|
||||
this.minVersion = (Integer) minVersionRaw;
|
||||
} else if (minVersionRaw instanceof String) {
|
||||
this.minVersion = extractIntPart((String) minVersionRaw);
|
||||
} else {
|
||||
this.minVersion = 0;
|
||||
}
|
||||
this.minVersion = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,7 +74,6 @@
|
|||
android:layout_width="28dp"
|
||||
android:layout_height="28dp"
|
||||
android:layout_centerVertical="true"
|
||||
android:contentDescription="@string/Activated"
|
||||
app:srcCompat="@drawable/ic_check_circle"
|
||||
app:tint="@android:color/white" />
|
||||
|
||||
|
|
@ -84,7 +83,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="25dp"
|
||||
android:layout_toEndOf="@id/status_icon"
|
||||
android:text="@string/Activated"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
|
||||
android:textColor="@android:color/white" />
|
||||
|
||||
|
|
@ -95,7 +93,6 @@
|
|||
android:layout_below="@id/status_title"
|
||||
android:layout_alignStart="@id/status_title"
|
||||
android:layout_marginTop="5dp"
|
||||
android:text="@string/ActivatedDetail"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||
android:textColor="@android:color/white" />
|
||||
</RelativeLayout>
|
||||
|
|
|
|||
|
|
@ -85,18 +85,5 @@
|
|||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/warning"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="@color/material_red_500"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintStart_toStartOf="@+id/description"
|
||||
app:layout_constraintTop_toBottomOf="@+id/description"
|
||||
tools:text="@tools:sample/lorem" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</FrameLayout>
|
||||
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
<item
|
||||
android:id="@+id/menu_search"
|
||||
android:title="@string/menuSearch"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
<item
|
||||
android:id="@+id/menu_search"
|
||||
android:title="@string/menuSearch"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="ifRoom" />
|
||||
</menu>
|
||||
|
|
@ -3,7 +3,6 @@
|
|||
<string name="Activated">已激活</string>
|
||||
<string name="Install">安装</string>
|
||||
<string name="InstallDetail">点按安装 LSPosed</string>
|
||||
<string name="ActivatedDetail">LSPosed 框架已激活</string>
|
||||
<string name="Modules">模块</string>
|
||||
<string name="ModulesDetail">%d 模块已启用</string>
|
||||
<string name="Logs">日志</string>
|
||||
|
|
@ -22,7 +21,6 @@
|
|||
<string name="nav_item_logs_err">模块日志</string>
|
||||
|
||||
<!-- Installer tab -->
|
||||
<string name="areyousure">您确定?</string>
|
||||
<string name="install_warning_title">请小心!</string>
|
||||
<string name="dont_show_again">不再提示</string>
|
||||
|
||||
|
|
@ -42,12 +40,10 @@
|
|||
<string name="module_uninstall">卸载</string>
|
||||
|
||||
<!-- Download tab -->
|
||||
<string name="menuSearch">搜索</string>
|
||||
<string name="menuReload">重新加载</string>
|
||||
|
||||
<!-- Settings tab -->
|
||||
<string name="settings_group_framework">框架</string>
|
||||
<string name="settings_group_app">应用</string>
|
||||
<string name="settings_theme">主题</string>
|
||||
<string name="settings_theme_light">亮色</string>
|
||||
<string name="settings_theme_dark">暗色</string>
|
||||
|
|
@ -73,13 +69,10 @@
|
|||
<string name="warning_installed_on_external_storage">此模块因被安装在 SD 卡中而导致无法加载, 请将其移动到内部存储</string>
|
||||
|
||||
<string name="info">信息</string>
|
||||
<string name="not_installed_no_lollipop">LSPosed 框架未安装</string>
|
||||
|
||||
<string name="scroll_top">滚动到顶部</string>
|
||||
<string name="loading">正在加载…</string>
|
||||
<string name="scroll_bottom">滚动到底部</string>
|
||||
<string name="skip_xposedminversion_check">关闭状态检查</string>
|
||||
<string name="skip_xposedminversion_check_summ">关闭针对模块的\“LSPosed 安装状态\”检查</string>
|
||||
<string name="not_logcat">此处仅显示 LSPosed 及模块相关日志信息\n如果您想抓取系统日志, 可以尝试我们的 Log Catcher Magisk 模块</string>
|
||||
|
||||
<!-- LSPd related -->
|
||||
|
|
@ -95,9 +88,7 @@
|
|||
<string name="pref_title_disable_modules_log">禁用模块日志</string>
|
||||
<string name="pref_disable_modules_log_summary">模块抛出的的异常堆栈仍将正常抓取</string>
|
||||
<string name="follow_system">跟随系统</string>
|
||||
<string name="pure_black_dark_theme">使用纯黑深色主题</string><![CDATA[>
|
||||
]]>
|
||||
<string name="xposed_not_active">LSPosed 框架未安装或未激活, 您可在设置中关闭状态检查</string>
|
||||
<string name="pure_black_dark_theme">使用纯黑深色主题</string>
|
||||
<string name="transparent_status_bar">透明状态栏</string>
|
||||
<string name="sort_by_name">应用名称</string>
|
||||
<string name="sort_by_name_reverse">应用名称(降序)</string>
|
||||
|
|
@ -135,4 +126,5 @@
|
|||
<string name="selinux_permissive"><b>警告:<\/b>SELinux 未处于严格模式!对此进行攻击的恶意程序可以完全控制你的设备,并可能造成你的财产损失和法律责任。</string>
|
||||
<string name="selinux_permissive_summary">SELinux 未处于严格模式!</string>
|
||||
<string name="outdated_manager">LSPosed Manager 和 LSPosed Core 的版本不一致。请重新安装对应的版本。</string>
|
||||
<string name="lsposed_not_active">LSPosed 未安装或未激活</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
<string name="Activated">已激活</string>
|
||||
<string name="Install">安裝</string>
|
||||
<string name="InstallDetail">點按安裝 LSPosed</string>
|
||||
<string name="ActivatedDetail">LSPosed 框架已激活</string>
|
||||
<string name="Modules">模塊</string>
|
||||
<string name="ModulesDetail">%d 模塊已啟用</string>
|
||||
<string name="Logs">日誌</string>
|
||||
|
|
@ -21,7 +20,6 @@
|
|||
<string name="nav_item_logs_err">模塊日誌</string>
|
||||
|
||||
<!-- Installer tab -->
|
||||
<string name="areyousure">您確定?</string>
|
||||
<string name="install_warning_title">請小心!</string>
|
||||
<string name="dont_show_again">不再提示</string>
|
||||
|
||||
|
|
@ -41,12 +39,10 @@
|
|||
<string name="module_uninstall">卸載</string>
|
||||
|
||||
<!-- Download tab -->
|
||||
<string name="menuSearch">搜索</string>
|
||||
<string name="menuReload">重新加載</string>
|
||||
|
||||
<!-- Settings tab -->
|
||||
<string name="settings_group_framework">框架</string>
|
||||
<string name="settings_group_app">應用</string>
|
||||
<string name="settings_theme">主題</string>
|
||||
<string name="settings_theme_light">亮色</string>
|
||||
<string name="settings_theme_dark">暗色</string>
|
||||
|
|
@ -71,13 +67,10 @@
|
|||
<string name="warning_installed_on_external_storage">此模塊因被安裝在 SD 卡中而導致無法加載, 請將其移動到內部存儲</string>
|
||||
|
||||
<string name="info">信息</string>
|
||||
<string name="not_installed_no_lollipop">LSPosed 框架未安裝</string>
|
||||
|
||||
<string name="scroll_top">滾動到頂部</string>
|
||||
<string name="loading">正在加載…</string>
|
||||
<string name="scroll_bottom">滾動到底部</string>
|
||||
<string name="skip_xposedminversion_check">關閉狀態檢查</string>
|
||||
<string name="skip_xposedminversion_check_summ">關閉針對模塊的\"LSPosed 安裝狀態\"檢查</string>
|
||||
<string name="not_logcat">此處僅顯示 LSPosed 及模塊相關日誌信息\n如果您想抓取系統日誌, 可以嘗試我們的 Log Catcher Magisk 模塊</string>
|
||||
|
||||
<!-- LSPd related -->
|
||||
|
|
@ -93,8 +86,8 @@
|
|||
<string name="pref_disable_modules_log_summary">模塊拋出的的異常堆棧仍將正常抓取</string>
|
||||
<string name="follow_system">跟隨系統</string>
|
||||
<string name="pure_black_dark_theme">使用純黑深色主題</string><![CDATA[>
|
||||
|
||||
]]>
|
||||
<string name="xposed_not_active">LSPosed 框架未安裝或未激活, 您可在設置中關閉狀態檢查</string>
|
||||
<string name="transparent_status_bar">透明狀態欄</string>
|
||||
<string name="sort_by_name">應用名稱</string>
|
||||
<string name="sort_by_name_reverse">應用名稱(降序)</string>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
<string name="Activated">已啟用</string>
|
||||
<string name="Install">安裝</string>
|
||||
<string name="InstallDetail">點按安裝 LSPosed</string>
|
||||
<string name="ActivatedDetail">LSPosed 框架已啟用</string>
|
||||
<string name="Modules">模組</string>
|
||||
<string name="ModulesDetail">%d 模組已啟用</string>
|
||||
<string name="Logs">日誌</string>
|
||||
|
|
@ -22,7 +21,6 @@
|
|||
<string name="nav_item_logs_err">模組日誌</string>
|
||||
|
||||
<!-- Installer tab -->
|
||||
<string name="areyousure">您確定?</string>
|
||||
<string name="install_warning_title">請小心!</string>
|
||||
<string name="dont_show_again">不再提示</string>
|
||||
|
||||
|
|
@ -42,12 +40,10 @@
|
|||
<string name="module_uninstall">解除安裝</string>
|
||||
|
||||
<!-- Download tab -->
|
||||
<string name="menuSearch">搜尋</string>
|
||||
<string name="menuReload">重新載入</string>
|
||||
|
||||
<!-- Settings tab -->
|
||||
<string name="settings_group_framework">框架</string>
|
||||
<string name="settings_group_app">程式</string>
|
||||
<string name="settings_theme">主題</string>
|
||||
<string name="settings_theme_light">亮色</string>
|
||||
<string name="settings_theme_dark">暗色</string>
|
||||
|
|
@ -73,13 +69,10 @@
|
|||
<string name="warning_installed_on_external_storage">此模組因被安裝在 SD 卡中而導致無法載入, 請將其移動到內部儲存</string>
|
||||
|
||||
<string name="info">資訊</string>
|
||||
<string name="not_installed_no_lollipop">LSPosed 框架未安裝</string>
|
||||
|
||||
<string name="scroll_top">滾動到頂部</string>
|
||||
<string name="loading">正在載入…</string>
|
||||
<string name="scroll_bottom">滾動到底部</string>
|
||||
<string name="skip_xposedminversion_check">關閉狀態檢查</string>
|
||||
<string name="skip_xposedminversion_check_summ">關閉針對模組的\"LSPosed 安裝狀態\"檢查</string>
|
||||
<string name="not_logcat">此處僅顯示 LSPosed 及模組相關日誌資訊\n如果您想抓取系統日誌, 可以嘗試我們的 Log Catcher Magisk 模組</string>
|
||||
|
||||
<!-- LSPd related -->
|
||||
|
|
@ -96,8 +89,8 @@
|
|||
<string name="pref_disable_modules_log_summary">模組丟擲的的異常堆疊仍將正常抓取</string>
|
||||
<string name="follow_system">跟隨系統</string>
|
||||
<string name="pure_black_dark_theme">使用純黑深色主題</string><![CDATA[>
|
||||
|
||||
]]>
|
||||
<string name="xposed_not_active">LSPosed 框架未安裝或未啟用, 您可在設定中關閉狀態檢查</string>
|
||||
<string name="transparent_status_bar">透明狀態列</string>
|
||||
<string name="sort_by_name">程式名稱</string>
|
||||
<string name="sort_by_name_reverse">程式名稱(降序)</string>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
<string name="Activated">Activated</string>
|
||||
<string name="Install">Install</string>
|
||||
<string name="InstallDetail">Tap to install LSPosed</string>
|
||||
<string name="ActivatedDetail">LSPosed is activated</string>
|
||||
<string name="Modules">Modules</string>
|
||||
<string name="ModulesDetail">%d modules enabled</string>
|
||||
<string name="Logs">Logs</string>
|
||||
|
|
@ -23,7 +22,6 @@
|
|||
<string name="nav_item_logs_err">Modules Logs</string>
|
||||
|
||||
<!-- Installer tab -->
|
||||
<string name="areyousure">Are you sure?</string>
|
||||
<string name="install_warning_title">Be careful!</string>
|
||||
<string name="dont_show_again">Don\'t show this again</string>
|
||||
|
||||
|
|
@ -43,14 +41,12 @@
|
|||
<string name="module_uninstall">Uninstall</string>
|
||||
|
||||
<!-- Download tab -->
|
||||
<string name="menuSearch">Search</string>
|
||||
<string name="menuReload">Reload</string>
|
||||
|
||||
<!-- Settings tab -->
|
||||
<string name="settings_group_framework">Framework</string>
|
||||
<string name="settings_enable_resources">Enable resource hooks</string>
|
||||
<string name="settings_enable_resources_summary"><b>WARNING:</b> Resource hooks are deprecated</string>
|
||||
<string name="settings_group_app">Application</string>
|
||||
<string name="settings_theme">Theme</string>
|
||||
<string name="settings_theme_light">Light</string>
|
||||
<string name="settings_theme_dark">Dark</string>
|
||||
|
|
@ -76,13 +72,10 @@
|
|||
<string name="warning_installed_on_external_storage">This module cannot be loaded because it\'s installed on the SD card, please move it to internal storage</string>
|
||||
|
||||
<string name="info">Info</string>
|
||||
<string name="not_installed_no_lollipop">LSPosed Framework is not installed</string>
|
||||
|
||||
<string name="scroll_top">Scroll to top</string>
|
||||
<string name="loading">Loading…</string>
|
||||
<string name="scroll_bottom">Scroll to bottom</string>
|
||||
<string name="skip_xposedminversion_check">Skip status check</string>
|
||||
<string name="skip_xposedminversion_check_summ">Skip \"LSPosed Status\" check for modules</string>
|
||||
|
||||
<string name="android_sdk" translatable="false">Android %2$s (%1$s, API %3$d)</string>
|
||||
<string name="not_logcat">This is the LSPosed Framework and modules log\nif you need a Android logcat, you can try our Log Catcher Magisk module</string>
|
||||
|
|
@ -106,7 +99,6 @@
|
|||
<string name="pref_disable_modules_log_summary">Exception stack thrown by the module will still be catched normally</string>
|
||||
<string name="pure_black_dark_theme">Use the pure black dark theme</string>
|
||||
<string name="follow_system">Follow system</string>
|
||||
<string name="xposed_not_active">LSPosed Framework is not currently installed or active\nYou can close status check in settings</string>
|
||||
<string name="transparent_status_bar">Transparent status bar</string>
|
||||
<string name="sort_by_name">Sort by application name</string>
|
||||
<string name="sort_by_name_reverse">Sort by application name (reverse)</string>
|
||||
|
|
@ -142,4 +134,5 @@
|
|||
<string name="selinux_permissive"><b>WARNING:<\/b> SELinux is not enforcing! the malicious program that attacks this can completely control your device and may cause your property damage and legal liability.</string>
|
||||
<string name="selinux_permissive_summary">SELinux is not enforcing!</string>
|
||||
<string name="outdated_manager">Version of LSPosed Manager and LSPosed Core are not consistent. Please re-install the corresponding version.</string>
|
||||
<string name="lsposed_not_active">LSPosed is not currently installed or active.</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceCategory
|
||||
android:title="@string/settings_group_app"
|
||||
app:iconSpaceReserved="false">
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:defaultValue="false"
|
||||
android:key="skip_xposedminversion_check"
|
||||
android:summary="@string/skip_xposedminversion_check_summ"
|
||||
android:title="@string/skip_xposedminversion_check"
|
||||
app:iconSpaceReserved="false" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory
|
||||
android:title="@string/settings_group_theme"
|
||||
app:iconSpaceReserved="false">
|
||||
|
|
|
|||
Loading…
Reference in New Issue