Skip to content

Commit

Permalink
fix: 系统界面-状态栏-图标-闹钟-仅在闹钟响铃前显示闹钟图标 设置失效的问题(Miui14-HyperOS2)
Browse files Browse the repository at this point in the history
  • Loading branch information
lingqiqi5211 committed Jan 11, 2025
1 parent 845dc94 commit 5366634
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,16 +100,22 @@ public void run() {
myhandler.removeCallbacks(this);
if (!enableSideBar) {
Object li = XposedHelpers.getObjectField(view, "mListenerInfo");
Object mOnTouchListener = XposedHelpers.getObjectField(li, "mOnTouchListener");
findAndHookMethod(mOnTouchListener.getClass(), "onTouch", View.class, MotionEvent.class, new MethodHook() {
@Override
protected void before(MethodHookParam param) throws Throwable {
MotionEvent me = (MotionEvent) param.args[1];
if (me.getSource() != 9999) {
param.setResult(false);
}
if (li != null) {
try {
Object mOnTouchListener = XposedHelpers.getObjectField(li, "mOnTouchListener");
findAndHookMethod(mOnTouchListener.getClass(), "onTouch", View.class, MotionEvent.class, new MethodHook() {
@Override
protected void before(MethodHookParam param) throws Throwable {
MotionEvent me = (MotionEvent) param.args[1];
if (me.getSource() != 9999) {
param.setResult(false);
}
}
});
} catch (Throwable e) {
logE(TAG, lpparam.packageName, "OnTouchListener is failed, " + e);
}
});
}
}
if (isNewVersion) {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@
*/
package com.sevtinge.hyperceiler.module.hook.systemui.statusbar;

import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isAndroidVersion;
import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMiuiVersion;
import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreAndroidVersion;
import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreHyperOSVersion;
import static com.sevtinge.hyperceiler.utils.devicesdk.SystemSDKKt.isMoreMiuiVersion;

import android.app.AlarmManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
Expand Down Expand Up @@ -45,17 +51,20 @@ public class SelectiveHideIconForAlarmClock extends BaseHook {
private boolean lastState = false;

Class<?> mMiuiPhoneStatusBarPolicy;
Class<?> mPhoneStatusBarPolicy;

@Override
public void init() {
mMiuiPhoneStatusBarPolicy = findClassIfExists("com.android.systemui.statusbar.phone.MiuiPhoneStatusBarPolicy");
mPhoneStatusBarPolicy = findClassIfExists("com.android.systemui.statusbar.phone.PhoneStatusBarPolicy$4");

hookAllConstructors(mMiuiPhoneStatusBarPolicy, new MethodHook() {
@Override
protected void after(MethodHookParam param) {
Context mContext = (Context) XposedHelpers.getObjectField(param.thisObject, "mContext");
XposedHelpers.setAdditionalInstanceField(param.thisObject, "mNextAlarmTime", getNextMIUIAlarmTime(mContext));
ContentResolver resolver = mContext.getContentResolver();
ContentObserver alarmObserver = new ContentObserver(new Handler()) {
ContentObserver alarmObserver = new ContentObserver(new Handler(mContext.getMainLooper())) {
@Override
public void onChange(boolean selfChange) {
if (selfChange) return;
Expand All @@ -80,22 +89,26 @@ public void onReceive(Context context, Intent intent) {
}
});

findAndHookMethod("com.android.systemui.statusbar.phone.PhoneStatusBarPolicy", "updateAlarm", new MethodHook() {
findAndHookMethod(mPhoneStatusBarPolicy, "onAlarmChanged", boolean.class, new MethodHook() {
@Override
protected void after(MethodHookParam param) throws Throwable {
lastState = (boolean) XposedHelpers.getObjectField(param.thisObject, "mHasAlarm");
updateAlarmVisibility(param.thisObject, lastState);
}
});

findAndHookMethod(mMiuiPhoneStatusBarPolicy, "onMiuiAlarmChanged", new MethodHook() {
@Override
protected void before(MethodHookParam param) {
lastState = (boolean) XposedHelpers.getObjectField(param.thisObject, "mHasAlarm");
updateAlarmVisibility(param.thisObject, lastState);
Object getThisObject = XposedHelpers.getObjectField(param.thisObject, "this$0");
lastState = (boolean) XposedHelpers.getObjectField(getThisObject, "mHasAlarm");
updateAlarmVisibility(getThisObject, lastState);
param.setResult(null);
}
});

if (isAndroidVersion(33) && !isMoreHyperOSVersion(1f)) {
findAndHookMethod(mMiuiPhoneStatusBarPolicy, "onMiuiAlarmChanged", new MethodHook() {
@Override
protected void before(MethodHookParam param) {
lastState = (boolean) XposedHelpers.getObjectField(param.thisObject, "mHasAlarm");
updateAlarmVisibility(param.thisObject, lastState);
param.setResult(null);
}
});
}
}

private void updateAlarmVisibility(Object thisObject, boolean state) {
Expand All @@ -121,8 +134,10 @@ private void updateAlarmVisibility(Object thisObject, boolean state) {
float diffHours = (diffMSec - 59 * 1000) / (1000f * 60f * 60f);
boolean vis = diffHours <= mPrefsMap.getInt("system_ui_status_bar_icon_alarm_clock_n", 0);
XposedHelpers.callMethod(mIconController, "setIconVisibility", "alarm_clock", vis);
mIconController = XposedHelpers.getObjectField(thisObject, "miuiDripLeftStatusBarIconController");
XposedHelpers.callMethod(mIconController, "setIconVisibility", "alarm_clock", vis);
if (!isMoreHyperOSVersion(1f)) {
mIconController = XposedHelpers.getObjectField(thisObject, "miuiDripLeftStatusBarIconController");
XposedHelpers.callMethod(mIconController, "setIconVisibility", "alarm_clock", vis);
}
logI(TAG, this.lpparam.packageName, "Now is " + diffHours + "min remain, show when " + vis + "min remain.");
} catch (Throwable t) {
logE(TAG, this.lpparam.packageName, "updateAlarmVisibility failed", t);
Expand Down

0 comments on commit 5366634

Please sign in to comment.