Skip to content

Commit 64b10a8

Browse files
committed
修复了一些已知问题
手势: - 修复平板右边角滑动手势被左边角功能覆盖的问题 - 优化选择应用 picker 调整为全部应用
1 parent 04cf272 commit 64b10a8

4 files changed

Lines changed: 58 additions & 8 deletions

File tree

library/core/src/main/java/com/sevtinge/hyperceiler/model/data/AppDataManager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@ public List<AppData> getAppInfo(int modeSelection) {
2525
try {
2626
return switch (modeSelection) {
2727
case SubPickerActivity.LAUNCHER_MODE,
28-
SubPickerActivity.CALLBACK_MODE,
2928
SubPickerActivity.LAUNCHER_PICK_MODE,
3029
SubPickerActivity.INPUT_MODE -> getLauncherApps();
3130
case SubPickerActivity.APP_OPEN_MODE -> getOpenWithApps();
3231
case SubPickerActivity.PROCESS_TEXT_MODE -> getProcessTextApps();
3332
case SubPickerActivity.IME_MODE -> getInputMethodApps();
34-
case SubPickerActivity.ALL_APPS_MODE, SubPickerActivity.SCOPE_MODE -> getAllApps();
33+
case SubPickerActivity.ALL_APPS_MODE,
34+
SubPickerActivity.SCOPE_MODE,
35+
SubPickerActivity.CALLBACK_MODE -> getAllApps();
3536
default -> new ArrayList<>();
3637
};
3738
} catch (Exception e) {

library/core/src/main/java/com/sevtinge/hyperceiler/sub/MultiActionSettings.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919
package com.sevtinge.hyperceiler.sub;
2020

21-
import static com.sevtinge.hyperceiler.sub.SubPickerActivity.LAUNCHER_PICK_MODE;
21+
import static com.sevtinge.hyperceiler.sub.SubPickerActivity.CALLBACK_MODE;
2222

2323
import android.content.ComponentName;
2424
import android.content.Context;
@@ -252,7 +252,7 @@ private void updateRadioButtonPreference(String key) {
252252
@Override
253253
public void onClick() {
254254
Intent intent = new Intent(getActivity(), SubPickerActivity.class);
255-
intent.putExtra("mode", LAUNCHER_PICK_MODE);
255+
intent.putExtra("mode", CALLBACK_MODE);
256256
intent.putExtra("key", mKey);
257257
appPickerLauncher.launch(intent);
258258
}

library/core/src/main/java/com/sevtinge/hyperceiler/sub/SubPickerActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ private List<AppData> processAppData(List<AppData> data) {
353353
}
354354

355355
// 4. 手势应用选择保留 launcher 列表样式,但当前已选项需要置顶
356-
if (mModeSelection == LAUNCHER_PICK_MODE && mKey != null) {
356+
if ((mModeSelection == LAUNCHER_PICK_MODE || mModeSelection == CALLBACK_MODE) && mKey != null) {
357357
String selectedApp = PrefsBridge.getString(mKey + "_app", "");
358358
if (!selectedApp.isEmpty()) {
359359
String[] selectedParts = selectedApp.split("\\|", 2);

library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/rules/home/gesture/CornerSlide.java

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static com.sevtinge.hyperceiler.libhook.utils.hookapi.tool.EzxHelpUtils.findAndHookConstructor;
2323

2424
import android.content.Context;
25+
import android.graphics.RectF;
2526
import android.os.Bundle;
2627
import android.view.MotionEvent;
2728

@@ -37,13 +38,16 @@ public class CornerSlide extends BaseHook {
3738
public int inDirection = 0;
3839

3940
Context mContext;
41+
Class<?> mGestureOperationHelperClass;
4042

4143
@Override
4244
public void init() {
4345
findAndHookMethod("com.android.systemui.shared.recents.system.AssistManager",
4446
"isSupportGoogleAssist", int.class,
4547
returnConstant(true));
4648
Class<?> FsGestureAssistHelper = findClassIfExists("com.miui.home.recents.FsGestureAssistHelper");
49+
Class<?> gestureModeAssistantClass = findClassIfExists("com.miui.home.recents.GestureModeAssistant");
50+
mGestureOperationHelperClass = findClassIfExists("com.miui.home.recents.GestureOperationHelper");
4751
if (isPad()) {
4852
findAndHookMethod(FsGestureAssistHelper, "canTriggerAssistantAction",
4953
float.class, float.class, int.class,
@@ -95,14 +99,27 @@ public void before(HookParam param) {
9599
public void after(HookParam param) {
96100
MotionEvent motionEvent = (MotionEvent) param.getArgs()[0];
97101
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
98-
float mDownX = EzxHelpUtils.getFloatField(param.getThisObject(), "mDownX");
99-
int mAssistantWidth = EzxHelpUtils.getIntField(param.getThisObject(), "mAssistantWidth");
100-
inDirection = mDownX < mAssistantWidth ? 0 : 1;
102+
updateDirection(param.getThisObject(), motionEvent);
101103
}
102104
}
103105
}
104106
);
105107

108+
if (gestureModeAssistantClass != null) {
109+
hookAllMethods(gestureModeAssistantClass,
110+
"onStartGesture", new IMethodHook() {
111+
@Override
112+
public void after(HookParam param) {
113+
updateDirectionFromDownPoint(
114+
param.getThisObject(),
115+
EzxHelpUtils.getFloatField(param.getThisObject(), "mDownX"),
116+
EzxHelpUtils.getFloatField(param.getThisObject(), "mDownY")
117+
);
118+
}
119+
}
120+
);
121+
}
122+
106123
findAndHookConstructor("com.miui.home.recents.NavStubView",
107124
Context.class, new IMethodHook() {
108125
@Override
@@ -132,4 +149,36 @@ public void before(HookParam param) {
132149
}
133150
);
134151
}
152+
153+
private void updateDirection(Object helper, MotionEvent motionEvent) {
154+
updateDirectionFromDownPoint(helper, motionEvent.getRawX(), motionEvent.getRawY());
155+
}
156+
157+
private void updateDirectionFromDownPoint(Object helper, float downX, float downY) {
158+
if (isPad() && updateDirectionWithGestureRegions(downX, downY)) {
159+
return;
160+
}
161+
int assistantWidth = EzxHelpUtils.getIntField(helper, "mAssistantWidth");
162+
inDirection = downX < assistantWidth ? 0 : 1;
163+
}
164+
165+
private boolean updateDirectionWithGestureRegions(float downX, float downY) {
166+
if (mGestureOperationHelperClass == null) {
167+
return false;
168+
}
169+
try {
170+
RectF leftRegion = (RectF) EzxHelpUtils.getStaticObjectField(mGestureOperationHelperClass, "REGION_BOTTOM_LEFT_CORNER");
171+
RectF rightRegion = (RectF) EzxHelpUtils.getStaticObjectField(mGestureOperationHelperClass, "REGION_BOTTOM_RIGHT_CORNER");
172+
if (leftRegion != null && leftRegion.contains(downX, downY)) {
173+
inDirection = 0;
174+
return true;
175+
}
176+
if (rightRegion != null && rightRegion.contains(downX, downY)) {
177+
inDirection = 1;
178+
return true;
179+
}
180+
} catch (Throwable ignored) {
181+
}
182+
return false;
183+
}
135184
}

0 commit comments

Comments
 (0)