package de.theknut.xposedgelsettings.hooks.homescreen;
import de.robv.android.xposed.XC_MethodHook;
import de.theknut.xposedgelsettings.hooks.Common;
import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Fields;
import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Methods;
import de.theknut.xposedgelsettings.hooks.PreferencesHelper;
import de.theknut.xposedgelsettings.hooks.gestures.GestureHelper;
import static de.robv.android.xposed.XposedHelpers.callMethod;
import static de.robv.android.xposed.XposedHelpers.getBooleanField;
public class OverScrollWorkspaceHook extends XC_MethodHook {
// http://androidxref.com/4.4.2_r1/xref/packages/apps/Launcher3/src/com/android/launcher3/Workspace.java#1536
// overScroll(float amount)
boolean boom = false;
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable
{
float overscroll = (Float) param.args[0];
boolean isPageMoving = getBooleanField(param.thisObject, Fields.pvIsPageMoving);
boolean isSwitchingState = getBooleanField(param.thisObject, Fields.wIsSwitchingState);
if (!isPageMoving || isSwitchingState) {
return;
}
if (overscroll > 50.0) {
if (PreferencesHelper.continuousScrollWithAppDrawer) {
Common.OVERSCROLLED = true;
GestureHelper.handleGesture(Common.LAUNCHER_CONTEXT, null, "OPEN_APPDRAWER");
callMethod(Common.APP_DRAWER_INSTANCE, Methods.pvSetCurrentPage, 0);
}
else {
if ((Boolean) callMethod(Common.LAUNCHER_INSTANCE, Methods.lHasCustomContentToLeft)) {
callMethod(Common.WORKSPACE_INSTANCE, Methods.wSnapToPage, 1);
}
else {
callMethod(Common.WORKSPACE_INSTANCE, Methods.wSnapToPage, 0);
}
}
}
else if (overscroll < -50.0) {
if (PreferencesHelper.continuousScrollWithAppDrawer) {
GestureHelper.handleGesture(Common.LAUNCHER_CONTEXT, null, "OPEN_APPDRAWER");
Common.OVERSCROLLED = true;
int lastPage = (Integer) callMethod(Common.APP_DRAWER_INSTANCE, "getChildCount") - 1;
callMethod(Common.APP_DRAWER_INSTANCE, Methods.pvSetCurrentPage, lastPage);
}
else {
int lastPage = (Integer) callMethod(Common.WORKSPACE_INSTANCE, "getChildCount") - 1;
callMethod(Common.WORKSPACE_INSTANCE, Methods.wSnapToPage, lastPage);
}
}
}
}