Remove "optimize all" and reboot menus (#43)
* Remove "optimize all" menus * Remove reboot menus
This commit is contained in:
parent
aa0d587be0
commit
9c93b65206
|
|
@ -53,10 +53,6 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<receiver
|
||||
android:name=".util.NotificationUtil$RebootReceiver"
|
||||
android:exported="false" />
|
||||
|
||||
<receiver
|
||||
android:name=".receivers.EdServiceReceiver"
|
||||
android:exported="true"
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import java.io.StringWriter;
|
|||
import io.github.lsposed.manager.ui.activity.CrashReportActivity;
|
||||
import io.github.lsposed.manager.util.CompileUtil;
|
||||
import io.github.lsposed.manager.util.NotificationUtil;
|
||||
import io.github.lsposed.manager.util.RebootUtil;
|
||||
import rikka.shizuku.Shizuku;
|
||||
import rikka.sui.Sui;
|
||||
|
||||
|
|
@ -36,15 +35,10 @@ public class App extends Application {
|
|||
}
|
||||
|
||||
private void onRequestPermissionsResult(int requestCode, int grantResult) {
|
||||
if (requestCode < 10) {
|
||||
RebootUtil.onRequestPermissionsResult(requestCode, grantResult);
|
||||
} else {
|
||||
CompileUtil.onRequestPermissionsResult(requestCode - 10, grantResult);
|
||||
}
|
||||
CompileUtil.onRequestPermissionsResult(requestCode, grantResult);
|
||||
}
|
||||
|
||||
public static int checkPermission(int code, int from) {
|
||||
int requestCode = code + from * 10;
|
||||
public static int checkPermission(int code) {
|
||||
try {
|
||||
if (!Shizuku.isPreV11() && Shizuku.getVersion() >= 11) {
|
||||
if (Shizuku.checkSelfPermission() == PERMISSION_GRANTED) {
|
||||
|
|
@ -52,7 +46,7 @@ public class App extends Application {
|
|||
} else if (Shizuku.shouldShowRequestPermissionRationale()) {
|
||||
return -1;
|
||||
} else {
|
||||
Shizuku.requestPermission(requestCode);
|
||||
Shizuku.requestPermission(code);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -243,10 +243,6 @@ public class ScopeAdapter extends RecyclerView.Adapter<ScopeAdapter.ViewHolder>
|
|||
if (launchIntent != null) {
|
||||
activity.startActivity(launchIntent);
|
||||
}
|
||||
} else if (itemId == R.id.app_menu_compile_speed) {
|
||||
CompileUtil.compileSpeed(activity, activity.getSupportFragmentManager(), info);
|
||||
} else if (itemId == R.id.app_menu_compile_dexopt) {
|
||||
CompileUtil.compileDexopt(activity, activity.getSupportFragmentManager(), info);
|
||||
} else if (itemId == R.id.app_menu_compile_reset) {
|
||||
CompileUtil.reset(activity, activity.getSupportFragmentManager(), info);
|
||||
} else if (itemId == R.id.app_menu_store) {
|
||||
|
|
@ -352,8 +348,6 @@ public class ScopeAdapter extends RecyclerView.Adapter<ScopeAdapter.ViewHolder>
|
|||
menu.removeItem(R.id.app_menu_launch);
|
||||
}
|
||||
if (android) {
|
||||
menu.removeItem(R.id.app_menu_compile_speed);
|
||||
menu.removeItem(R.id.app_menu_compile_dexopt);
|
||||
menu.removeItem(R.id.app_menu_compile_reset);
|
||||
menu.removeItem(R.id.app_menu_store);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,10 +8,8 @@ import android.content.res.Resources;
|
|||
import android.content.res.TypedArray;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
|
@ -28,10 +26,8 @@ import java.util.Objects;
|
|||
|
||||
import io.github.lsposed.manager.App;
|
||||
import io.github.lsposed.manager.R;
|
||||
import io.github.lsposed.manager.util.CompileUtil;
|
||||
import io.github.lsposed.manager.util.CustomThemeColor;
|
||||
import io.github.lsposed.manager.util.CustomThemeColors;
|
||||
import io.github.lsposed.manager.util.RebootUtil;
|
||||
|
||||
public class BaseActivity extends AppCompatActivity {
|
||||
|
||||
|
|
@ -172,28 +168,4 @@ public class BaseActivity extends AppCompatActivity {
|
|||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.dexopt_all) {
|
||||
CompileUtil.compileAllDexopt(this);
|
||||
} else if (itemId == R.id.speed_all) {
|
||||
CompileUtil.compileAllSpeed(this);
|
||||
} else if (itemId == R.id.reboot) {
|
||||
areYouSure(R.string.reboot, (dialog, which) -> RebootUtil.reboot(RebootUtil.RebootType.NORMAL));
|
||||
} else if (itemId == R.id.soft_reboot) {
|
||||
areYouSure(R.string.soft_reboot, (dialog, which) -> RebootUtil.reboot(RebootUtil.RebootType.USERSPACE));
|
||||
} else if (itemId == R.id.reboot_recovery) {
|
||||
areYouSure(R.string.reboot_recovery, (dialog, which) -> RebootUtil.reboot(RebootUtil.RebootType.RECOVERY));
|
||||
} else if (itemId == R.id.reboot_bootloader) {
|
||||
areYouSure(R.string.reboot_bootloader, (dialog, which) -> RebootUtil.reboot(RebootUtil.RebootType.BOOTLOADER));
|
||||
} else if (itemId == R.id.reboot_download) {
|
||||
areYouSure(R.string.reboot_download, (dialog, which) -> RebootUtil.reboot(RebootUtil.RebootType.DOWNLOAD));
|
||||
} else if (itemId == R.id.reboot_edl) {
|
||||
areYouSure(R.string.reboot_edl, (dialog, which) -> RebootUtil.reboot(RebootUtil.RebootType.EDL));
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@ import android.annotation.SuppressLint;
|
|||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.appcompat.widget.PopupMenu;
|
||||
import androidx.appcompat.widget.TooltipCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
|
|
@ -60,12 +58,6 @@ public class MainActivity extends BaseActivity {
|
|||
intent.setClass(getApplicationContext(), AboutActivity.class);
|
||||
startActivity(intent);
|
||||
});
|
||||
TooltipCompat.setTooltipText(binding.menuMore, getString(androidx.appcompat.R.string.abc_action_menu_overflow_description));
|
||||
PopupMenu appMenu = new PopupMenu(MainActivity.this, binding.menuMore);
|
||||
appMenu.inflate(R.menu.menu_installer);
|
||||
appMenu.setOnMenuItemClickListener(this::onOptionsItemSelected);
|
||||
binding.menuMore.setOnTouchListener(appMenu.getDragToOpenListener());
|
||||
binding.menuMore.setOnClickListener(v -> appMenu.show());
|
||||
Glide.with(binding.appIcon)
|
||||
.load(GlideHelper.wrapApplicationInfoForIconLoader(getApplicationInfo()))
|
||||
.into(binding.appIcon);
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
|
|||
}
|
||||
}
|
||||
}
|
||||
Comparator<PackageInfo> cmp = AppHelper.getAppListComparator(preferences.getInt("list_sort", 0), pm);
|
||||
Comparator<PackageInfo> cmp = AppHelper.getAppListComparator(0, pm);
|
||||
fullList.sort((a, b) -> {
|
||||
boolean aChecked = moduleUtil.isModuleEnabled(a.packageName);
|
||||
boolean bChecked = moduleUtil.isModuleEnabled(b.packageName);
|
||||
|
|
@ -160,15 +160,6 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
|
|||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
||||
if (AppHelper.onOptionsItemSelected(item, preferences)) {
|
||||
moduleUtil.updateModulesList(false, null);
|
||||
reloadModules.run();
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
|
|
|||
|
|
@ -36,8 +36,6 @@ public class CompileDialogFragment extends AppCompatDialogFragment {
|
|||
// TODO:
|
||||
private static final String COMPILE_COMMAND_PREFIX = "cmd package ";
|
||||
private static final String COMPILE_RESET_COMMAND = COMPILE_COMMAND_PREFIX + "compile --reset ";
|
||||
private static final String COMPILE_SPEED_COMMAND = COMPILE_COMMAND_PREFIX + "compile -f -m speed ";
|
||||
private static final String COMPILE_DEXOPT_COMMAND = COMPILE_COMMAND_PREFIX + "force-dex-opt ";
|
||||
|
||||
private static final String KEY_APP_INFO = "app_info";
|
||||
private static final String KEY_MSG = "msg";
|
||||
|
|
@ -91,18 +89,10 @@ public class CompileDialogFragment extends AppCompatDialogFragment {
|
|||
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
|
||||
try {
|
||||
boolean checkProfiles = ShizukuSystemProperties.getBoolean("dalvik.vm.usejitprofiles", false);
|
||||
switch (mode) {
|
||||
case RESET:
|
||||
CompileUtil.PACKAGE_MANAGER.get().clearApplicationProfileData(appInfo.packageName);
|
||||
String filter = ShizukuSystemProperties.get("pm.dexopt.install");
|
||||
CompileUtil.PACKAGE_MANAGER.get().performDexOptMode(appInfo.packageName, checkProfiles, filter, true, true, null);
|
||||
break;
|
||||
case SPEED:
|
||||
CompileUtil.PACKAGE_MANAGER.get().performDexOptMode(appInfo.packageName, checkProfiles, "speed", true, true, null);
|
||||
break;
|
||||
case DEXOPT:
|
||||
CompileUtil.PACKAGE_MANAGER.get().forceDexOpt(appInfo.packageName);
|
||||
break;
|
||||
if (mode == CompileUtil.CompileType.RESET) {
|
||||
CompileUtil.PACKAGE_MANAGER.get().clearApplicationProfileData(appInfo.packageName);
|
||||
String filter = ShizukuSystemProperties.get("pm.dexopt.install");
|
||||
CompileUtil.PACKAGE_MANAGER.get().performDexOptMode(appInfo.packageName, checkProfiles, filter, true, true, null);
|
||||
}
|
||||
App.runOnUiThread(() -> {
|
||||
ToastUtil.showLongToast(App.getInstance(), R.string.done);
|
||||
|
|
@ -129,7 +119,7 @@ public class CompileDialogFragment extends AppCompatDialogFragment {
|
|||
if (arguments != null) {
|
||||
int type = arguments.getInt(KEY_TYPE);
|
||||
appInfo = arguments.getParcelable(KEY_APP_INFO);
|
||||
int result = App.checkPermission(type, 1);
|
||||
int result = App.checkPermission(type);
|
||||
switch (result) {
|
||||
case 0:
|
||||
onRequestPermissionsResult(type, PERMISSION_GRANTED);
|
||||
|
|
@ -151,10 +141,6 @@ public class CompileDialogFragment extends AppCompatDialogFragment {
|
|||
String command = null;
|
||||
if (type == CompileUtil.CompileType.RESET) {
|
||||
command = COMPILE_RESET_COMMAND + appInfo.packageName;
|
||||
} else if (type == CompileUtil.CompileType.DEXOPT) {
|
||||
command = COMPILE_DEXOPT_COMMAND + appInfo.packageName;
|
||||
} else if (type == CompileUtil.CompileType.SPEED) {
|
||||
command = COMPILE_SPEED_COMMAND + appInfo.packageName;
|
||||
}
|
||||
if (command != null) {
|
||||
new CompileTask(this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, command);
|
||||
|
|
|
|||
|
|
@ -1,41 +1,21 @@
|
|||
package io.github.lsposed.manager.util;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.os.AsyncTask;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.topjohnwu.superuser.Shell;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import io.github.lsposed.manager.App;
|
||||
import io.github.lsposed.manager.R;
|
||||
import io.github.lsposed.manager.ui.fragment.CompileDialogFragment;
|
||||
import rikka.shizuku.ShizukuBinderWrapper;
|
||||
import rikka.shizuku.ShizukuSystemProperties;
|
||||
import rikka.shizuku.SystemServiceHelper;
|
||||
|
||||
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class CompileUtil {
|
||||
// TODO:
|
||||
|
||||
public enum CompileType {
|
||||
RESET,
|
||||
SPEED,
|
||||
DEXOPT,
|
||||
SPEED_ALL,
|
||||
DEXOPT_ALL;
|
||||
RESET;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
|
|
@ -54,53 +34,8 @@ public class CompileUtil {
|
|||
}
|
||||
};
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private static Activity sActivity;
|
||||
|
||||
public static void onRequestPermissionsResult(int requestCode, int grantResult) {
|
||||
CompileUtil.CompileType mode = CompileUtil.CompileType.values()[requestCode];
|
||||
if (mode == CompileType.DEXOPT_ALL || mode == CompileType.SPEED_ALL) {
|
||||
AlertDialog dialog = new MaterialAlertDialogBuilder(sActivity)
|
||||
.setTitle(R.string.speed_now)
|
||||
.setMessage(R.string.this_may_take_a_while)
|
||||
.setCancelable(false)
|
||||
.show();
|
||||
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
|
||||
if (grantResult == PERMISSION_GRANTED) {
|
||||
try {
|
||||
IPackageManager packageManager = PACKAGE_MANAGER.get();
|
||||
if (mode == CompileType.DEXOPT_ALL) {
|
||||
packageManager.runBackgroundDexoptJob(null);
|
||||
} else {
|
||||
boolean checkProfiles = ShizukuSystemProperties.getBoolean("dalvik.vm.usejitprofiles", false);
|
||||
List<String> list = packageManager.getAllPackages();
|
||||
for (String packageName : list) {
|
||||
CompileUtil.PACKAGE_MANAGER.get().performDexOptMode(packageName, checkProfiles, "speed", true, true, null);
|
||||
}
|
||||
}
|
||||
dialog.dismiss();
|
||||
App.runOnUiThread(() -> Toast.makeText(sActivity, R.string.done, Toast.LENGTH_LONG).show());
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if (!Shell.rootAccess()) {
|
||||
dialog.dismiss();
|
||||
App.runOnUiThread(() -> Toast.makeText(sActivity, R.string.root_failed, Toast.LENGTH_LONG).show());
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode == CompileType.SPEED_ALL) {
|
||||
Shell.su("cmd package compile -m speed -a").exec();
|
||||
} else {
|
||||
Shell.su("cmd package bg-dexopt-job").exec();
|
||||
}
|
||||
|
||||
dialog.dismiss();
|
||||
App.runOnUiThread(() -> Toast.makeText(sActivity, R.string.done, Toast.LENGTH_LONG).show());
|
||||
});
|
||||
} else if (instance != null) {
|
||||
if (instance != null) {
|
||||
instance.onRequestPermissionsResult(requestCode, grantResult);
|
||||
}
|
||||
}
|
||||
|
|
@ -108,52 +43,12 @@ public class CompileUtil {
|
|||
public static void reset(Context context, FragmentManager fragmentManager,
|
||||
ApplicationInfo info) {
|
||||
compilePackageInBg(fragmentManager, info,
|
||||
context.getString(R.string.compile_reset_msg), CompileType.RESET);
|
||||
}
|
||||
|
||||
public static void compileSpeed(Context context, FragmentManager fragmentManager,
|
||||
ApplicationInfo info) {
|
||||
compilePackageInBg(fragmentManager, info,
|
||||
context.getString(R.string.compile_speed_msg), CompileType.SPEED);
|
||||
}
|
||||
|
||||
public static void compileDexopt(Context context, FragmentManager fragmentManager,
|
||||
ApplicationInfo info) {
|
||||
compilePackageInBg(fragmentManager, info,
|
||||
context.getString(R.string.compile_speed_msg), CompileType.DEXOPT);
|
||||
}
|
||||
|
||||
public static void compileAllDexopt(Activity activity) {
|
||||
sActivity = activity;
|
||||
int type = CompileType.DEXOPT_ALL.ordinal();
|
||||
int result = App.checkPermission(type, 1);
|
||||
switch (result) {
|
||||
case 0:
|
||||
onRequestPermissionsResult(type, PERMISSION_GRANTED);
|
||||
break;
|
||||
case -2:
|
||||
onRequestPermissionsResult(type, PERMISSION_DENIED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void compileAllSpeed(Activity activity) {
|
||||
sActivity = activity;
|
||||
int type = CompileType.SPEED_ALL.ordinal();
|
||||
int result = App.checkPermission(type, 1);
|
||||
switch (result) {
|
||||
case 0:
|
||||
onRequestPermissionsResult(type, PERMISSION_GRANTED);
|
||||
break;
|
||||
case -2:
|
||||
onRequestPermissionsResult(type, PERMISSION_DENIED);
|
||||
break;
|
||||
}
|
||||
context.getString(R.string.compile_reset_msg));
|
||||
}
|
||||
|
||||
private static void compilePackageInBg(FragmentManager fragmentManager,
|
||||
ApplicationInfo info, String msg, CompileType type) {
|
||||
instance = CompileDialogFragment.newInstance(info, msg, type);
|
||||
ApplicationInfo info, String msg) {
|
||||
instance = CompileDialogFragment.newInstance(info, msg, CompileType.RESET);
|
||||
instance.show(fragmentManager, TAG_COMPILE_DIALOG);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,21 +3,16 @@ package io.github.lsposed.manager.util;
|
|||
import android.annotation.SuppressLint;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.core.app.NotificationChannelCompat;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.topjohnwu.superuser.Shell;
|
||||
|
||||
import io.github.lsposed.manager.App;
|
||||
import io.github.lsposed.manager.R;
|
||||
import io.github.lsposed.manager.ui.activity.MainActivity;
|
||||
import io.github.lsposed.manager.ui.activity.ModulesActivity;
|
||||
|
||||
@SuppressLint("UnspecifiedImmutableFlag")
|
||||
|
|
@ -27,9 +22,6 @@ public final class NotificationUtil {
|
|||
private static final int NOTIFICATION_MODULES_UPDATED = 1;
|
||||
private static final int PENDING_INTENT_OPEN_MODULES = 0;
|
||||
private static final int PENDING_INTENT_OPEN_INSTALL = 1;
|
||||
private static final int PENDING_INTENT_SOFT_REBOOT = 2;
|
||||
private static final int PENDING_INTENT_REBOOT = 3;
|
||||
|
||||
private static final String NOTIFICATION_MODULES_CHANNEL = "modules_channel_2";
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
|
|
@ -53,14 +45,6 @@ public final class NotificationUtil {
|
|||
notificationManager.createNotificationChannel(channel.build());
|
||||
}
|
||||
|
||||
public static void cancel(String tag, int id) {
|
||||
notificationManager.cancel(tag, id);
|
||||
}
|
||||
|
||||
public static void cancelAll() {
|
||||
notificationManager.cancelAll();
|
||||
}
|
||||
|
||||
public static void showNotActivatedNotification(String packageName, String appName) {
|
||||
Intent intent = new Intent(context, ModulesActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
|
@ -80,7 +64,7 @@ public final class NotificationUtil {
|
|||
}
|
||||
|
||||
public static void showModulesUpdatedNotification(String appName) {
|
||||
Intent intent = new Intent(context, MainActivity.class)
|
||||
Intent intent = new Intent(context, ModulesActivity.class)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
PendingIntent pInstallTab = PendingIntent.getActivity(context, PENDING_INTENT_OPEN_INSTALL, intent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
|
@ -90,18 +74,6 @@ public final class NotificationUtil {
|
|||
NotificationCompat.Builder builder = getNotificationBuilder(title, appName)
|
||||
.setContentIntent(pInstallTab);
|
||||
|
||||
Intent iSoftReboot = new Intent(context, RebootReceiver.class);
|
||||
iSoftReboot.putExtra(RebootReceiver.EXTRA_SOFT_REBOOT, true);
|
||||
PendingIntent pSoftReboot = PendingIntent.getBroadcast(context, PENDING_INTENT_SOFT_REBOOT,
|
||||
iSoftReboot, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
Intent iReboot = new Intent(context, RebootReceiver.class);
|
||||
PendingIntent pReboot = PendingIntent.getBroadcast(context, PENDING_INTENT_REBOOT,
|
||||
iReboot, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
|
||||
builder.addAction(new NotificationCompat.Action.Builder(0, context.getString(R.string.reboot), pReboot).build());
|
||||
builder.addAction(new NotificationCompat.Action.Builder(0, context.getString(R.string.soft_reboot), pSoftReboot).build());
|
||||
|
||||
notificationManager.notify(null, NOTIFICATION_MODULES_UPDATED, builder.build());
|
||||
}
|
||||
|
||||
|
|
@ -115,29 +87,4 @@ public final class NotificationUtil {
|
|||
.setSmallIcon(R.drawable.ic_notification)
|
||||
.setColor(ContextCompat.getColor(context, R.color.colorPrimary));
|
||||
}
|
||||
|
||||
public static class RebootReceiver extends BroadcastReceiver {
|
||||
public static String EXTRA_SOFT_REBOOT = "soft";
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
/*
|
||||
* Close the notification bar in order to see the toast that module
|
||||
* was enabled successfully. Furthermore, if SU permissions haven't
|
||||
* been granted yet, the SU dialog will be prompted behind the
|
||||
* expanded notification panel and is therefore not visible to the
|
||||
* user.
|
||||
*/
|
||||
context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
|
||||
cancelAll();
|
||||
|
||||
if (!Shell.rootAccess()) {
|
||||
Log.e(App.TAG, "NotificationUtil -> Could not start root shell");
|
||||
return;
|
||||
}
|
||||
|
||||
boolean softReboot = intent.getBooleanExtra(EXTRA_SOFT_REBOOT, false);
|
||||
RebootUtil.reboot(softReboot ? RebootUtil.RebootType.USERSPACE : RebootUtil.RebootType.NORMAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,98 +0,0 @@
|
|||
package io.github.lsposed.manager.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.IPowerManager;
|
||||
import android.os.PowerManager;
|
||||
import android.os.RemoteException;
|
||||
|
||||
import com.topjohnwu.superuser.Shell;
|
||||
|
||||
import io.github.lsposed.manager.App;
|
||||
import io.github.lsposed.manager.BuildConfig;
|
||||
import rikka.shizuku.ShizukuBinderWrapper;
|
||||
import rikka.shizuku.ShizukuSystemProperties;
|
||||
import rikka.shizuku.SystemServiceHelper;
|
||||
|
||||
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
|
||||
public class RebootUtil {
|
||||
public enum RebootType {
|
||||
NORMAL,
|
||||
USERSPACE,
|
||||
RECOVERY,
|
||||
BOOTLOADER,
|
||||
DOWNLOAD,
|
||||
EDL;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString().toLowerCase();
|
||||
}
|
||||
}
|
||||
|
||||
public static void onRequestPermissionsResult(int requestCode, int grantResult) {
|
||||
RebootType mode = RebootType.values()[requestCode];
|
||||
if (grantResult == PERMISSION_GRANTED) {
|
||||
try {
|
||||
if (mode == RebootType.USERSPACE && !supportUserspaceReboot()) {
|
||||
ShizukuSystemProperties.set("ctl.restart", "surfaceflinger");
|
||||
} else {
|
||||
POWER_MANAGER.get().reboot(BuildConfig.DEBUG, mode.toString(), false);
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
e.printStackTrace();
|
||||
rebootWithShell(mode);
|
||||
}
|
||||
} else {
|
||||
rebootWithShell(mode);
|
||||
}
|
||||
}
|
||||
|
||||
private static final Singleton<IPowerManager> POWER_MANAGER = new Singleton<IPowerManager>() {
|
||||
@Override
|
||||
protected IPowerManager create() {
|
||||
return IPowerManager.Stub.asInterface(new ShizukuBinderWrapper(SystemServiceHelper.getSystemService(Context.POWER_SERVICE)));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
public static void reboot(RebootType mode) {
|
||||
int result = App.checkPermission(mode.ordinal(), 0);
|
||||
switch (result) {
|
||||
case 0:
|
||||
onRequestPermissionsResult(mode.ordinal(), PERMISSION_GRANTED);
|
||||
break;
|
||||
case -2:
|
||||
onRequestPermissionsResult(mode.ordinal(), PERMISSION_DENIED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static void rebootWithShell(RebootType mode) {
|
||||
if (!Shell.rootAccess()) {
|
||||
return;
|
||||
}
|
||||
String command;
|
||||
if (mode == RebootType.USERSPACE) {
|
||||
if (supportUserspaceReboot()) {
|
||||
command = "/system/bin/svc power reboot userspace";
|
||||
} else {
|
||||
command = "setprop ctl.restart surfaceflinger";
|
||||
}
|
||||
} else if (mode == RebootType.NORMAL) {
|
||||
command = "/system/bin/svc power reboot";
|
||||
} else if (mode == RebootType.RECOVERY) {
|
||||
Shell.su("touch /cache/recovery/boot").exec();
|
||||
command = "/system/bin/svc power recovery";
|
||||
} else {
|
||||
command = "/system/bin/svc power reboot " + mode.toString();
|
||||
}
|
||||
Shell.su(command).exec();
|
||||
}
|
||||
|
||||
private static boolean supportUserspaceReboot() {
|
||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && ((PowerManager) App.getInstance().getSystemService(Context.POWER_SERVICE)).isRebootingUserspaceSupported();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z" />
|
||||
</vector>
|
||||
|
|
@ -46,20 +46,6 @@
|
|||
android:textAppearance="@style/TextAppearance.AppCompat.Title"
|
||||
android:textSize="20sp"
|
||||
tools:ignore="RelativeOverlap" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/menu_more"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:clickable="true"
|
||||
android:contentDescription="@string/abc_action_menu_overflow_description"
|
||||
android:focusable="true"
|
||||
android:padding="2dp"
|
||||
app:srcCompat="@drawable/ic_more"
|
||||
tools:ignore="PrivateResource" />
|
||||
</RelativeLayout>
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
|
|
|
|||
|
|
@ -3,12 +3,6 @@
|
|||
<item
|
||||
android:id="@+id/app_menu_launch"
|
||||
android:title="@string/app_launch" />
|
||||
<item
|
||||
android:id="@+id/app_menu_compile_speed"
|
||||
android:title="@string/menu_title_compile_speed" />
|
||||
<item
|
||||
android:id="@+id/app_menu_compile_dexopt"
|
||||
android:title="@string/menu_title_compile_dexopt" />
|
||||
<item
|
||||
android:id="@+id/app_menu_compile_reset"
|
||||
android:title="@string/menu_title_compile_reset" />
|
||||
|
|
|
|||
|
|
@ -76,59 +76,4 @@
|
|||
</group>
|
||||
</menu>
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_optimize"
|
||||
android:title="@string/menu_optimize"
|
||||
app:showAsAction="never">
|
||||
<menu>
|
||||
<group>
|
||||
<item
|
||||
android:id="@+id/dexopt_all"
|
||||
android:title="@string/dexopt_now"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/speed_all"
|
||||
android:title="@string/speed_now"
|
||||
app:showAsAction="never" />
|
||||
</group>
|
||||
</menu>
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:title="@string/menu_reboot"
|
||||
app:showAsAction="never">
|
||||
<menu>
|
||||
<item
|
||||
android:id="@+id/soft_reboot"
|
||||
android:title="@string/soft_reboot"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot"
|
||||
android:title="@string/reboot_system"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_recovery"
|
||||
android:title="@string/reboot_recovery"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_bootloader"
|
||||
android:title="@string/reboot_bootloader"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_download"
|
||||
android:title="@string/reboot_download"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_edl"
|
||||
android:title="@string/reboot_edl"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
</item>
|
||||
</menu>
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/menu_optimize"
|
||||
android:title="@string/menu_optimize"
|
||||
app:showAsAction="never">
|
||||
<menu>
|
||||
<group>
|
||||
<item
|
||||
android:id="@+id/dexopt_all"
|
||||
android:title="@string/dexopt_now"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/speed_all"
|
||||
android:title="@string/speed_now"
|
||||
app:showAsAction="never" />
|
||||
</group>
|
||||
</menu>
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:title="@string/menu_reboot"
|
||||
app:showAsAction="never">
|
||||
<menu>
|
||||
<item
|
||||
android:id="@+id/soft_reboot"
|
||||
android:title="@string/soft_reboot"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot"
|
||||
android:title="@string/reboot_system"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_recovery"
|
||||
android:title="@string/reboot_recovery"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_bootloader"
|
||||
android:title="@string/reboot_bootloader"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_download"
|
||||
android:title="@string/reboot_download"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_edl"
|
||||
android:title="@string/reboot_edl"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
</item>
|
||||
|
||||
|
||||
</menu>
|
||||
|
|
@ -7,82 +7,4 @@
|
|||
android:title="@string/menuSearch"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/item_list_sort"
|
||||
android:title="@string/menu_sort"
|
||||
app:showAsAction="never">
|
||||
<menu>
|
||||
<group android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/item_sort_by_name"
|
||||
android:checked="true"
|
||||
android:title="@string/sort_by_name" />
|
||||
|
||||
<item
|
||||
android:id="@+id/item_sort_by_name_reverse"
|
||||
android:title="@string/sort_by_name_reverse" />
|
||||
|
||||
<item
|
||||
android:id="@+id/item_sort_by_package_name"
|
||||
android:title="@string/sort_by_package_name" />
|
||||
|
||||
<item
|
||||
android:id="@+id/item_sort_by_package_name_reverse"
|
||||
android:title="@string/sort_by_package_name_reverse" />
|
||||
|
||||
<item
|
||||
android:id="@+id/item_sort_by_install_time"
|
||||
android:title="@string/sort_by_install_time" />
|
||||
|
||||
<item
|
||||
android:id="@+id/item_sort_by_install_time_reverse"
|
||||
android:title="@string/sort_by_install_time_reverse" />
|
||||
<item
|
||||
android:id="@+id/item_sort_by_update_time"
|
||||
android:title="@string/sort_by_update_time" />
|
||||
|
||||
<item
|
||||
android:id="@+id/item_sort_by_update_time_reverse"
|
||||
android:title="@string/sort_by_update_time_reverse" />
|
||||
</group>
|
||||
</menu>
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:title="@string/menu_reboot"
|
||||
app:showAsAction="never">
|
||||
<menu>
|
||||
<item
|
||||
android:id="@+id/soft_reboot"
|
||||
android:title="@string/soft_reboot"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot"
|
||||
android:title="@string/reboot_system"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_recovery"
|
||||
android:title="@string/reboot_recovery"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_bootloader"
|
||||
android:title="@string/reboot_bootloader"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_download"
|
||||
android:title="@string/reboot_download"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/reboot_edl"
|
||||
android:title="@string/reboot_edl"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
</item>
|
||||
|
||||
</menu>
|
||||
|
|
@ -21,14 +21,11 @@
|
|||
<string name="nav_item_logs_err">模块日志</string>
|
||||
|
||||
<!-- Installer tab -->
|
||||
<string name="soft_reboot">软重启</string>
|
||||
<string name="reboot">重启</string>
|
||||
<string name="areyousure">您确定?</string>
|
||||
<string name="install_warning_title">请小心!</string>
|
||||
<string name="dont_show_again">不再提示</string>
|
||||
|
||||
<!-- File operations -->
|
||||
<string name="root_failed">无法获取 root 权限\n\n请确认您的设备已正确 root 且没有阻止 shell 命令</string>
|
||||
|
||||
<!-- Modules tab -->
|
||||
<string name="module_is_not_activated_yet">LSPosed 模块尚未激活</string>
|
||||
|
|
@ -74,20 +71,11 @@
|
|||
<!-- RepoLoader -->
|
||||
|
||||
<string name="warning_installed_on_external_storage">此模块因被安装在 SD 卡中而导致无法加载, 请将其移动到内部存储</string>
|
||||
<string name="export_">导出…</string>
|
||||
<string name="export_enabled_modules">导出已启用模块列表</string>
|
||||
<string name="export_installed_modules">导出已安装模块列表</string>
|
||||
<string name="no_installed_modules">没有任何已安装的模块</string>
|
||||
<string name="no_enabled_modules">没有任何已启用的模块</string>
|
||||
|
||||
<string name="info">信息</string>
|
||||
<string name="not_installed_no_lollipop">LSPosed 框架未安装</string>
|
||||
|
||||
<string name="scroll_top">滚动到顶部</string>
|
||||
<string name="reboot_recovery">重启至恢复模式</string>
|
||||
<string name="reboot_bootloader">重启至引导加载器</string>
|
||||
<string name="reboot_download">重启至下载模式</string>
|
||||
<string name="reboot_edl">重启至救援模式</string>
|
||||
<string name="loading">正在加载…</string>
|
||||
<string name="scroll_bottom">滚动到底部</string>
|
||||
<string name="skip_xposedminversion_check">关闭状态检查</string>
|
||||
|
|
@ -96,8 +84,6 @@
|
|||
|
||||
<!-- LSPd related -->
|
||||
<string name="menu_title_compile_reset">取消优化</string>
|
||||
<string name="menu_title_compile_speed">以 Speed 模式优化应用</string>
|
||||
<string name="menu_title_compile_dexopt">以 Dexopt 模式优化应用</string>
|
||||
<string name="compile_reset_msg">清除中…</string>
|
||||
<string name="compile_speed_msg">优化中…</string>
|
||||
<string name="notinstalled">LSPosed 框架未安装</string>
|
||||
|
|
@ -105,9 +91,6 @@
|
|||
<string name="verified_boot_deactivated">引导验证已禁用</string>
|
||||
<string name="verified_boot_none">无法获取引导验证状态</string>
|
||||
<string name="done">完成!</string>
|
||||
<string name="dexopt_now">以 Dexopt 模式优化全部应用</string>
|
||||
<string name="speed_now">以 Speed 模式优化全部应用</string>
|
||||
<string name="this_may_take_a_while">请稍后, 这将需要一段时间…</string>
|
||||
|
||||
<string name="pref_title_disable_verbose_log">禁用详细日志</string>
|
||||
<string name="logs_cannot_read">无法读取日志: \n</string>
|
||||
|
|
@ -115,7 +98,6 @@
|
|||
<string name="compile_failed">优化失败或返回值为空</string>
|
||||
<string name="compile_failed_with_info">优化失败: </string>
|
||||
<string name="not_installed">未安装</string>
|
||||
<string name="reboot_system">重启至系统</string>
|
||||
<string name="pref_title_disable_modules_log">禁用模块日志</string>
|
||||
<string name="pref_disable_modules_log_summary">模块抛出的的异常堆栈仍将正常抓取</string>
|
||||
<string name="follow_system">跟随系统</string>
|
||||
|
|
@ -139,9 +121,7 @@
|
|||
<string name="settings_enable_resources">启用资源钩子</string>
|
||||
<string name="settings_enable_resources_summary"><b>警告: </b> 资源钩子已被弃用</string>
|
||||
<string name="settings_variant">变体</string>
|
||||
<string name="menu_optimize">优化…</string>
|
||||
<string name="menu_show_system_apps">系统应用</string>
|
||||
<string name="menu_reboot">重启…</string>
|
||||
<string name="menu_sort">排序…</string>
|
||||
<string name="enable_module">启用模块</string>
|
||||
<string name="no_scope_selected">未选择任何应用。继续?</string>
|
||||
|
|
|
|||
|
|
@ -21,14 +21,11 @@
|
|||
<string name="nav_item_logs_err">模塊日誌</string>
|
||||
|
||||
<!-- Installer tab -->
|
||||
<string name="soft_reboot">軟重啟</string>
|
||||
<string name="reboot">重啟</string>
|
||||
<string name="areyousure">您確定?</string>
|
||||
<string name="install_warning_title">請小心!</string>
|
||||
<string name="dont_show_again">不再提示</string>
|
||||
|
||||
<!-- File operations -->
|
||||
<string name="root_failed">無法獲取 root 權限\n\n請確認您的設備已正確 root 且沒有阻止 shell 命令</string>
|
||||
|
||||
<!-- Modules tab -->
|
||||
<string name="module_is_not_activated_yet">LSPosed 模塊尚未激活</string>
|
||||
|
|
@ -73,20 +70,11 @@
|
|||
<!-- RepoLoader -->
|
||||
|
||||
<string name="warning_installed_on_external_storage">此模塊因被安裝在 SD 卡中而導致無法加載, 請將其移動到內部存儲</string>
|
||||
<string name="export_">導出…</string>
|
||||
<string name="export_enabled_modules">導出已啟用模塊列表</string>
|
||||
<string name="export_installed_modules">導出已安裝模塊列表</string>
|
||||
<string name="no_installed_modules">沒有任何已安裝的模塊</string>
|
||||
<string name="no_enabled_modules">沒有任何已啟用的模塊</string>
|
||||
|
||||
<string name="info">信息</string>
|
||||
<string name="not_installed_no_lollipop">LSPosed 框架未安裝</string>
|
||||
|
||||
<string name="scroll_top">滾動到頂部</string>
|
||||
<string name="reboot_recovery">重啟至恢復模式</string>
|
||||
<string name="reboot_bootloader">重啟至引導加載器</string>
|
||||
<string name="reboot_download">重啟至下載模式</string>
|
||||
<string name="reboot_edl">重啟至救援模式</string>
|
||||
<string name="loading">正在加載…</string>
|
||||
<string name="scroll_bottom">滾動到底部</string>
|
||||
<string name="skip_xposedminversion_check">關閉狀態檢查</string>
|
||||
|
|
@ -95,8 +83,6 @@
|
|||
|
||||
<!-- LSPd related -->
|
||||
<string name="menu_title_compile_reset">取消優化</string>
|
||||
<string name="menu_title_compile_speed">以 Speed 模式優化應用</string>
|
||||
<string name="menu_title_compile_dexopt">以 Dexopt 模式優化應用</string>
|
||||
<string name="compile_reset_msg">清除中…</string>
|
||||
<string name="compile_speed_msg">優化中…</string>
|
||||
<string name="notinstalled">LSPosed 框架未安裝</string>
|
||||
|
|
@ -104,16 +90,12 @@
|
|||
<string name="verified_boot_deactivated">引導驗證已禁用</string>
|
||||
<string name="verified_boot_none">無法獲取引導驗證狀態</string>
|
||||
<string name="done">完成!</string>
|
||||
<string name="dexopt_now">以 Dexopt 模式優化全部應用</string>
|
||||
<string name="speed_now">以 Speed 模式優化全部應用</string>
|
||||
<string name="this_may_take_a_while">請稍後, 這將需要一段時間…</string>
|
||||
|
||||
<string name="pref_title_disable_verbose_log">禁用詳細日誌</string>
|
||||
<string name="logs_cannot_read">無法讀取日誌: \n</string>
|
||||
<string name="app_launch">運行</string>
|
||||
<string name="compile_failed">優化失敗或返回值為空</string>
|
||||
<string name="not_installed">未安裝</string>
|
||||
<string name="reboot_system">重啟至系統</string>
|
||||
<string name="pref_title_disable_modules_log">禁用模塊日誌</string>
|
||||
<string name="pref_disable_modules_log_summary">模塊拋出的的異常堆棧仍將正常抓取</string>
|
||||
<string name="follow_system">跟隨系統</string>
|
||||
|
|
|
|||
|
|
@ -21,14 +21,11 @@
|
|||
<string name="nav_item_logs_err">模組日誌</string>
|
||||
|
||||
<!-- Installer tab -->
|
||||
<string name="soft_reboot">軟重啟</string>
|
||||
<string name="reboot">重啟</string>
|
||||
<string name="areyousure">您確定?</string>
|
||||
<string name="install_warning_title">請小心!</string>
|
||||
<string name="dont_show_again">不再提示</string>
|
||||
|
||||
<!-- File operations -->
|
||||
<string name="root_failed">無法獲取 root 許可權\n\n請確認您的裝置已正確 root 且沒有阻止 shell 命令</string>
|
||||
|
||||
<!-- Modules tab -->
|
||||
<string name="module_is_not_activated_yet">LSPosed 模組尚未啟用</string>
|
||||
|
|
@ -73,20 +70,11 @@
|
|||
<!-- RepoLoader -->
|
||||
|
||||
<string name="warning_installed_on_external_storage">此模組因被安裝在 SD 卡中而導致無法載入, 請將其移動到內部儲存</string>
|
||||
<string name="export_">匯出…</string>
|
||||
<string name="export_enabled_modules">匯出已啟用模組列表</string>
|
||||
<string name="export_installed_modules">匯出已安裝模組列表</string>
|
||||
<string name="no_installed_modules">沒有任何已安裝的模組</string>
|
||||
<string name="no_enabled_modules">沒有任何已啟用的模組</string>
|
||||
|
||||
<string name="info">資訊</string>
|
||||
<string name="not_installed_no_lollipop">LSPosed 框架未安裝</string>
|
||||
|
||||
<string name="scroll_top">滾動到頂部</string>
|
||||
<string name="reboot_recovery">重啟至恢復模式</string>
|
||||
<string name="reboot_bootloader">重啟至引導載入器</string>
|
||||
<string name="reboot_download">重啟至下載模式</string>
|
||||
<string name="reboot_edl">重啟至救援模式</string>
|
||||
<string name="loading">正在載入…</string>
|
||||
<string name="scroll_bottom">滾動到底部</string>
|
||||
<string name="skip_xposedminversion_check">關閉狀態檢查</string>
|
||||
|
|
@ -95,8 +83,6 @@
|
|||
|
||||
<!-- LSPd related -->
|
||||
<string name="menu_title_compile_reset">取消優化</string>
|
||||
<string name="menu_title_compile_speed">以 Speed 模式優化 App</string>
|
||||
<string name="menu_title_compile_dexopt">以 Dexopt 模式優化 App</string>
|
||||
<string name="compile_reset_msg">清除中…</string>
|
||||
<string name="compile_speed_msg">優化中…</string>
|
||||
<string name="notinstalled">LSPosed 框架未安裝</string>
|
||||
|
|
@ -104,16 +90,12 @@
|
|||
<string name="verified_boot_deactivated">引導驗證已禁用</string>
|
||||
<string name="verified_boot_none">無法獲取引導驗證狀態</string>
|
||||
<string name="done">完成!</string>
|
||||
<string name="dexopt_now">以 Dexopt 模式優化全部 App</string>
|
||||
<string name="speed_now">以 Speed 模式優化全部 App</string>
|
||||
<string name="this_may_take_a_while">請稍後, 這將需要一段時間…</string>
|
||||
|
||||
<string name="pref_title_disable_verbose_log">禁用詳細日誌</string>
|
||||
<string name="logs_cannot_read">無法讀取日誌: \n</string>
|
||||
<string name="app_launch">執行</string>
|
||||
<string name="compile_failed">優化失敗或返回值為空</string>
|
||||
<string name="not_installed">未安裝</string>
|
||||
<string name="reboot_system">重啟至系統</string>
|
||||
<string name="pref_title_disable_modules_log">禁用模組日誌</string>
|
||||
<string name="pref_disable_modules_log_summary">模組丟擲的的異常堆疊仍將正常抓取</string>
|
||||
<string name="follow_system">跟隨系統</string>
|
||||
|
|
|
|||
|
|
@ -22,14 +22,11 @@
|
|||
<string name="nav_item_logs_err">Modules Logs</string>
|
||||
|
||||
<!-- Installer tab -->
|
||||
<string name="soft_reboot">Soft reboot</string>
|
||||
<string name="reboot">Reboot</string>
|
||||
<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>
|
||||
|
||||
<!-- File operations -->
|
||||
<string name="root_failed">Failed to get root access\n\nMake sure your device is rooted properly and you have not blocked shell commands</string>
|
||||
|
||||
<!-- Modules tab -->
|
||||
<string name="module_is_not_activated_yet">LSPosed module is not activated yet</string>
|
||||
|
|
@ -77,20 +74,11 @@
|
|||
<!-- RepoLoader -->
|
||||
|
||||
<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="export_">Export…</string>
|
||||
<string name="export_enabled_modules">Export enabled modules list</string>
|
||||
<string name="export_installed_modules">Export installed modules list</string>
|
||||
<string name="no_installed_modules">There are no installed modules!</string>
|
||||
<string name="no_enabled_modules">There are no modules enabled</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="reboot_recovery">Reboot to Recovery</string>
|
||||
<string name="reboot_bootloader">Reboot to Bootloader</string>
|
||||
<string name="reboot_download">Reboot to Download</string>
|
||||
<string name="reboot_edl">Reboot to Emergency</string>
|
||||
<string name="loading">Loading…</string>
|
||||
<string name="scroll_bottom">Scroll to bottom</string>
|
||||
<string name="skip_xposedminversion_check">Skip status check</string>
|
||||
|
|
@ -99,9 +87,6 @@
|
|||
<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>
|
||||
|
||||
<string name="dexopt_now">Optimize all apps with Dexopt</string>
|
||||
<string name="speed_now">Optimize all apps with Speed mode</string>
|
||||
<string name="this_may_take_a_while">Please wait, this may take a while…</string>
|
||||
<string name="done">Done!</string>
|
||||
<string name="verified_boot_deactivated">Verified Boot is deactivated</string>
|
||||
<string name="verified_boot_none">Could not detect Verified Boot state</string>
|
||||
|
|
@ -109,8 +94,6 @@
|
|||
|
||||
<!-- LSPd related -->
|
||||
<string name="menu_title_compile_reset">De-optimize</string>
|
||||
<string name="menu_title_compile_speed">Optimize with Speed mode</string>
|
||||
<string name="menu_title_compile_dexopt">Optimize with Dexopt mode</string>
|
||||
<string name="compile_reset_msg">Resetting …</string>
|
||||
<string name="compile_speed_msg">Optimizing …</string>
|
||||
|
||||
|
|
@ -125,7 +108,6 @@
|
|||
<string name="compile_failed">Optimization failed or return value is empty</string>
|
||||
<string name="compile_failed_with_info">Optimization failed: </string>
|
||||
<string name="not_installed">Not installed</string>
|
||||
<string name="reboot_system">Reboot to System</string>
|
||||
<string name="pref_title_disable_modules_log">Disable modules logs</string>
|
||||
<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>
|
||||
|
|
@ -146,9 +128,7 @@
|
|||
<string name="settings_group_theme">Theme</string>
|
||||
<string name="material_design_2">Material Design 2</string>
|
||||
<string name="settings_variant">Variant</string>
|
||||
<string name="menu_optimize">Optimize…</string>
|
||||
<string name="menu_show_system_apps">System apps</string>
|
||||
<string name="menu_reboot">Reboot…</string>
|
||||
<string name="menu_sort">Sorting…</string>
|
||||
<string name="enable_module">Enable module</string>
|
||||
<string name="no_scope_selected">You did not select any app. Continue?</string>
|
||||
|
|
|
|||
Loading…
Reference in New Issue