mirror of
https://github.com/TeamVanced/VancedMicroG
synced 2024-11-19 02:29:25 +01:00
Partial restoring ForegroundServiceContext
This commit is contained in:
parent
f5ab2d3fd8
commit
478c46f4bb
@ -29,6 +29,7 @@ import androidx.legacy.content.WakefulBroadcastReceiver;
|
|||||||
import com.google.android.gms.checkin.internal.ICheckinService;
|
import com.google.android.gms.checkin.internal.ICheckinService;
|
||||||
|
|
||||||
import org.microg.gms.auth.AuthConstants;
|
import org.microg.gms.auth.AuthConstants;
|
||||||
|
import org.microg.gms.common.ForegroundServiceContext;
|
||||||
import org.microg.gms.gcm.McsService;
|
import org.microg.gms.gcm.McsService;
|
||||||
import org.microg.gms.people.PeopleManager;
|
import org.microg.gms.people.PeopleManager;
|
||||||
|
|
||||||
@ -53,6 +54,7 @@ public class CheckinService extends IntentService {
|
|||||||
@Override
|
@Override
|
||||||
protected void onHandleIntent(Intent intent) {
|
protected void onHandleIntent(Intent intent) {
|
||||||
try {
|
try {
|
||||||
|
ForegroundServiceContext.completeForegroundService(this, intent, TAG);
|
||||||
if (CheckinPrefs.get(this).isEnabled()) {
|
if (CheckinPrefs.get(this).isEnabled()) {
|
||||||
LastCheckinInfo info = CheckinManager.checkin(this, intent.getBooleanExtra(EXTRA_FORCE_CHECKIN, false));
|
LastCheckinInfo info = CheckinManager.checkin(this, intent.getBooleanExtra(EXTRA_FORCE_CHECKIN, false));
|
||||||
if (info != null) {
|
if (info != null) {
|
||||||
|
@ -24,6 +24,8 @@ import android.util.Log;
|
|||||||
|
|
||||||
import androidx.legacy.content.WakefulBroadcastReceiver;
|
import androidx.legacy.content.WakefulBroadcastReceiver;
|
||||||
|
|
||||||
|
import org.microg.gms.common.ForegroundServiceContext;
|
||||||
|
|
||||||
import static org.microg.gms.checkin.CheckinService.EXTRA_FORCE_CHECKIN;
|
import static org.microg.gms.checkin.CheckinService.EXTRA_FORCE_CHECKIN;
|
||||||
|
|
||||||
public class TriggerReceiver extends WakefulBroadcastReceiver {
|
public class TriggerReceiver extends WakefulBroadcastReceiver {
|
||||||
@ -46,6 +48,7 @@ public class TriggerReceiver extends WakefulBroadcastReceiver {
|
|||||||
if (networkInfo != null && networkInfo.isConnected() || force) {
|
if (networkInfo != null && networkInfo.isConnected() || force) {
|
||||||
Intent subIntent = new Intent(context, CheckinService.class);
|
Intent subIntent = new Intent(context, CheckinService.class);
|
||||||
subIntent.putExtra(EXTRA_FORCE_CHECKIN, force);
|
subIntent.putExtra(EXTRA_FORCE_CHECKIN, force);
|
||||||
|
startWakefulService(new ForegroundServiceContext(context), subIntent);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Ignoring " + intent + ": checkin is disabled");
|
Log.d(TAG, "Ignoring " + intent + ": checkin is disabled");
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
package org.microg.gms.common;
|
||||||
|
|
||||||
|
import android.app.ActivityManager;
|
||||||
|
import android.app.Service;
|
||||||
|
import android.content.ComponentName;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.ContextWrapper;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.PowerManager;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.RequiresApi;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ForegroundServiceContext extends ContextWrapper {
|
||||||
|
private static final String TAG = "ForegroundService";
|
||||||
|
public static final String EXTRA_FOREGROUND = "foreground";
|
||||||
|
|
||||||
|
public ForegroundServiceContext(Context base) {
|
||||||
|
super(base);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ComponentName startService(Intent service) {
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && !isIgnoringBatteryOptimizations() && !isAppOnForeground()) {
|
||||||
|
Log.d(TAG, "Starting in foreground mode.");
|
||||||
|
service.putExtra(EXTRA_FOREGROUND, true);
|
||||||
|
return super.startForegroundService(service);
|
||||||
|
}
|
||||||
|
return super.startService(service);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||||
|
private boolean isIgnoringBatteryOptimizations() {
|
||||||
|
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
|
||||||
|
return powerManager.isIgnoringBatteryOptimizations(getPackageName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isAppOnForeground() {
|
||||||
|
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
|
||||||
|
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
|
||||||
|
if (appProcesses == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
final String packageName = getPackageName();
|
||||||
|
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
|
||||||
|
if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void completeForegroundService(Service service, Intent intent, String tag) {
|
||||||
|
if (intent != null && intent.getBooleanExtra(EXTRA_FOREGROUND, false) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
Log.d(tag, "Started in foreground mode.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -47,6 +47,7 @@ import com.mgoogle.android.gms.R;
|
|||||||
import com.squareup.wire.Message;
|
import com.squareup.wire.Message;
|
||||||
|
|
||||||
import org.microg.gms.checkin.LastCheckinInfo;
|
import org.microg.gms.checkin.LastCheckinInfo;
|
||||||
|
import org.microg.gms.common.ForegroundServiceContext;
|
||||||
import org.microg.gms.common.PackageUtils;
|
import org.microg.gms.common.PackageUtils;
|
||||||
import org.microg.gms.gcm.mcs.AppData;
|
import org.microg.gms.gcm.mcs.AppData;
|
||||||
import org.microg.gms.gcm.mcs.Close;
|
import org.microg.gms.gcm.mcs.Close;
|
||||||
@ -294,6 +295,7 @@ public class McsService extends Service implements Handler.Callback {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||||
|
ForegroundServiceContext.completeForegroundService(this, intent, TAG);
|
||||||
synchronized (McsService.class) {
|
synchronized (McsService.class) {
|
||||||
if (rootHandler != null) {
|
if (rootHandler != null) {
|
||||||
if (intent == null) return START_REDELIVER_INTENT;
|
if (intent == null) return START_REDELIVER_INTENT;
|
||||||
|
@ -26,6 +26,7 @@ import android.util.Log;
|
|||||||
import androidx.legacy.content.WakefulBroadcastReceiver;
|
import androidx.legacy.content.WakefulBroadcastReceiver;
|
||||||
|
|
||||||
import org.microg.gms.checkin.LastCheckinInfo;
|
import org.microg.gms.checkin.LastCheckinInfo;
|
||||||
|
import org.microg.gms.common.ForegroundServiceContext;
|
||||||
|
|
||||||
import static android.os.Build.VERSION.SDK_INT;
|
import static android.os.Build.VERSION.SDK_INT;
|
||||||
import static android.os.Build.VERSION_CODES.N;
|
import static android.os.Build.VERSION_CODES.N;
|
||||||
@ -84,6 +85,21 @@ public class TriggerReceiver extends WakefulBroadcastReceiver {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!McsService.isConnected() || force) {
|
||||||
|
Log.d(TAG, "Not connected to GCM but should be, asking the service to start up. Triggered by: " + intent);
|
||||||
|
startWakefulService(new ForegroundServiceContext(context), new Intent(ACTION_CONNECT, null, context, McsService.class)
|
||||||
|
.putExtra(EXTRA_REASON, intent));
|
||||||
|
} else {
|
||||||
|
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
|
||||||
|
Log.d(TAG, "Ignoring " + intent + ": service is running. schedule reconnect instead.");
|
||||||
|
McsService.scheduleReconnect(context);
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "Ignoring " + intent + ": service is running. heartbeat instead.");
|
||||||
|
startWakefulService(new ForegroundServiceContext(context), new Intent(ACTION_HEARTBEAT, null, context, McsService.class)
|
||||||
|
.putExtra(EXTRA_REASON, intent));
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.w(TAG, e);
|
Log.w(TAG, e);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user