mirror of
https://github.com/Team-xManager/xManager.git
synced 2024-11-23 12:06:43 +01:00
Add files via upload
This commit is contained in:
parent
955fe00fa3
commit
567afbfc1b
54
app/src/main/java/com/xc3fff0e/xmanager/xManager.java
Normal file
54
app/src/main/java/com/xc3fff0e/xmanager/xManager.java
Normal file
@ -0,0 +1,54 @@
|
||||
package com.xc3fff0e.xmanager;
|
||||
|
||||
import android.app.AlarmManager;
|
||||
import android.app.Application;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Process;
|
||||
import android.util.Log;
|
||||
|
||||
public class xManager extends Application {
|
||||
|
||||
private static Context mApplicationContext;
|
||||
private Thread.UncaughtExceptionHandler uncaughtExceptionHandler;
|
||||
|
||||
public static Context getContext() {
|
||||
return mApplicationContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
mApplicationContext = getApplicationContext();
|
||||
this.uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
|
||||
|
||||
Thread.setDefaultUncaughtExceptionHandler(
|
||||
new Thread.UncaughtExceptionHandler() {
|
||||
@Override
|
||||
public void uncaughtException(Thread thread, Throwable throwable) {
|
||||
Intent intent = new Intent(getApplicationContext(), DebugActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
intent.putExtra("error", Log.getStackTraceString(throwable));
|
||||
|
||||
PendingIntent pendingIntent =
|
||||
PendingIntent.getActivity(
|
||||
getApplicationContext(),
|
||||
11111,
|
||||
intent,
|
||||
PendingIntent.FLAG_ONE_SHOT
|
||||
);
|
||||
|
||||
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
|
||||
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 1000, pendingIntent);
|
||||
|
||||
xManagerLogger.broadcastLog(Log.getStackTraceString(throwable));
|
||||
Process.killProcess(Process.myPid());
|
||||
System.exit(1);
|
||||
|
||||
uncaughtExceptionHandler.uncaughtException(thread, throwable);
|
||||
}
|
||||
});
|
||||
xManagerLogger.startLogging();
|
||||
super.onCreate();
|
||||
}
|
||||
}
|
71
app/src/main/java/com/xc3fff0e/xmanager/xManagerLogger.java
Normal file
71
app/src/main/java/com/xc3fff0e/xmanager/xManagerLogger.java
Normal file
@ -0,0 +1,71 @@
|
||||
package com.xc3fff0e.xmanager;
|
||||
|
||||
import android.content.Intent;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
public class xManagerLogger {
|
||||
|
||||
private static Thread loggerThread = new Thread() {
|
||||
@Override
|
||||
public void run() {
|
||||
isRunning = true;
|
||||
|
||||
try {
|
||||
Runtime.getRuntime().exec("logcat -c");
|
||||
Process process = Runtime.getRuntime().exec("logcat");
|
||||
|
||||
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
|
||||
String logTxt = bufferedReader.readLine();
|
||||
do {
|
||||
broadcastLog(logTxt);
|
||||
} while (isRunning && ((logTxt = bufferedReader.readLine()) != null));
|
||||
|
||||
// Thread got stopped, restart if not stopping wantedly
|
||||
if (isRunning) {
|
||||
broadcastLog("Logger got killed. Restarting.");
|
||||
startLogging();
|
||||
} else {
|
||||
broadcastLog("Logger stopped.");
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
broadcastLog(e.toString());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private static volatile boolean isRunning = false;
|
||||
|
||||
public static void startLogging() {
|
||||
if (!isRunning) {
|
||||
loggerThread.start();
|
||||
} else {
|
||||
throw new IllegalStateException("Logger already running");
|
||||
}
|
||||
}
|
||||
|
||||
public static void broadcastLog(String log) {
|
||||
Context context = xManager.getContext();
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setAction("com.xc3fff0e.xmanager.ACTION_NEW_DEBUG_LOG");
|
||||
intent.putExtra("log", log);
|
||||
intent.putExtra("packageName", context.getPackageName());
|
||||
context.sendBroadcast(intent);
|
||||
}
|
||||
|
||||
public static void stopLogging() {
|
||||
if (isRunning) {
|
||||
isRunning = false;
|
||||
broadcastLog("Stopping logger by user request.");
|
||||
} else {
|
||||
throw new IllegalStateException("Logger not running");
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user