package hello.dcsms.omzen;
import hello.dcsms.omzen.R;
import hello.dcsms.omzen.PowerMenu.ModPowerMenu;
import hello.dcsms.omzen.serajrblur.SystemUI_BaseStatusBar;
import hello.dcsms.omzen.serajrblur.SystemUI_NotificationPanelView;
import hello.dcsms.omzen.serajrblur.SystemUI_PanelView;
import hello.dcsms.omzen.serajrblur.SystemUI_PhoneStatusBar;
import java.lang.reflect.Method;
import android.content.res.XModuleResources;
import android.content.res.XResources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Environment;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import de.robv.android.xposed.IXposedHookInitPackageResources;
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.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_InitPackageResources.InitPackageResourcesParam;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class Modul implements IXposedHookZygoteInit, IXposedHookLoadPackage,
IXposedHookInitPackageResources {
private String MOD_PATH;
public static String ANDROID_PACKAGE_NAME = "android";
public static String SYSTEM_UI_PACKAGE_NAME = "com.android.systemui";
private static String mModulePath;
private static ClassLoader mClassLoader;
private static XSharedPreferences mXSharedPreferences;
private static XModuleResources mXModuleResources;
private static InitPackageResourcesParam mInitPackageResourcesParam;
@Override
public void handleInitPackageResources(InitPackageResourcesParam resparam)
throws Throwable {
mInitPackageResourcesParam = resparam;
mXModuleResources = XModuleResources.createInstance(mModulePath,
resparam.res);
if (resparam.packageName.equals("com.bbm")) {
// ic_notification
resparam.res.setReplacement("com.bbm", "drawable",
"ic_notification", DrawUtils.getIcon("com_bbm_notif_icon"));
resparam.res.setReplacement("com.bbm", "drawable",
"ic_notification_splat",
DrawUtils.getIcon("com_bbm_notif_icon_splat"));
}
else if (resparam.packageName.equals(S.SYSTEMUI)) {
XposedBridge.log("HandleInitPackage : SystemUI");
try {
XModuleResources modRes = XModuleResources.createInstance(
MOD_PATH, resparam.res);
ModStatusbar.init(resparam, modRes);
boolean notif = pref.getBoolean("OMNOTIFIKASI", false);
if (notif) {
ModStatusbarNotif.init(resparam);
}
// asus_ep_btn_bg_on
// asus_ep_btn_bg_off
// asus_ep_btn_bg_on
// asus_ep_btn_bg_hl
// resparam.res
// .setReplacement(
// S.SYSTEMUI,
// "drawable",
// "asus_phone_control_onoff_vibrate",
// DrawUtils
// .getLayerDrawable("asus_ep_statusicon_vibrate"));
// resparam.res
// .setReplacement(
// S.SYSTEMUI,
// "drawable",
// "asus_phone_control_onoff_mute",
// DrawUtils
// .getLayerDrawable("asus_ep_statusicon_silent"));
// resparam.res.setReplacement(S.SYSTEMUI, "drawable",
// "asus_phone_control_onoff_volume",
// DrawUtils.getLayerDrawable("asus_ep_statusicon_sound"));
// resparam.res
// .setReplacement(
// S.SYSTEMUI,
// "drawable",
// "asus_phone_control_onoff_silent",
// DrawUtils
// .getLayerDrawable("asus_ep_statusicon_silent"));
// resparam.res.setReplacement(S.SYSTEMUI, "drawable",
// "asus_ep_btn_bg_on", DrawUtils.getColorDrawable(aktif));
// resparam.res.setReplacement(S.SYSTEMUI, "drawable",
// "asus_ep_btn_bg_hl", DrawUtils.getColorDrawable(press));
// resparam.res.setReplacement(S.SYSTEMUI, "drawable",
// "asus_phone_quickbox_onoff",
// DrawUtils.stateDrawable());
// resparam.res.setReplacement(S.SYSTEMUI, "drawable",
// "asus_phone_control_wifi_pressed",
// DrawUtils.stateDrawable());
// resparam.res.setReplacement(S.SYSTEMUI, "drawable",
// "asus_phone_control_onoff",
// DrawUtils.stateDrawable());
// resparam.res.setReplacement(S.SYSTEMUI, "drawable",
// "asus_phone_control_onoff2",
// DrawUtils.stateDrawable());
// resparam.res.setReplacement(S.SYSTEMUI, "drawable",
// "asus_phone_memory_onoff_green",
// DrawUtils.stateDrawable());
resparam.res.setReplacement(S.SYSTEMUI, "drawable",
"asus_phone_control_onoff_bg",
modRes.fwd(R.drawable.asus_phone_control_onoff_bg));
} catch (Exception e) {
S.log(e.getMessage());
}
}
;// mXModuleResources.fwd(R.drawable.asus_phone_quickbox_text_color));
}
static XSharedPreferences pref;
@Override
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
mClassLoader = lpparam.classLoader;
if (lpparam.packageName.equals(S.SYSTEMUI)) {
XposedBridge.log("HandleLoadPackage : SystemUI");
// setam os class loaderes parentes
setParentClassLoaders(lpparam);
// recarregam as prefer�ncias
mXSharedPreferences.reload();
ModStatusbar.initPaket(lpparam);
// hooks
pref = new XSharedPreferences("hello.dcsms.omzen");
pref.makeWorldReadable();
boolean notif = pref.getBoolean("OMNOTIFIKASI", false);
if (notif) {
ModStatusbarNotif.initPaket(lpparam);
}
boolean blur = pref.getBoolean("BLUR_NOTIFIKASI", false);
if (blur) {
SystemUI_PhoneStatusBar.hook();
SystemUI_BaseStatusBar.hook();
SystemUI_PanelView.hook();
SystemUI_NotificationPanelView.hook();
}
try {
Method SS = Class.forName(
"com.android.systemui.screenshot.GlobalScreenshot",
false, lpparam.classLoader).getDeclaredMethod(
"saveScreenshotInWorkerThread", Runnable.class);
// XposedBridge.hookMethod(SS, new XC_MethodHook() {
// @Override
// protected void beforeHookedMethod(MethodHookParam param)
// throws Throwable {
// Bitmap mScreenBitmap = (Bitmap) XposedHelpers
// .getObjectField(param.thisObject,
// "mScreenBitmap");
// Bitmap ssbg = BitmapFactory.decodeFile(Environment
// .getExternalStorageDirectory()
// .getAbsolutePath()
// + "/ssbg.jpg");
// // 77 197
// if (mScreenBitmap != null) {
// XposedBridge.log(Integer.toString(mScreenBitmap
// .getWidth()));
// Bitmap okess = Bitmap.createBitmap(ssbg.getWidth(),
// ssbg.getHeight(), Config.ARGB_8888);
// Canvas c = new Canvas(okess);
// Paint p = new Paint();
// c.drawBitmap(ssbg, 0, 0, p);
// c.drawBitmap(mScreenBitmap, 77, 197, p);
// mScreenBitmap = okess;
// }
// }
// });
Method cekOverFlowIcon = Class.forName(
"com.android.systemui.statusbar.phone.IconMerger",
false, lpparam.classLoader).getDeclaredMethod(
"checkOverflow", int.class);
XposedBridge.hookMethod(cekOverFlowIcon, new XC_MethodHook() {
@Override
protected void afterHookedMethod(final MethodHookParam param)
throws Throwable {
LinearLayout par = (LinearLayout) param.thisObject;
pref = new XSharedPreferences("hello.dcsms.omzen");
pref.makeWorldReadable();
int style = pref.getInt("STATUSBAR_LAYOUT", 0);
switch (style) {
default:
((LinearLayout) param.thisObject)
.setGravity(Gravity.LEFT);
par.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
break;
case 1:
((LinearLayout) param.thisObject)
.setGravity(Gravity.RIGHT);
par.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
break;
case 2:
((LinearLayout) param.thisObject)
.setGravity(Gravity.RIGHT);
par.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
break;
case 3:
((LinearLayout) param.thisObject)
.setGravity(Gravity.LEFT);
par.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
break;
case 4:
((LinearLayout) param.thisObject)
.setGravity(Gravity.RIGHT);
par.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
break;
case 5:
((LinearLayout) param.thisObject)
.setGravity(Gravity.LEFT);
par.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
break;
case 6:
((LinearLayout) param.thisObject)
.setGravity(Gravity.LEFT);
par.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
break;
case 7:
((LinearLayout) param.thisObject)
.setGravity(Gravity.RIGHT);
par.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
break;
case 8:
((LinearLayout) param.thisObject)
.setGravity(Gravity.CENTER);
par.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
break;
case 9:
((LinearLayout) param.thisObject)
.setGravity(Gravity.CENTER);
par.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
break;
case 10:
((LinearLayout) param.thisObject)
.setGravity(Gravity.CENTER);
par.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
break;
case 11:
((LinearLayout) param.thisObject)
.setGravity(Gravity.CENTER);
par.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
break;
case 12:
((LinearLayout) param.thisObject)
.setGravity(Gravity.CENTER);
par.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
break;
}
((View) param.thisObject).requestLayout();
}
});
} catch (Exception e) {
S.log(e.getMessage());
}
}
if (lpparam.packageName.equals(ModPowerMenu.PACKAGE_NAME)) {
pref = new XSharedPreferences(PKGNAME);
pref.makeWorldReadable();
boolean boo = pref.getBoolean("MOD_POWER_MENU", false);
if (boo) {
ModPowerMenu.init(pref,lpparam.classLoader);
}
}
}
private void setParentClassLoaders(LoadPackageParam lpparam) {
// todos os classloaders
ClassLoader packge = lpparam.classLoader;
ClassLoader module = getClass().getClassLoader();
ClassLoader xposed = module.getParent();
XposedHelpers.setObjectField(packge, "parent", xposed);
XposedHelpers.setObjectField(module, "parent", packge);
}
public static String PKGNAME = "hello.dcsms.omzen";
@Override
public void initZygote(StartupParam startupParam) throws Throwable {
mModulePath = startupParam.modulePath;
mXSharedPreferences = new XSharedPreferences(PKGNAME);
MOD_PATH = startupParam.modulePath;
pref = new XSharedPreferences(PKGNAME);
pref.makeWorldReadable();
ModStatusbar.initZygot(pref);
XResources.setSystemWideReplacement("android", "dimen",
"status_bar_height", 25);
}
public static String getXposedModulePath() {
return mModulePath;
}
public static XModuleResources getXposedModuleResources() {
return mXModuleResources;
}
public static InitPackageResourcesParam getXposedInitPackageResourcesParam() {
return mInitPackageResourcesParam;
}
public static XSharedPreferences getXposedXSharedPreferences() {
return mXSharedPreferences;
}
}