Skip to content

Commit 542bb10

Browse files
authored
Merge pull request #9 from ratulhasanrahat/dev
CrashHandler bug fix
2 parents 349be8f + a4c920d commit 542bb10

File tree

5 files changed

+299
-11
lines changed

5 files changed

+299
-11
lines changed

.github/workflows/build-debug-apk.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ on:
44
push:
55
branches:
66
- main
7+
- dev
78
jobs:
89
build:
910
name: Build debug apk
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
package="io.github.ratul.topactivity"
5+
android:versionCode="18"
6+
android:versionName="1.5.8">
7+
8+
<uses-sdk
9+
android:minSdkVersion="24"
10+
android:targetSdkVersion="28"/>
11+
12+
<uses-permission
13+
android:name="android.permission.GET_TASKS"/>
14+
15+
<uses-permission
16+
android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
17+
18+
<uses-permission
19+
android:name="android.permission.PACKAGE_USAGE_STATS"/>
20+
21+
<uses-permission
22+
android:name="android.permission.QUERY_ALL_PACKAGES"/>
23+
24+
<queries>
25+
26+
<intent>
27+
28+
<action
29+
android:name="android.accessibilityservice.AccessibilityService"/>
30+
31+
</intent>
32+
33+
</queries>
34+
35+
<application
36+
android:name=".App"
37+
android:label="@string/app_name"
38+
android:icon="@drawable/ic_launcher"
39+
android:theme="@style/AppTheme"
40+
android:allowBackup="true"
41+
android:supportsPictureInPicture="true"
42+
android:resizeableActivity="true"
43+
android:roundIcon="@drawable/ic_launcher_round">
44+
45+
<activity
46+
android:name=".ui.MainActivity"
47+
android:label="@string/app_name"
48+
android:exported="true"
49+
android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout"
50+
android:hardwareAccelerated="true"
51+
android:screenOrientation="portrait"
52+
android:launchMode="singleTask"
53+
android:maxRecents="1">
54+
55+
<intent-filter>
56+
57+
<action
58+
android:name="android.intent.action.MAIN"/>
59+
60+
<category
61+
android:name="android.intent.category.LAUNCHER"/>
62+
63+
</intent-filter>
64+
65+
<meta-data
66+
android:name="android.app.shortcuts"
67+
android:resource="@xml/app_shortcuts"/>
68+
69+
</activity>
70+
71+
<activity
72+
android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout"
73+
android:hardwareAccelerated="true"
74+
android:screenOrientation="portrait"
75+
android:launchMode="singleTask"
76+
android:name=".ui.CrashActivity"
77+
android:maxRecents="1"
78+
android:label="@string/app_name"
79+
android:exported="true"/>
80+
81+
<activity
82+
android:name=".ui.ShortcutHandlerActivity"
83+
android:excludeFromRecents="true"
84+
android:enabled="true"
85+
android:exported="true"
86+
android:theme="@style/TransparentTheme"/>
87+
88+
<activity
89+
android:name=".ui.BackgroundActivity"
90+
android:excludeFromRecents="true"
91+
android:enabled="true"
92+
android:exported="true"
93+
android:theme="@style/TransparentTheme"/>
94+
95+
<service
96+
android:name=".service.MonitoringService"
97+
android:enabled="true"
98+
android:exported="true"/>
99+
100+
<service
101+
android:name=".service.AccessibilityMonitoringService"
102+
android:label="@string/app_name"
103+
android:description="@string/accessibility_permission"
104+
android:enabled="true"
105+
android:exported="true"
106+
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
107+
108+
<intent-filter>
109+
110+
<action
111+
android:name="android.accessibilityservice.AccessibilityService"/>
112+
113+
</intent-filter>
114+
115+
<meta-data
116+
android:name="android.accessibilityservice"
117+
android:resource="@xml/accessibility"/>
118+
119+
</service>
120+
121+
<service
122+
android:name=".service.QuickSettingsService"
123+
android:enabled="@bool/quick_settings_availability"
124+
android:icon="@drawable/ic_launcher_foreground"
125+
android:label="@string/app_name"
126+
android:exported="true"
127+
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
128+
129+
<intent-filter>
130+
131+
<action
132+
android:name="android.service.quicksettings.action.QS_TILE"/>
133+
134+
</intent-filter>
135+
136+
<meta-data
137+
android:name="android.service.quicksettings.ACTIVE_TILE"
138+
android:value="true"/>
139+
140+
</service>
141+
142+
<receiver
143+
android:name=".model.NotificationMonitor"
144+
android:exported="false"
145+
android:enabled="true">
146+
147+
<intent-filter>
148+
149+
<action
150+
android:name="io.github.ratul.topactivity.ACTION_NOTIFICATION_RECEIVER"/>
151+
152+
</intent-filter>
153+
154+
</receiver>
155+
156+
</application>
157+
158+
</manifest>
159+
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
package="io.github.ratul.topactivity"
4+
android:versionCode="18"
5+
android:versionName="1.5.8" >
6+
7+
<uses-sdk
8+
android:minSdkVersion="24"
9+
android:targetSdkVersion="28" />
10+
11+
<uses-permission android:name="android.permission.GET_TASKS" />
12+
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
13+
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
14+
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
15+
16+
<queries>
17+
<intent>
18+
<action android:name="android.accessibilityservice.AccessibilityService" />
19+
</intent>
20+
</queries>
21+
22+
<application
23+
android:name="io.github.ratul.topactivity.App"
24+
android:allowBackup="true"
25+
android:appComponentFactory="androidx.core.app.CoreComponentFactory"
26+
android:icon="@drawable/ic_launcher"
27+
android:label="@string/app_name"
28+
android:resizeableActivity="true"
29+
android:roundIcon="@drawable/ic_launcher_round"
30+
android:supportsPictureInPicture="true"
31+
android:theme="@style/AppTheme" >
32+
<activity
33+
android:name="io.github.ratul.topactivity.ui.MainActivity"
34+
android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout"
35+
android:exported="true"
36+
android:hardwareAccelerated="true"
37+
android:label="@string/app_name"
38+
android:launchMode="singleTask"
39+
android:maxRecents="1"
40+
android:screenOrientation="portrait" >
41+
<intent-filter>
42+
<action android:name="android.intent.action.MAIN" />
43+
44+
<category android:name="android.intent.category.LAUNCHER" />
45+
</intent-filter>
46+
47+
<meta-data
48+
android:name="android.app.shortcuts"
49+
android:resource="@xml/app_shortcuts" />
50+
</activity>
51+
<activity
52+
android:name="io.github.ratul.topactivity.ui.CrashActivity"
53+
android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout"
54+
android:exported="true"
55+
android:hardwareAccelerated="true"
56+
android:label="@string/app_name"
57+
android:launchMode="singleTask"
58+
android:maxRecents="1"
59+
android:screenOrientation="portrait" />
60+
<activity
61+
android:name="io.github.ratul.topactivity.ui.ShortcutHandlerActivity"
62+
android:enabled="true"
63+
android:excludeFromRecents="true"
64+
android:exported="true"
65+
android:theme="@style/TransparentTheme" />
66+
<activity
67+
android:name="io.github.ratul.topactivity.ui.BackgroundActivity"
68+
android:enabled="true"
69+
android:excludeFromRecents="true"
70+
android:exported="true"
71+
android:theme="@style/TransparentTheme" />
72+
73+
<service
74+
android:name="io.github.ratul.topactivity.service.MonitoringService"
75+
android:enabled="true"
76+
android:exported="true" />
77+
<service
78+
android:name="io.github.ratul.topactivity.service.AccessibilityMonitoringService"
79+
android:description="@string/accessibility_permission"
80+
android:enabled="true"
81+
android:exported="true"
82+
android:label="@string/app_name"
83+
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
84+
<intent-filter>
85+
<action android:name="android.accessibilityservice.AccessibilityService" />
86+
</intent-filter>
87+
88+
<meta-data
89+
android:name="android.accessibilityservice"
90+
android:resource="@xml/accessibility" />
91+
</service>
92+
<service
93+
android:name="io.github.ratul.topactivity.service.QuickSettingsService"
94+
android:enabled="@bool/quick_settings_availability"
95+
android:exported="true"
96+
android:icon="@drawable/ic_launcher_foreground"
97+
android:label="@string/app_name"
98+
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" >
99+
<intent-filter>
100+
<action android:name="android.service.quicksettings.action.QS_TILE" />
101+
</intent-filter>
102+
103+
<meta-data
104+
android:name="android.service.quicksettings.ACTIVE_TILE"
105+
android:value="true" />
106+
</service>
107+
108+
<receiver
109+
android:name="io.github.ratul.topactivity.model.NotificationMonitor"
110+
android:enabled="true"
111+
android:exported="false" >
112+
<intent-filter>
113+
<action android:name="io.github.ratul.topactivity.ACTION_NOTIFICATION_RECEIVER" />
114+
</intent-filter>
115+
</receiver>
116+
117+
<provider
118+
android:name="androidx.startup.InitializationProvider"
119+
android:authorities="io.github.ratul.topactivity.androidx-startup"
120+
android:exported="false" >
121+
<meta-data
122+
android:name="androidx.emoji2.text.EmojiCompatInitializer"
123+
android:value="androidx.startup" />
124+
<meta-data
125+
android:name="androidx.lifecycle.ProcessLifecycleInitializer"
126+
android:value="androidx.startup" />
127+
</provider>
128+
</application>
129+
130+
</manifest>

