@Override
 public Object call(Object who, Method method, Object... args) throws Throwable {
   if (cacheIndex == -1) {
     cacheIndex = ArrayUtils.indexOfFirst(args, WindowManager.LayoutParams.class);
   }
   if (cacheIndex != -1) {
     WindowManager.LayoutParams attrs = (WindowManager.LayoutParams) args[cacheIndex];
     if (attrs != null) {
       attrs.packageName = getHostPkg();
     }
   }
   return method.invoke(who, args);
 }
 @Override
 public Object call(Object who, Method method, Object... args) throws Throwable {
   String pkg = (String) args[0];
   int notificationIndex = ArrayUtils.indexOfFirst(args, Notification.class);
   Notification notification = (Notification) args[notificationIndex];
   NotificationHandler.Result result =
       NotificationHandler.getInstance().dealNotification(getHostContext(), notification, pkg);
   if (result.code == NotificationHandler.RES_NOT_SHOW) {
     return 0;
   } else if (result.code == NotificationHandler.RES_REPLACE) {
     args[notificationIndex] = result.notification;
   }
   args[0] = getHostPkg();
   if (getName().endsWith("WithTag") && Build.VERSION.SDK_INT >= 18 && args[1] instanceof String) {
     args[1] = getHostPkg();
   }
   return method.invoke(who, args);
 }