package liubaoyua.customtext; import static de.robv.android.xposed.XposedHelpers.findAndHookMethod; import android.graphics.Paint; import android.widget.TextView; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.IXposedHookZygoteInit; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XSharedPreferences; //import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam; public class HookMethod implements IXposedHookLoadPackage, IXposedHookZygoteInit { private static final String PKG_NAME = "liubaoyua.customtext"; private XSharedPreferences global_prefs; private XSharedPreferences prefs; @Override public void initZygote(StartupParam startupParam) throws Throwable { global_prefs = new XSharedPreferences(PKG_NAME); global_prefs.makeWorldReadable(); } @Override public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable { global_prefs.reload(); if (!global_prefs.getBoolean("moduleswitch", true)) { return; } prefs = new XSharedPreferences(PKG_NAME,lpparam.packageName); prefs.makeWorldReadable(); boolean ImageText = global_prefs.getBoolean("ImageText", false); final boolean global_tag = global_prefs.getBoolean(PKG_NAME+"_preferences", false); final boolean current_app_tag = global_prefs.getBoolean(lpparam.packageName,false); boolean my_app_tag =lpparam.packageName.equals(PKG_NAME)?true:false; XC_MethodHook textMethodHook ; if (my_app_tag){ if (current_app_tag) return; textMethodHook = new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable { String abc = (String) methodHookParam.args[0]; if (abc != null) { abc=abc.replaceAll("^�ı��Զ���$","�ı��Զ���,ģ����Կ��� :)" ); abc=abc.replaceAll("^Custom Text$","Custom Text, it works:)" ); methodHookParam.args[0] = abc; } } }; }else{ if(!global_tag&&!current_app_tag) return; final int num = prefs.getInt("maxpage", 0)*10+10; final String[] oristr = new String[num]; final String[] newstr = new String[num]; if(current_app_tag){ for (int i=0; i<num ; i++){ oristr[i] = prefs.getString("oristr"+i, ""); newstr[i] = prefs.getString("newstr"+i, ""); } } final int global_num = global_prefs.getInt("maxpage", 0)*10+10; final String[] global_oristr = new String[global_num]; final String[] global_newstr = new String[global_num]; if(global_tag){ for (int i=0; i<global_num ; i++){ global_oristr[i] = global_prefs.getString("oristr"+i, ""); global_newstr[i] = global_prefs.getString("newstr"+i, ""); } } if (ImageText){ textMethodHook = new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable { CharSequence actualText = (CharSequence) methodHookParam.args[0]; if (actualText != null) { String abc = actualText.toString(); if(global_tag) abc=ReplaceText(global_oristr, global_newstr, global_num, abc); if(current_app_tag) abc=ReplaceText(oristr, newstr, num, abc); methodHookParam.args[0] =abc ; } } }; }else{ textMethodHook = new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable { if (!methodHookParam.args[0].getClass().getSimpleName().contains("SpannableString")){ String abc = (String) methodHookParam.args[0]; if (abc != null) { if(global_tag) abc=ReplaceText(global_oristr, global_newstr, global_num, abc); if(current_app_tag) abc=ReplaceText(oristr, newstr, num, abc); methodHookParam.args[0] = abc; } } } }; } } findAndHookMethod(TextView.class, "setText", CharSequence.class, TextView.BufferType.class, boolean.class, int.class, textMethodHook); findAndHookMethod(TextView.class, "setHint", CharSequence.class, textMethodHook); findAndHookMethod("android.view.GLES20Canvas", null, "drawText", String.class, float.class, float.class, Paint.class, textMethodHook); } private String ReplaceText(String[] oristr, String[] newstr, int num, String abc){ for(int i=0; i<num ; i++){ if (!oristr[i].equals("")) abc=abc.replaceAll(oristr[i],newstr[i]); } return abc; } }