app/src/main/java/io/github/ratul/topactivity/App.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,13 @@
2929
import android.os.Environment;
3030

3131
public class App extends Application {
32-
3332
private static App sApp;
3433

3534
@Override
3635
protected void attachBaseContext(Context base) {
3736
super.attachBaseContext(base);
3837
sApp = this;
39-
CrashHandler.getInstance(getApp()).init();
38+
Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(this));
4039
}
4140

4241
@Override

app/src/main/java/io/github/ratul/topactivity/model/CrashHandler.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,23 +55,19 @@ public CrashHandler(App app) {
5555
versionCode = Build.VERSION.SDK_INT >= 28 ? packageInfo.getLongVersionCode() : packageInfo.versionCode;
5656
} catch (PackageManager.NameNotFoundException ignored) {
5757
ignored.printStackTrace();
58+
versionName = "unknown";
5859
}
5960
}
6061

61-
public void init() {
62-
Thread.setDefaultUncaughtExceptionHandler(this);
63-
}
64-
6562
@Override
6663
public void uncaughtException(Thread main, Throwable mThrowable) {
6764
if (tryUncaughtException(main, mThrowable) || DEFAULT == null) {
6865
try {
6966
Thread.sleep(1000L);
7067
} catch (InterruptedException e) {
71-
e.printStackTrace();
68+
android.os.Process.sendSignal(android.os.Process.myPid(), android.os.Process.SIGNAL_KILL);
7269
}
7370
android.os.Process.killProcess(android.os.Process.myPid());
74-
System.exit(1);
7571
} else {
7672
DEFAULT.uncaughtException(main, mThrowable);
7773
}
@@ -102,6 +98,9 @@ public void run() {
10298
StringWriter sw = new StringWriter();
10399
PrintWriter pw = new PrintWriter(sw);
104100
throwable.printStackTrace(pw);
101+
Throwable cause = throwable.getCause();
102+
if (cause != null)
103+
cause.printStackTrace(pw);
105104
fullStackTrace = sw.toString();
106105
pw.close();
107106

@@ -142,10 +141,10 @@ private void writeFile(File file, String content) throws IOException {
142141
parentFile.mkdirs();
143142
}
144143
file.createNewFile();
145-
FileOutputStream fos = new FileOutputStream(file);
146-
fos.write(content.getBytes());
147144
try {
148-
fos.close();
145+
FileWriter writer = new FileWriter(file);
146+
writer.write(content);
147+
writer.close();
149148
} catch (IOException e) {
150149
e.printStackTrace();
151150
}

0 commit comments

Comments
 (0)