Adapt to new logs path
This commit is contained in:
parent
5521826dea
commit
2831b9b3a1
|
|
@ -40,6 +40,14 @@ public class Constants {
|
||||||
return App.getInstance().getApplicationInfo().deviceProtectedDataDir + "/";
|
return App.getInstance().getApplicationInfo().deviceProtectedDataDir + "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getLogDir() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getMiscDir() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isPermissive() {
|
public static boolean isPermissive() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,17 +26,15 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
import com.google.android.material.snackbar.Snackbar;
|
import com.google.android.material.snackbar.Snackbar;
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Scanner;
|
import java.util.List;
|
||||||
|
|
||||||
import io.github.lsposed.manager.BuildConfig;
|
import io.github.lsposed.manager.BuildConfig;
|
||||||
import io.github.lsposed.manager.Constants;
|
import io.github.lsposed.manager.Constants;
|
||||||
|
|
@ -47,16 +45,24 @@ import io.github.lsposed.manager.databinding.ItemLogBinding;
|
||||||
import io.github.lsposed.manager.util.LinearLayoutManagerFix;
|
import io.github.lsposed.manager.util.LinearLayoutManagerFix;
|
||||||
|
|
||||||
public class LogsActivity extends BaseActivity {
|
public class LogsActivity extends BaseActivity {
|
||||||
private boolean allLog = false;
|
private int logType = 0;
|
||||||
private final File fileErrorLog = new File(Constants.getBaseDir() + "log/error.log");
|
private final Path modulesLog = Paths.get(Constants.getLogDir(), "modules.log");
|
||||||
private final File fileErrorLogOld = new File(Constants.getBaseDir() + "log/error.log.old");
|
private final Path allLog = Paths.get(Constants.getLogDir(), "all.log");
|
||||||
private final File fileAllLog = new File(Constants.getBaseDir() + "log/all.log");
|
|
||||||
private final File fileAllLogOld = new File(Constants.getBaseDir() + "log/all.log.old");
|
|
||||||
private LogsAdapter adapter;
|
private LogsAdapter adapter;
|
||||||
private final Handler handler = new Handler(Looper.getMainLooper());
|
private final Handler handler = new Handler(Looper.getMainLooper());
|
||||||
private ActivityLogsBinding binding;
|
private ActivityLogsBinding binding;
|
||||||
private LinearLayoutManagerFix layoutManager;
|
private LinearLayoutManagerFix layoutManager;
|
||||||
|
|
||||||
|
private Path getLogFile() {
|
||||||
|
switch (logType) {
|
||||||
|
case 0:
|
||||||
|
default:
|
||||||
|
return modulesLog;
|
||||||
|
case 1:
|
||||||
|
return allLog;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
@ -87,13 +93,17 @@ public class LogsActivity extends BaseActivity {
|
||||||
layoutManager = new LinearLayoutManagerFix(this);
|
layoutManager = new LinearLayoutManagerFix(this);
|
||||||
binding.recyclerView.setLayoutManager(layoutManager);
|
binding.recyclerView.setLayoutManager(layoutManager);
|
||||||
setupRecyclerViewInsets(binding.recyclerView, binding.getRoot());
|
setupRecyclerViewInsets(binding.recyclerView, binding.getRoot());
|
||||||
if (Files.exists(Paths.get(Constants.getBaseDir(), "conf/disable_verbose_log"))) {
|
try {
|
||||||
binding.slidingTabs.setVisibility(View.GONE);
|
if (Files.readAllBytes(Paths.get(Constants.getMiscDir(), "disable_verbose_log"))[0] == 49) {
|
||||||
|
binding.slidingTabs.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
binding.slidingTabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
|
binding.slidingTabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onTabSelected(TabLayout.Tab tab) {
|
public void onTabSelected(TabLayout.Tab tab) {
|
||||||
allLog = tab.getPosition() != 0;
|
logType = tab.getPosition();
|
||||||
reloadErrorLog();
|
reloadErrorLog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -159,15 +169,12 @@ public class LogsActivity extends BaseActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reloadErrorLog() {
|
private void reloadErrorLog() {
|
||||||
//noinspection deprecation
|
new LogsReader().execute(getLogFile());
|
||||||
new LogsReader().execute(allLog ? fileAllLog : fileErrorLog);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clear() {
|
private void clear() {
|
||||||
try {
|
try {
|
||||||
new FileOutputStream(allLog ? fileAllLog : fileErrorLog).close();
|
Files.write(getLogFile(), new byte[0]);
|
||||||
//noinspection ResultOfMethodCallIgnored
|
|
||||||
(allLog ? fileAllLogOld : fileErrorLogOld).delete();
|
|
||||||
adapter.setEmpty();
|
adapter.setEmpty();
|
||||||
Snackbar.make(binding.snackbar, R.string.logs_cleared, Snackbar.LENGTH_SHORT).show();
|
Snackbar.make(binding.snackbar, R.string.logs_cleared, Snackbar.LENGTH_SHORT).show();
|
||||||
reloadErrorLog();
|
reloadErrorLog();
|
||||||
|
|
@ -177,7 +184,7 @@ public class LogsActivity extends BaseActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void send() {
|
private void send() {
|
||||||
Uri uri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileprovider", allLog ? fileAllLog : fileErrorLog);
|
Uri uri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".fileprovider", getLogFile().toFile());
|
||||||
Intent sendIntent = new Intent();
|
Intent sendIntent = new Intent();
|
||||||
sendIntent.setAction(Intent.ACTION_SEND);
|
sendIntent.setAction(Intent.ACTION_SEND);
|
||||||
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
|
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||||
|
|
@ -215,13 +222,7 @@ public class LogsActivity extends BaseActivity {
|
||||||
try {
|
try {
|
||||||
OutputStream os = getContentResolver().openOutputStream(uri);
|
OutputStream os = getContentResolver().openOutputStream(uri);
|
||||||
if (os != null) {
|
if (os != null) {
|
||||||
FileInputStream in = new FileInputStream(allLog ? fileAllLog : fileErrorLog);
|
Files.copy(getLogFile(), os);
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
int len;
|
|
||||||
while ((len = in.read(buffer)) > 0) {
|
|
||||||
os.write(buffer, 0, len);
|
|
||||||
}
|
|
||||||
os.close();
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Snackbar.make(binding.snackbar, getResources().getString(R.string.logs_save_failed) + "\n" + e.getMessage(), Snackbar.LENGTH_LONG).show();
|
Snackbar.make(binding.snackbar, getResources().getString(R.string.logs_save_failed) + "\n" + e.getMessage(), Snackbar.LENGTH_LONG).show();
|
||||||
|
|
@ -233,7 +234,7 @@ public class LogsActivity extends BaseActivity {
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
private class LogsReader extends AsyncTask<File, Integer, ArrayList<String>> {
|
private class LogsReader extends AsyncTask<Path, Integer, List<String>> {
|
||||||
private AlertDialog mProgressDialog;
|
private AlertDialog mProgressDialog;
|
||||||
private final Runnable mRunnable = new Runnable() {
|
private final Runnable mRunnable = new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -253,18 +254,13 @@ public class LogsActivity extends BaseActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ArrayList<String> doInBackground(File... log) {
|
protected List<String> doInBackground(Path... log) {
|
||||||
Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 2);
|
Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 2);
|
||||||
|
|
||||||
ArrayList<String> logs = new ArrayList<>();
|
List<String> logs = new ArrayList<>();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
File logfile = log[0];
|
logs = Files.readAllLines(log[0]);
|
||||||
try (Scanner scanner = new Scanner(logfile)) {
|
|
||||||
while (scanner.hasNextLine()) {
|
|
||||||
logs.add(scanner.nextLine());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return logs;
|
return logs;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logs.add(LogsActivity.this.getResources().getString(R.string.logs_cannot_read));
|
logs.add(LogsActivity.this.getResources().getString(R.string.logs_cannot_read));
|
||||||
|
|
@ -277,7 +273,7 @@ public class LogsActivity extends BaseActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(ArrayList<String> logs) {
|
protected void onPostExecute(List<String> logs) {
|
||||||
if (logs.size() == 0) {
|
if (logs.size() == 0) {
|
||||||
adapter.setEmpty();
|
adapter.setEmpty();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -314,7 +310,7 @@ public class LogsActivity extends BaseActivity {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setLogs(ArrayList<String> logs) {
|
void setLogs(List<String> logs) {
|
||||||
this.logs.clear();
|
this.logs.clear();
|
||||||
this.logs.addAll(logs);
|
this.logs.addAll(logs);
|
||||||
notifyDataSetChanged();
|
notifyDataSetChanged();
|
||||||
|
|
|
||||||
|
|
@ -132,9 +132,9 @@ public class SettingsActivity extends BaseActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class SettingsFragment extends PreferenceFragmentCompat {
|
public static class SettingsFragment extends PreferenceFragmentCompat {
|
||||||
private static final Path enableResourcesFlag = Paths.get(Constants.getBaseDir(), "conf/enable_resources");
|
private static final Path enableResourcesFlag = Paths.get(Constants.getConfDir(), "enable_resources");
|
||||||
private static final Path disableVerboseLogsFlag = Paths.get(Constants.getBaseDir()).getParent().resolve("disable_verbose_log");
|
private static final Path disableVerboseLogsFlag = Paths.get(Constants.getMiscDir(), "disable_verbose_log");
|
||||||
private static final Path variantFlag = Paths.get(Constants.getBaseDir()).getParent().resolve("variant");
|
private static final Path variantFlag = Paths.get(Constants.getMiscDir(), "variant");
|
||||||
ActivityResultLauncher<String> backupLauncher = registerForActivityResult(new ActivityResultContracts.CreateDocument(),
|
ActivityResultLauncher<String> backupLauncher = registerForActivityResult(new ActivityResultContracts.CreateDocument(),
|
||||||
uri -> {
|
uri -> {
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,10 @@ namespace lspd {
|
||||||
return env->NewStringUTF(ConfigManager::GetInstance()->GetDataPathPrefix().c_str());
|
return env->NewStringUTF(ConfigManager::GetInstance()->GetDataPathPrefix().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LSP_DEF_NATIVE_METHOD(jstring, ConfigManager, getLogPath) {
|
||||||
|
return env->NewStringUTF(ConfigManager::GetLogPath().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
LSP_DEF_NATIVE_METHOD(jstring, ConfigManager, getConfigPath, jstring jSuffix) {
|
LSP_DEF_NATIVE_METHOD(jstring, ConfigManager, getConfigPath, jstring jSuffix) {
|
||||||
const char *suffix = env->GetStringUTFChars(jSuffix, JNI_FALSE);
|
const char *suffix = env->GetStringUTFChars(jSuffix, JNI_FALSE);
|
||||||
auto result = ConfigManager::GetInstance()->GetConfigPath(suffix);
|
auto result = ConfigManager::GetInstance()->GetConfigPath(suffix);
|
||||||
|
|
@ -68,6 +72,8 @@ namespace lspd {
|
||||||
LSP_NATIVE_METHOD(ConfigManager, isResourcesHookEnabled, "()Z"),
|
LSP_NATIVE_METHOD(ConfigManager, isResourcesHookEnabled, "()Z"),
|
||||||
LSP_NATIVE_METHOD(ConfigManager, getInstallerPackageName, "()Ljava/lang/String;"),
|
LSP_NATIVE_METHOD(ConfigManager, getInstallerPackageName, "()Ljava/lang/String;"),
|
||||||
LSP_NATIVE_METHOD(ConfigManager, getDataPathPrefix, "()Ljava/lang/String;"),
|
LSP_NATIVE_METHOD(ConfigManager, getDataPathPrefix, "()Ljava/lang/String;"),
|
||||||
|
LSP_NATIVE_METHOD(ConfigManager, getMiscPath, "()Ljava/lang/String;"),
|
||||||
|
LSP_NATIVE_METHOD(ConfigManager, getLogPath, "()Ljava/lang/String;"),
|
||||||
LSP_NATIVE_METHOD(ConfigManager, getPrefsPath,
|
LSP_NATIVE_METHOD(ConfigManager, getPrefsPath,
|
||||||
"(Ljava/lang/String;)Ljava/lang/String;"),
|
"(Ljava/lang/String;)Ljava/lang/String;"),
|
||||||
LSP_NATIVE_METHOD(ConfigManager, getCachePath,
|
LSP_NATIVE_METHOD(ConfigManager, getCachePath,
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,18 @@ public class XposedInstallerHooker {
|
||||||
return ConfigManager.isPermissive();
|
return ConfigManager.isPermissive();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
XposedHelpers.findAndHookMethod(ConstantsClass, "getLogDir", new XC_MethodReplacement() {
|
||||||
|
@Override
|
||||||
|
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||||
|
return ConfigManager.getLogPath();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
XposedHelpers.findAndHookMethod(ConstantsClass, "getMiscDir", new XC_MethodReplacement() {
|
||||||
|
@Override
|
||||||
|
protected Object replaceHookedMethod(MethodHookParam param) {
|
||||||
|
return ConfigManager.getMiscPath();
|
||||||
|
}
|
||||||
|
});
|
||||||
Utils.logI("Hooked LSPosed Manager");
|
Utils.logI("Hooked LSPosed Manager");
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
Utils.logW("Could not hook LSPosed Manager", t);
|
Utils.logW("Could not hook LSPosed Manager", t);
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,10 @@ public class ConfigManager {
|
||||||
|
|
||||||
public static native String getCachePath(String suffix);
|
public static native String getCachePath(String suffix);
|
||||||
|
|
||||||
|
public static native String getLogPath();
|
||||||
|
|
||||||
|
public static native String getMiscPath();
|
||||||
|
|
||||||
public static native String getBaseConfigPath();
|
public static native String getBaseConfigPath();
|
||||||
|
|
||||||
public static native String getDataPathPrefix();
|
public static native String getDataPathPrefix();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue