mirror of https://github.com/YTVanced/VancedMicroG
Restruct notification system
This commit is contained in:
parent
f703187e74
commit
f5ab2d3fd8
|
@ -32,6 +32,8 @@ import java.io.IOException;
|
|||
import static android.content.pm.ApplicationInfo.FLAG_SYSTEM;
|
||||
import static android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
|
||||
|
||||
import org.microg.gms.common.StatusNotification;
|
||||
|
||||
public class AuthManager {
|
||||
|
||||
private static final String TAG = "GmsAuthManager";
|
||||
|
@ -50,6 +52,9 @@ public class AuthManager {
|
|||
private String accountType;
|
||||
|
||||
public AuthManager(Context context, String accountName, String packageName, String service) {
|
||||
|
||||
StatusNotification.Notify(context);
|
||||
|
||||
this.context = context;
|
||||
this.accountName = accountName;
|
||||
if (packageName.contains("youtube.music")) {
|
||||
|
@ -67,6 +72,8 @@ public class AuthManager {
|
|||
this.service = service;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public String getAccountType() {
|
||||
if (accountType == null)
|
||||
accountType = AuthConstants.DEFAULT_ACCOUNT_TYPE;
|
||||
|
|
|
@ -29,7 +29,6 @@ import androidx.legacy.content.WakefulBroadcastReceiver;
|
|||
import com.google.android.gms.checkin.internal.ICheckinService;
|
||||
|
||||
import org.microg.gms.auth.AuthConstants;
|
||||
import org.microg.gms.common.ForegroundServiceContext;
|
||||
import org.microg.gms.gcm.McsService;
|
||||
import org.microg.gms.people.PeopleManager;
|
||||
|
||||
|
@ -54,7 +53,6 @@ public class CheckinService extends IntentService {
|
|||
@Override
|
||||
protected void onHandleIntent(Intent intent) {
|
||||
try {
|
||||
ForegroundServiceContext.completeForegroundService(this, intent, TAG);
|
||||
if (CheckinPrefs.get(this).isEnabled()) {
|
||||
LastCheckinInfo info = CheckinManager.checkin(this, intent.getBooleanExtra(EXTRA_FORCE_CHECKIN, false));
|
||||
if (info != null) {
|
||||
|
|
|
@ -24,8 +24,6 @@ import android.util.Log;
|
|||
|
||||
import androidx.legacy.content.WakefulBroadcastReceiver;
|
||||
|
||||
import org.microg.gms.common.ForegroundServiceContext;
|
||||
|
||||
import static org.microg.gms.checkin.CheckinService.EXTRA_FORCE_CHECKIN;
|
||||
|
||||
public class TriggerReceiver extends WakefulBroadcastReceiver {
|
||||
|
@ -48,7 +46,6 @@ public class TriggerReceiver extends WakefulBroadcastReceiver {
|
|||
if (networkInfo != null && networkInfo.isConnected() || force) {
|
||||
Intent subIntent = new Intent(context, CheckinService.class);
|
||||
subIntent.putExtra(EXTRA_FORCE_CHECKIN, force);
|
||||
startWakefulService(new ForegroundServiceContext(context), subIntent);
|
||||
}
|
||||
} else {
|
||||
Log.d(TAG, "Ignoring " + intent + ": checkin is disabled");
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
package org.microg.gms.common;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
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.provider.Settings;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import com.mgoogle.android.gms.R;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@RequiresApi(23)
|
||||
@Override
|
||||
public ComponentName startService(Intent service) {
|
||||
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
|
||||
|
||||
if (!powerManager.isIgnoringBatteryOptimizations(this.getPackageName()) && !isAppOnForeground()) {
|
||||
Log.d(TAG, "Starting in foreground mode.");
|
||||
service.putExtra(EXTRA_FOREGROUND, true);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
return super.startForegroundService(service);
|
||||
} else {
|
||||
return super.startService(service);
|
||||
}
|
||||
}
|
||||
return super.startService(service);
|
||||
}
|
||||
|
||||
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.getBooleanExtra(EXTRA_FOREGROUND, false)) {
|
||||
Log.d(tag, "Started in foreground mode.");
|
||||
service.startForeground(tag.hashCode(), buildForegroundNotification(service));
|
||||
}
|
||||
}
|
||||
|
||||
private static Notification buildForegroundNotification(Context context) {
|
||||
Intent mIntent = new Intent();
|
||||
mIntent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
|
||||
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, mIntent, 0);
|
||||
|
||||
String notificationChannelID = "foreground-service";
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel channel = new NotificationChannel(notificationChannelID, context.getResources().getString(R.string.notification_service_name), NotificationManager.IMPORTANCE_MIN);
|
||||
channel.setShowBadge(true);
|
||||
channel.setLockscreenVisibility(0);
|
||||
channel.setVibrationPattern(new long[0]);
|
||||
context.getSystemService(NotificationManager.class).createNotificationChannel(channel);
|
||||
}
|
||||
return new NotificationCompat.Builder(context, notificationChannelID)
|
||||
.setOngoing(true)
|
||||
.setContentIntent(pendingIntent)
|
||||
.setContentTitle(context.getResources().getString(R.string.notification_service_title))
|
||||
.setContentText(context.getResources().getString(R.string.notification_service_content))
|
||||
.setSmallIcon(R.drawable.ic_foreground_notification)
|
||||
.build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
package org.microg.gms.common;
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.PowerManager;
|
||||
import android.provider.Settings;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import com.mgoogle.android.gms.R;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
public class StatusNotification {
|
||||
|
||||
private static int notificationID;
|
||||
|
||||
public static boolean Notify(Context context) {
|
||||
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (!powerManager.isIgnoringBatteryOptimizations(context.getPackageName())) {
|
||||
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
StatusBarNotification[] notifications = manager.getActiveNotifications();
|
||||
for (StatusBarNotification notification : notifications) {
|
||||
if (notification.getId() == notificationID) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
buildStatusNotification(context);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void buildStatusNotification(Context context) {
|
||||
notificationID = createNotificationID();
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
|
||||
|
||||
String notificationChannelID = "foreground-service";
|
||||
|
||||
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel channel = new NotificationChannel(notificationChannelID, context.getResources().getString(R.string.notification_service_name), NotificationManager.IMPORTANCE_LOW);
|
||||
channel.setShowBadge(true);
|
||||
channel.setLockscreenVisibility(0);
|
||||
channel.setVibrationPattern(new long[0]);
|
||||
context.getSystemService(NotificationManager.class).createNotificationChannel(channel);
|
||||
}
|
||||
NotificationCompat.Builder notification = new NotificationCompat.Builder(context, notificationChannelID)
|
||||
.setAutoCancel(true)
|
||||
.setContentIntent(pendingIntent)
|
||||
.setContentTitle(context.getResources().getString(R.string.notification_service_title))
|
||||
.setContentText(context.getResources().getString(R.string.notification_service_content))
|
||||
.setSmallIcon(R.drawable.ic_foreground_notification);
|
||||
|
||||
NotificationManager manager =
|
||||
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
|
||||
manager.notify(notificationID, notification.build());
|
||||
}
|
||||
|
||||
private static int createNotificationID() {
|
||||
Date currentDate = new Date();
|
||||
int id = Integer.parseInt(new SimpleDateFormat("ddHHmmss", Locale.US).format(currentDate));
|
||||
|
||||
return id;
|
||||
}
|
||||
}
|
|
@ -47,7 +47,6 @@ import com.mgoogle.android.gms.R;
|
|||
import com.squareup.wire.Message;
|
||||
|
||||
import org.microg.gms.checkin.LastCheckinInfo;
|
||||
import org.microg.gms.common.ForegroundServiceContext;
|
||||
import org.microg.gms.common.PackageUtils;
|
||||
import org.microg.gms.gcm.mcs.AppData;
|
||||
import org.microg.gms.gcm.mcs.Close;
|
||||
|
@ -295,7 +294,6 @@ public class McsService extends Service implements Handler.Callback {
|
|||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
ForegroundServiceContext.completeForegroundService(this, intent, TAG);
|
||||
synchronized (McsService.class) {
|
||||
if (rootHandler != null) {
|
||||
if (intent == null) return START_REDELIVER_INTENT;
|
||||
|
|
|
@ -26,7 +26,6 @@ import android.util.Log;
|
|||
import androidx.legacy.content.WakefulBroadcastReceiver;
|
||||
|
||||
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_CODES.N;
|
||||
|
@ -85,24 +84,8 @@ public class TriggerReceiver extends WakefulBroadcastReceiver {
|
|||
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) {
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue