// Path: app/src/main/java/tw/fatminmin/xposed/minminguard/blocker/Util.java
// public final class Util
// {
//     // change it to false for release build
//     public static boolean DEBUG = BuildConfig.DEBUG;
// 
//     public static ExecutorService notifyWorker;
// 
//     public static final String TAG = "MinMinGuard";
//     private static final String PACKAGE = "tw.fatminmin.xposed.minminguard";
// 
//     private Util() throws InstantiationException
//     {
//         throw new InstantiationException("This class is not for instantiation");
//     }
// 
//     public static Boolean xposedEnabled()
//     {
//         return false;
//     }
// 
//     public static String getAppVersion(Context context)
//     {
//         String version = null;
//         PackageManager pm = context.getPackageManager();
// 
//         try
//         {
//             version = pm.getPackageInfo(PACKAGE, 0).versionName;
//         }
//         catch (PackageManager.NameNotFoundException e)
//         {
//         }
// 
//         return version;
//     }
// 
//     public static void log(String packageName, String msg)
//     {
//         if (DEBUG)
//         {
//             //Log.d(TAG, packageName + ": " + msg);
//             XposedBridge.log(packageName + ": " + msg);
//         }
//     }
// 
//     public static Application getCurrentApplication()
//     {
//         try
//         {
//             return AndroidAppHelper.currentApplication();
//         }
//         catch (Exception e)
//         {
//             e.printStackTrace();
//         }
// 
//         return null;
//     }
// 
//     public static void saveLog(final File dest, final Context context, final Handler handler)
//     {
//         handler.post(new Runnable()
//         {
// 
//             @Override
//             public void run()
//             {
//                 try
//                 {
// 
//                 }
//                 catch (Exception e)
//                 {
//                     e.printStackTrace();
//                 }
//             }
//         });
//     }
// 
//     public static void notifyAdNetwork(final Context context, final String pkgName, final String adNetwork)
//     {
//         new Thread(new Runnable()
//         {
//             @Override
//             public void run()
//             {
//                 try
//                 {
//                     ContentResolver resolver = context.getContentResolver();
//                     Uri uri = Uri.parse("content://tw.fatminmin.xposed.minminguard/");
//                     ContentValues values = new ContentValues();
// 
//                     values.put(Common.KEY_PKG_NAME, pkgName);
//                     values.put(Common.KEY_NETWORK, adNetwork);
//                     resolver.update(uri, values, null, null);
//                 }
//                 catch (Exception e)
//                 {
//                     e.printStackTrace();
//                 }
//             }
//         }).start();
//     }
// 
//     public static void notifyRemoveAdView(final Context context, final String pkgName, final int blockNum)
//     {
//         final Context mContext;
// 
//         if (context == null)
//             mContext = getCurrentApplication();
//         else
//             mContext = context;
// 
//         Runnable task = new Runnable()
//         {
//             @Override
//             public void run()
//             {
//                 try
//                 {
//                     ContentResolver resolver = mContext.getContentResolver();
//                     Uri uri = Uri.parse("content://tw.fatminmin.xposed.minminguard/");
//                     ContentValues values = new ContentValues();
// 
//                     values.put(Common.KEY_PKG_NAME, pkgName);
//                     values.put(Common.KEY_BLOCK_NUM, blockNum);
//                     resolver.update(uri, values, null, null);
//                 }
//                 catch (Exception e)
//                 {
//                     e.printStackTrace();
//                 }
//             }
//         };
// 
//         notifyWorker.submit(task);
//     }
// 
//     public static void hookAllMethods(String className, ClassLoader classLoader, String method, XC_MethodHook callBack)
//     {
//         Class<?> clazz = XposedHelpers.findClass(className, classLoader);
// 
//         XposedBridge.hookAllMethods(clazz, method, callBack);
//     }
// }


import android.view.View;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_InitPackageResources.InitPackageResourcesParam;
import de.robv.android.xposed.callbacks.XC_LayoutInflated;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
import tw.fatminmin.xposed.minminguard.blocker.Util;
            return;
        }

        XposedHelpers.findAndHookMethod("com.waystorm.ads.WSAdBanner", lpparam.classLoader, "setWSAdListener", "com.waystorm.ads.WSAdListener", new XC_MethodHook()
        {
            @Override
            protected void beforeHookedMethod(MethodHookParam param)
            {

                Util.log(pkg, "Prevent WSAdBanner setWSAdListener " + pkg);

                param.setResult(new Object());
            }
        });
    }

    public static void handleInitPackageResources(InitPackageResourcesParam resparam)
    {
        if (!resparam.packageName.equals(pkg))
        {
            return;
        }

        resparam.res.hookLayout(pkg, "layout", "adlayout", new XC_LayoutInflated()
        {

            @Override
            public void handleLayoutInflated(LayoutInflatedParam liparam)
            {

// Path: app/src/main/java/tw/fatminmin/xposed/minminguard/blocker/Util.java
// public final class Util
// {
//     // change it to false for release build
//     public static boolean DEBUG = BuildConfig.DEBUG;
// 
//     public static ExecutorService notifyWorker;
// 
//     public static final String TAG = "MinMinGuard";
//     private static final String PACKAGE = "tw.fatminmin.xposed.minminguard";
// 
//     private Util() throws InstantiationException
//     {
//         throw new InstantiationException("This class is not for instantiation");
//     }
// 
//     public static Boolean xposedEnabled()
//     {
//         return false;
//     }
// 
//     public static String getAppVersion(Context context)
//     {
//         String version = null;
//         PackageManager pm = context.getPackageManager();
// 
//         try
//         {
//             version = pm.getPackageInfo(PACKAGE, 0).versionName;
//         }
//         catch (PackageManager.NameNotFoundException e)
//         {
//         }
// 
//         return version;
//     }
// 
//     public static void log(String packageName, String msg)
//     {
//         if (DEBUG)
//         {
//             //Log.d(TAG, packageName + ": " + msg);
//             XposedBridge.log(packageName + ": " + msg);
//         }
//     }
// 
//     public static Application getCurrentApplication()
//     {
//         try
//         {
//             return AndroidAppHelper.currentApplication();
//         }
//         catch (Exception e)
//         {
//             e.printStackTrace();
//         }
// 
//         return null;
//     }
// 
//     public static void saveLog(final File dest, final Context context, final Handler handler)
//     {
//         handler.post(new Runnable()
//         {
// 
//             @Override
//             public void run()
//             {
//                 try
//                 {
// 
//                 }
//                 catch (Exception e)
//                 {
//                     e.printStackTrace();
//                 }
//             }
//         });
//     }
// 
//     public static void notifyAdNetwork(final Context context, final String pkgName, final String adNetwork)
//     {
//         new Thread(new Runnable()
//         {
//             @Override
//             public void run()
//             {
//                 try
//                 {
//                     ContentResolver resolver = context.getContentResolver();
//                     Uri uri = Uri.parse("content://tw.fatminmin.xposed.minminguard/");
//                     ContentValues values = new ContentValues();
// 
//                     values.put(Common.KEY_PKG_NAME, pkgName);
//                     values.put(Common.KEY_NETWORK, adNetwork);
//                     resolver.update(uri, values, null, null);
//                 }
//                 catch (Exception e)
//                 {
//                     e.printStackTrace();
//                 }
//             }
//         }).start();
//     }
// 
//     public static void notifyRemoveAdView(final Context context, final String pkgName, final int blockNum)
//     {
//         final Context mContext;
// 
//         if (context == null)
//             mContext = getCurrentApplication();
//         else
//             mContext = context;
// 
//         Runnable task = new Runnable()
//         {
//             @Override
//             public void run()
//             {
//                 try
//                 {
//                     ContentResolver resolver = mContext.getContentResolver();
//                     Uri uri = Uri.parse("content://tw.fatminmin.xposed.minminguard/");
//                     ContentValues values = new ContentValues();
// 
//                     values.put(Common.KEY_PKG_NAME, pkgName);
//                     values.put(Common.KEY_BLOCK_NUM, blockNum);
//                     resolver.update(uri, values, null, null);
//                 }
//                 catch (Exception e)
//                 {
//                     e.printStackTrace();
//                 }
//             }
//         };
// 
//         notifyWorker.submit(task);
//     }
// 
//     public static void hookAllMethods(String className, ClassLoader classLoader, String method, XC_MethodHook callBack)
//     {
//         Class<?> clazz = XposedHelpers.findClass(className, classLoader);
// 
//         XposedBridge.hookAllMethods(clazz, method, callBack);
//     }
// }


// Path: app/src/main/java/tw/fatminmin/xposed/minminguard/blocker/custom_mod/Train.java
import android.view.View;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_InitPackageResources.InitPackageResourcesParam;
import de.robv.android.xposed.callbacks.XC_LayoutInflated;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
import tw.fatminmin.xposed.minminguard.blocker.Util;

            return;
        }

        XposedHelpers.findAndHookMethod("com.waystorm.ads.WSAdBanner", lpparam.classLoader, "setWSAdListener", "com.waystorm.ads.WSAdListener", new XC_MethodHook()
        {
            @Override
            protected void beforeHookedMethod(MethodHookParam param)
            {

                Util.log(pkg, "Prevent WSAdBanner setWSAdListener " + pkg);

                param.setResult(new Object());
            }
        });
    }

    public static void handleInitPackageResources(InitPackageResourcesParam resparam)
    {
        if (!resparam.packageName.equals(pkg))
        {
            return;
        }

        resparam.res.hookLayout(pkg, "layout", "adlayout", new XC_LayoutInflated()
        {

            @Override
            public void handleLayoutInflated(LayoutInflatedParam liparam)
            {

                Util.log(pkg, "Handle train ad layout");