这是indexloc提供的服务,不要输入任何密码
Skip to content

Commit 6112bf6

Browse files
Added: Add support to send crash notifications if exceptions are caught in TermuxApiReceiver and ResultReturner
This will allow users to know if an exception caused an API command to fail instead of having to check `logcat`. Currently, `Termux:API` app is broken a lot and crash reports from users for edge case exceptions or device specific exceptions will help solve such issues. In future, likely `stderr` will be used instead, once support is added.
1 parent f2c1342 commit 6112bf6

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

app/src/main/java/com/termux/api/TermuxAPIApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.app.Application;
44
import android.content.Context;
55

6+
import com.termux.api.util.ResultReturner;
67
import com.termux.shared.logger.Logger;
78
import com.termux.shared.termux.TermuxConstants;
89
import com.termux.shared.termux.crash.TermuxCrashUtils;
@@ -16,6 +17,7 @@ public void onCreate() {
1617

1718
// Set crash handler for the app
1819
TermuxCrashUtils.setCrashHandler(this);
20+
ResultReturner.setContext(this);
1921

2022
// Set log config for the app
2123
setLogConfig(getApplicationContext(), true);

app/src/main/java/com/termux/api/TermuxApiReceiver.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
import com.termux.api.activities.TermuxApiPermissionActivity;
4949
import com.termux.shared.data.IntentUtils;
5050
import com.termux.shared.logger.Logger;
51+
import com.termux.shared.termux.TermuxConstants;
52+
import com.termux.shared.termux.crash.TermuxCrashUtils;
5153

5254
public class TermuxApiReceiver extends BroadcastReceiver {
5355

@@ -61,9 +63,13 @@ public void onReceive(Context context, Intent intent) {
6163
try {
6264
doWork(context, intent);
6365
} catch (Exception e) {
66+
String message = "Error in " + LOG_TAG;
6467
// Make sure never to throw exception from BroadCastReceiver to avoid "process is bad"
6568
// behaviour from the Android system.
66-
Logger.logStackTraceWithMessage(LOG_TAG, "Error in TermuxApiReceiver", e);
69+
Logger.logStackTraceWithMessage(LOG_TAG, message, e);
70+
71+
TermuxCrashUtils.sendPluginCrashReportNotification(context, LOG_TAG,
72+
TermuxConstants.TERMUX_API_APP_NAME + " Error", message, e);
6773
}
6874
}
6975

app/src/main/java/com/termux/api/util/ResultReturner.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
package com.termux.api.util;
22

3+
import android.annotation.SuppressLint;
34
import android.app.Activity;
45
import android.app.IntentService;
56
import android.content.BroadcastReceiver;
67
import android.content.BroadcastReceiver.PendingResult;
8+
import android.content.Context;
79
import android.content.Intent;
810
import android.net.LocalSocket;
911
import android.net.LocalSocketAddress;
1012
import android.os.ParcelFileDescriptor;
1113
import android.util.JsonWriter;
1214

1315
import com.termux.shared.logger.Logger;
16+
import com.termux.shared.termux.TermuxConstants;
17+
import com.termux.shared.termux.crash.TermuxCrashUtils;
1418

1519
import java.io.ByteArrayOutputStream;
1620
import java.io.FileDescriptor;
@@ -21,6 +25,9 @@
2125

2226
public abstract class ResultReturner {
2327

28+
@SuppressLint("StaticFieldLeak")
29+
private static Context context;
30+
2431
private static final String LOG_TAG = "ResultReturner";
2532

2633
/**
@@ -183,7 +190,12 @@ public static void returnData(Object context, final Intent intent, final ResultW
183190
activity.setResult(0);
184191
}
185192
} catch (Exception e) {
186-
Logger.logStackTraceWithMessage(LOG_TAG, "Error in ResultReturner", e);
193+
String message = "Error in " + LOG_TAG;
194+
Logger.logStackTraceWithMessage(LOG_TAG, message, e);
195+
196+
TermuxCrashUtils.sendPluginCrashReportNotification(ResultReturner.context, LOG_TAG,
197+
TermuxConstants.TERMUX_API_APP_NAME + " Error", message, e);
198+
187199
if (asyncResult != null) {
188200
asyncResult.setResultCode(1);
189201
} else if (activity != null) {
@@ -209,4 +221,8 @@ public static void returnData(Object context, final Intent intent, final ResultW
209221
}
210222
}
211223

224+
public static void setContext(Context context) {
225+
ResultReturner.context = context.getApplicationContext();
226+
}
227+
212228
}

0 commit comments

Comments
 (0)