Skip to content

Commit bae6cb7

Browse files
committed
Refactor service setup
1 parent 0775f5f commit bae6cb7

File tree

25 files changed

+623
-357
lines changed

25 files changed

+623
-357
lines changed

android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/IThanos.aidl

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import github.tornaco.android.thanos.core.backup.IBackupAgent;
1717
import github.tornaco.android.thanos.core.wm.IWindowManager;
1818
import github.tornaco.android.thanos.core.power.IPowerManager;
1919
import github.tornaco.android.thanos.core.input.IInputManager;
20-
import github.tornaco.android.thanos.core.plus.IRS;
2120
import github.tornaco.android.thanos.core.net.INetworkManager;
2221
import github.tornaco.android.thanos.core.IPluginLogger;
2322
import github.tornaco.android.thanos.core.app.infinite.InfiniteZ;
@@ -65,8 +64,6 @@ interface IThanos {
6564

6665
List<String> getPatchingSource();
6766

68-
IRS getRS();
69-
7067
IUsageStatsManager getUsageStatsManager();
7168
IPushDelegateManager getPushDelegateManager();
7269
INetworkManager getNetworkManager();

android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/app/IActivityManager.aidl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import github.tornaco.android.thanos.core.IPrinter;
77
import github.tornaco.android.thanos.core.app.RunningAppProcessInfoCompat;
88
import github.tornaco.android.thanos.core.app.usage.ProcessCpuUsageStats;
99
import github.tornaco.android.thanos.core.os.SwapInfo;
10+
import github.tornaco.android.thanos.core.os.SynchronousResultReceiver;
1011

1112
interface IActivityManager {
1213
String getCurrentFrontApp();
@@ -252,4 +253,5 @@ interface IActivityManager {
252253
void removeAppStabilityUpKeepExceptions(in List<Pkg> pkgs);
253254

254255
long fastGetProcessPss(int pid);
256+
long setupService(int taskId, in Intent intent, in SynchronousResultReceiver receiver);
255257
}

android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/app/ThanosManager.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@
3535
import github.tornaco.android.thanos.core.ops.OpsManager;
3636
import github.tornaco.android.thanos.core.os.IServiceManager;
3737
import github.tornaco.android.thanos.core.os.ServiceManager;
38-
import github.tornaco.android.thanos.core.plus.IRS;
39-
import github.tornaco.android.thanos.core.plus.RSManager;
4038
import github.tornaco.android.thanos.core.pm.IPkgManager;
4139
import github.tornaco.android.thanos.core.pm.PackageManager;
4240
import github.tornaco.android.thanos.core.power.IPowerManager;
@@ -159,11 +157,6 @@ public IPushManager getPushManager() throws RemoteException {
159157
return new IPushManager.Default();
160158
}
161159

162-
@Override
163-
public IRS getRS() throws RemoteException {
164-
return new IRS.Default();
165-
}
166-
167160
@Override
168161
public IUsageStatsManager getUsageStatsManager() throws RemoteException {
169162
return new IUsageStatsManager.Default();
@@ -189,6 +182,10 @@ public ThanosManager(Context context, IThanos service) {
189182
this.service = service;
190183
}
191184

185+
public IThanos getService() {
186+
return service;
187+
}
188+
192189
public boolean isServiceInstalled() {
193190
boolean firstCheck = service != null
194191
&& sDefaultFallbackService != service
@@ -283,11 +280,6 @@ public PowerManager getPowerManager() {
283280
return new PowerManager(service.getPowerManager());
284281
}
285282

286-
@SneakyThrows
287-
public RSManager getRSManager() {
288-
return new RSManager(service.getRS());
289-
}
290-
291283
@SneakyThrows
292284
public UsageStatsManager getUsageStatsManager() {
293285
return new UsageStatsManager(service.getUsageStatsManager());
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package github.tornaco.android.thanos.core.os
2+
3+
import android.util.Log
4+
import java.io.ByteArrayOutputStream
5+
import java.util.zip.Deflater
6+
import java.util.zip.Inflater
7+
8+
internal object ByteArrayCompressor {
9+
10+
fun compress(data: ByteArray): ByteArray {
11+
val deflater = Deflater()
12+
deflater.setInput(data)
13+
deflater.finish()
14+
15+
val buffer = ByteArray(1024)
16+
val outputStream = ByteArrayOutputStream()
17+
try {
18+
while (!deflater.finished()) {
19+
val count = deflater.deflate(buffer)
20+
outputStream.write(buffer, 0, count)
21+
}
22+
} finally {
23+
deflater.end()
24+
}
25+
return outputStream.toByteArray().also {
26+
Log.v("ByteArrayCompressor", "After compress size: ${it.size}")
27+
}
28+
}
29+
30+
31+
fun decompress(data: ByteArray): ByteArray {
32+
return runCatching {
33+
val inflater = Inflater()
34+
inflater.setInput(data)
35+
36+
val buffer = ByteArray(1024)
37+
val outputStream = ByteArrayOutputStream()
38+
try {
39+
while (!inflater.finished()) {
40+
val count = inflater.inflate(buffer)
41+
outputStream.write(buffer, 0, count)
42+
}
43+
} finally {
44+
inflater.end()
45+
}
46+
outputStream.toByteArray()
47+
}.getOrElse {
48+
// Fallback to raw data for compat(shortcut stub) issue.
49+
data
50+
}
51+
}
52+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package github.tornaco.android.thanos.core.os
2+
3+
import android.os.Parcel
4+
import android.os.Parcelable
5+
6+
data class ByteArrayWrapper(val byteData: ByteArray) : Parcelable {
7+
constructor(parcel: Parcel) : this(ByteArrayCompressor.decompress(parcel.createByteArray()))
8+
9+
override fun writeToParcel(parcel: Parcel, flags: Int) {
10+
parcel.writeByteArray(ByteArrayCompressor.compress(byteData))
11+
}
12+
13+
override fun describeContents(): Int {
14+
return 0
15+
}
16+
17+
override fun equals(other: Any?): Boolean {
18+
if (this === other) return true
19+
if (javaClass != other?.javaClass) return false
20+
21+
other as ByteArrayWrapper
22+
23+
return byteData.contentEquals(other.byteData)
24+
}
25+
26+
override fun hashCode(): Int {
27+
return byteData.contentHashCode()
28+
}
29+
30+
companion object CREATOR : Parcelable.Creator<ByteArrayWrapper> {
31+
override fun createFromParcel(parcel: Parcel): ByteArrayWrapper {
32+
return ByteArrayWrapper(parcel)
33+
}
34+
35+
override fun newArray(size: Int): Array<ByteArrayWrapper?> {
36+
return arrayOfNulls(size)
37+
}
38+
}
39+
}
40+
41+
fun ByteArray.wrap(): ByteArrayWrapper {
42+
return ByteArrayWrapper(this)
43+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package github.tornaco.android.thanos.core.os
2+
3+
val emptyByteArrayWrapper = ByteArrayWrapper(byteArrayOf())

android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/plus/Callback.java renamed to android/android_framework/base/src/main/java/github/tornaco/android/thanos/core/os/Callback.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
package github.tornaco.android.thanos.core.plus;
1+
package github.tornaco.android.thanos.core.os;
22

33
import android.os.Handler;
44
import android.os.Looper;
55

66
import com.elvishew.xlog.XLog;
77

8+
import github.tornaco.android.thanos.core.plus.ICallback;
9+
810
public class Callback extends ICallback.Stub {
911
private final Handler handler = new Handler(Looper.getMainLooper());
1012

0 commit comments

Comments
 (0)