package com.lody.virtual.server.notification; import android.app.Notification; import android.content.Context; import android.content.ContextWrapper; import android.content.pm.PackageManager; import android.content.res.Resources; import android.os.Build; import com.lody.virtual.helper.utils.VLog; /** * Created by 247321453 on 2016/7/12. */ class NotificationCompatCompatV14 extends NotificationCompat { private RemoteViewsFixer mRemoteViewsFixer; NotificationCompatCompatV14() { super(); mRemoteViewsFixer = new RemoteViewsFixer(this); } RemoteViewsFixer getRemoteViewsFixer() { return mRemoteViewsFixer; } @Override public boolean dealNotification(int id, Notification notification, final String packageName) { Context pluginContext = getAppContext(packageName); if (isOutsideInstalled(packageName)) { //外部已经安装的app,直接替换默认的icon就行了 getNotificationFixer().fixIconImage(pluginContext.getResources(), notification.contentView, false, notification); notification.icon = getHostContext().getApplicationInfo().icon; return true; } if (notification.tickerView != null) { if (isSystemLayout(notification.tickerView)) { VLog.d(TAG, "deal system tickerView"); getNotificationFixer().fixRemoteViewActions(pluginContext, false, notification.tickerView); } else { VLog.d(TAG, "deal custom tickerView " + notification.tickerView.getLayoutId()); notification.tickerView = getRemoteViewsFixer().makeRemoteViews(id + ":tickerView", pluginContext, notification.tickerView, false, false); } } if (notification.contentView != null) { if (isSystemLayout(notification.contentView)) { VLog.d(TAG, "deal system contentView"); boolean hasIconBitmap = getNotificationFixer().fixRemoteViewActions(pluginContext, false, notification.contentView); getNotificationFixer().fixIconImage(pluginContext.getResources(), notification.contentView, hasIconBitmap, notification); } else { VLog.d(TAG, "deal custom contentView " + notification.contentView.getLayoutId()); notification.contentView = getRemoteViewsFixer().makeRemoteViews(id + ":contentView", pluginContext, notification.contentView, false, true); } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { if (notification.bigContentView != null) { if (isSystemLayout(notification.bigContentView)) { VLog.d(TAG, "deal system bigContentView"); getNotificationFixer().fixRemoteViewActions(pluginContext, false, notification.bigContentView); } else { VLog.d(TAG, "deal custom bigContentView " + notification.bigContentView.getLayoutId()); notification.bigContentView = getRemoteViewsFixer().makeRemoteViews(id + ":bigContentView", pluginContext, notification.bigContentView, true, true); } } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (notification.headsUpContentView != null) { if (isSystemLayout(notification.headsUpContentView)) { VLog.d(TAG, "deal system headsUpContentView"); getNotificationFixer().fixRemoteViewActions(pluginContext, false, notification.headsUpContentView); } else { VLog.d(TAG, "deal custom headsUpContentView " + notification.bigContentView.getLayoutId()); notification.headsUpContentView = getRemoteViewsFixer().makeRemoteViews(id + ":headsUpContentView", pluginContext, notification.headsUpContentView, false, false); } } } notification.icon = getHostContext().getApplicationInfo().icon; return true; } Context getAppContext(final String packageName) { final Resources resources = getResources(packageName); Context context = null; try { context = getHostContext().createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE); } catch (PackageManager.NameNotFoundException e) { context = getHostContext(); } return new ContextWrapper(context) { @Override public Resources getResources() { return resources; } @Override public String getPackageName() { return packageName; } }; } }