package de.theknut.xposedgelsettings.hooks.homescreen; import android.content.Intent; import android.view.MotionEvent; import android.view.View; import java.util.ArrayList; import de.theknut.xposedgelsettings.hooks.Common; import de.theknut.xposedgelsettings.hooks.HooksBaseClass; 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.Utils; import de.theknut.xposedgelsettings.hooks.gestures.GestureHelper; import static de.robv.android.xposed.XposedHelpers.callMethod; import static de.robv.android.xposed.XposedHelpers.getBooleanField; import static de.robv.android.xposed.XposedHelpers.getObjectField; public class SmartFolderHook extends HooksBaseClass { float downY, downX; @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { if ((Boolean) callMethod(Common.LAUNCHER_INSTANCE, Methods.lIsAllAppsVisible)) { return; } MotionEvent ev = (MotionEvent) param.args[0]; switch (ev.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: Common.FOLDER_GESTURE_ACTIVE = true; downY = ev.getRawY(); downX = ev.getRawX(); break; case MotionEvent.ACTION_CANCEL: Common.FOLDER_GESTURE_ACTIVE = false; break; case MotionEvent.ACTION_UP: if (getBooleanField(getObjectField(param.thisObject, Fields.fiLongPressHelper), Fields.clphHasPerformedLongPress)) { return; } if (downY - ev.getRawY() <= GestureHelper.gestureDistance && downX - ev.getRawX() <= GestureHelper.gestureDistance) { handleAction("SWIPE", param); } else { handleAction("TOUCH", param); } Common.FOLDER_GESTURE_ACTIVE = false; break; } } public void handleAction(String action, MethodHookParam param) { // 1 = Swipe up - open folder / Touch - launch app // 2 = Swipe up - launch app / Touch - open folder if (action.equals("SWIPE")) { if (PreferencesHelper.smartFolderMode == 1) { openFolder(param); } else if (PreferencesHelper.smartFolderMode == 2) { launchFirstApp(param); } } else if (action.equals("TOUCH")) { if (PreferencesHelper.smartFolderMode == 1) { launchFirstApp(param); } else if (PreferencesHelper.smartFolderMode == 2) { openFolder(param); } } } public void openFolder(MethodHookParam param) { callMethod(Common.LAUNCHER_INSTANCE, Methods.lOpenFolder, param.thisObject); } public void launchFirstApp(MethodHookParam param) { View firstItemInFolder = (View) ((ArrayList) callMethod( getObjectField(param.thisObject, Fields.fiFolder), Methods.fGetItemsInReadingOrder)) .get(0); Utils.startActivity((Intent) callMethod(firstItemInFolder.getTag(), "getIntent")); param.setResult(true); } }