0
0
Fork 0
mirror of https://github.com/YTVanced/VancedMicroG synced 2024-11-24 04:05:13 +00:00

Move some expensive reflection calls to onCreate

This commit is contained in:
voidstarstar 2019-04-21 14:10:45 -04:00 committed by Marvin W
parent 60023887d1
commit 5875ab752b

View file

@ -54,6 +54,7 @@ import org.microg.gms.gcm.mcs.Setting;
import java.io.Closeable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collections;
@ -134,6 +135,10 @@ public class McsService extends Service implements Handler.Callback {
private static int maxTtl = 24 * 60 * 60;
private Object deviceIdleController;
private Method getUserIdMethod;
private Method addPowerSaveTempWhitelistAppMethod;
private class HandlerThread extends Thread {
public HandlerThread() {
@ -168,6 +173,22 @@ public class McsService extends Service implements Handler.Callback {
heartbeatIntent = PendingIntent.getService(this, 0, new Intent(ACTION_HEARTBEAT, null, this, McsService.class), 0);
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
powerManager = (PowerManager) getSystemService(POWER_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
Field field = Context.class.getField("DEVICE_IDLE_CONTROLLER");
IBinder binder = (IBinder) Class.forName("android.os.ServiceManager")
.getMethod("getService", String.class).invoke(null, field.get(null));
if (binder != null) {
deviceIdleController = Class.forName("android.os.IDeviceIdleController$Stub")
.getMethod("asInterface", IBinder.class).invoke(null, binder);
getUserIdMethod = UserHandle.class.getMethod("getUserId", int.class);
addPowerSaveTempWhitelistAppMethod = deviceIdleController.getClass()
.getMethod("addPowerSaveTempWhitelistApp", String.class, long.class, int.class, String.class);
}
} catch (Exception e) {
Log.w(TAG, e);
}
}
synchronized (McsService.class) {
if (handlerThread == null) {
handlerThread = new HandlerThread();
@ -491,18 +512,10 @@ public class McsService extends Service implements Handler.Callback {
Intent targetIntent = new Intent(intent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && app.wakeForDelivery) {
try {
Field field = Context.class.getField("DEVICE_IDLE_CONTROLLER");
IBinder binder = (IBinder) Class.forName("android.os.ServiceManager")
.getMethod("getService", String.class).invoke(null, field.get(null));
if (binder != null) {
Object deviceIdleController = Class.forName("android.os.IDeviceIdleController$Stub")
.getMethod("asInterface", IBinder.class).invoke(null, binder);
int userId = (int) UserHandle.class.getMethod("getUserId", int.class)
.invoke(null, getPackageManager().getApplicationInfo(packageName, 0).uid);
if (getUserIdMethod != null && addPowerSaveTempWhitelistAppMethod != null && deviceIdleController != null) {
int userId = (int) getUserIdMethod.invoke(null, getPackageManager().getApplicationInfo(packageName, 0).uid);
logd("Adding app " + packageName + " for userId " + userId + " to the temp whitelist");
deviceIdleController.getClass()
.getMethod("addPowerSaveTempWhitelistApp", String.class, long.class, int.class, String.class)
.invoke(deviceIdleController, packageName, 10000, userId, "GCM Push");
addPowerSaveTempWhitelistAppMethod.invoke(deviceIdleController, packageName, 10000, userId, "GCM Push");
}
} catch (Exception e) {
Log.w(TAG, e);