package com.lody.virtual.server.notification; import android.app.Notification; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Build; import android.widget.RemoteViews; import com.lody.virtual.client.core.VirtualCore; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; import mirror.com.android.internal.R_Hide; /** * @author 247321453 */ public abstract class NotificationCompat { public static final String EXTRA_TITLE = "android.title"; public static final String EXTRA_TITLE_BIG = EXTRA_TITLE + ".big"; public static final String EXTRA_TEXT = "android.text"; public static final String EXTRA_SUB_TEXT = "android.subText"; public static final String EXTRA_INFO_TEXT = "android.infoText"; public static final String EXTRA_SUMMARY_TEXT = "android.summaryText"; public static final String EXTRA_BIG_TEXT = "android.bigText"; public static final String EXTRA_PROGRESS = "android.progress"; public static final String EXTRA_PROGRESS_MAX = "android.progressMax"; public static final String EXTRA_BUILDER_APPLICATION_INFO = "android.appInfo"; static final String TAG = NotificationCompat.class.getSimpleName(); static final String SYSTEM_UI_PKG = "com.android.systemui"; private final List<Integer> sSystemLayoutResIds = new ArrayList<>(10); private NotificationFixer mNotificationFixer; NotificationCompat() { loadSystemLayoutRes(); mNotificationFixer = new NotificationFixer(this); } public static NotificationCompat create() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return new NotificationCompatCompatV21(); } else { return new NotificationCompatCompatV14(); } } private void loadSystemLayoutRes() { Field[] fields = R_Hide.layout.TYPE.getFields(); for (Field field : fields) { if (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers())) { try { int id = field.getInt(null); sSystemLayoutResIds.add(id); } catch (Throwable e) { // ignore } } } } NotificationFixer getNotificationFixer() { return mNotificationFixer; } boolean isSystemLayout(RemoteViews remoteViews) { return remoteViews != null && sSystemLayoutResIds.contains(remoteViews.getLayoutId()); } public Context getHostContext() { return VirtualCore.get().getContext(); } PackageInfo getPackageInfo(String packageName) { try { return VirtualCore.get().getUnHookPackageManager().getPackageInfo(packageName, 0); } catch (PackageManager.NameNotFoundException e) { // ignore } return null; } public abstract boolean dealNotification(int id, Notification notification, String packageName); }