package de.theknut.xposedgelsettings.hooks.homescreen; import android.content.Context; import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Fields; import de.theknut.xposedgelsettings.hooks.PreferencesHelper; import de.theknut.xposedgelsettings.hooks.common.XGELSCallback; import static de.robv.android.xposed.XposedHelpers.setIntField; public final class DeviceProfileLConstructorHook extends XGELSCallback { // http://androidxref.com/4.4.2_r1/xref/packages/apps/Launcher3/src/com/android/launcher3/DynamicGrid.java#99 // DeviceProfile(String n, float w, float h, float r, float c, float is, float its, float hs, float his) public static int NAME = 0; public static int MINWIDTHDPS = 1; public static int MINHEIGHTDPS = 2; public static int NUMROWS = 3; public static int NUMCOLUMNS = 4; public static int ICONSIZE = 5; public static int ICONTEXTSIZE = 6; public static int NUMHOTSEATICONS = 7; public static int HOTSEATICONSIZE = 8; @Override public void onBeforeHookedMethod(MethodHookParam param) throws Throwable { // making sure to only hook to the appropriate constructor if (param.args.length > 0 && !(param.args[NAME] instanceof Context)) { if (PreferencesHelper.changeGridSizeHome) { if (PreferencesHelper.yCountHomescreenVertical != -1) { // set custom row count param.args[NUMROWS] = PreferencesHelper.yCountHomescreenVertical; } if (PreferencesHelper.xCountHomescreenVertical != -1) { // set custom column count param.args[NUMCOLUMNS] = PreferencesHelper.xCountHomescreenVertical; } } if (PreferencesHelper.iconSettingsSwitchHome) { // calculating custom sizes float newIconSize = (float) (Math.ceil((Float) param.args[ICONSIZE] * (PreferencesHelper.iconSize / 100.0))); float newIconTextSize = (float) (Math.ceil((Float) param.args[ICONTEXTSIZE] * (PreferencesHelper.iconTextSize / 100.0))); // some validation if (newIconSize > 0.0 ) { param.args[ICONSIZE] = newIconSize; } else { log("Didn't change icon size! Value was " + newIconSize); } // some validation if (newIconTextSize > 0.0) { param.args[ICONTEXTSIZE] = newIconTextSize; } else { log("Didn't change icon text size! Value was " + newIconTextSize); } } if (PreferencesHelper.appdockSettingsSwitch) { float newHotseatIconSize = (float) (Math.ceil((Float) param.args[HOTSEATICONSIZE] * (PreferencesHelper.appdockIconSize / 100.0))); // some validation if (newHotseatIconSize > 0.0) { param.args[HOTSEATICONSIZE] = newHotseatIconSize; } else { log("Didn't change hotseat icon size! Value was " + newHotseatIconSize); } int hotseatBarHeight = Math.round((Float)param.args[ICONSIZE]) + 24; setIntField(param.thisObject, Fields.dpHotseatBarHeightPx, hotseatBarHeight); } } } @Override public void onAfterHookedMethod(MethodHookParam param) throws Throwable { if (PreferencesHelper.noAllAppsButton) { setIntField(param.thisObject, Fields.dpHotseatAllAppsRank, 50); } else { if (PreferencesHelper.homescreenAllAppsPosition != -1) { setIntField(param.thisObject, Fields.dpHotseatAllAppsRank, PreferencesHelper.homescreenAllAppsPosition - 1); } } if (PreferencesHelper.appDockCount != -1) { setIntField(param.thisObject, Fields.dpNumHotseatIcons, PreferencesHelper.appDockCount); } } }