package com.mogo.launcher.lancet; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import androidx.annotation.Keep; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.knightboost.lancet.api.Origin; import com.knightboost.lancet.api.Scope; import com.knightboost.lancet.api.This; import com.knightboost.lancet.api.annotations.Group; import com.knightboost.lancet.api.annotations.Insert; import com.knightboost.lancet.api.annotations.ReplaceInvoke; import com.knightboost.lancet.api.annotations.TargetClass; import com.knightboost.lancet.api.annotations.TargetMethod; import com.knightboost.lancet.api.annotations.Weaver; import com.mogo.eagle.core.function.api.devatools.mofang.IMoGoMoFangProvider; import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager; @Keep @Weaver @Group("window_callback") public class WindowCallbackLancet { @Insert(mayCreateSuper = true) @TargetClass(value = "androidx.appcompat.app.AppCompatActivity", scope = Scope.SELF) @TargetMethod(methodName = "onCreate") protected void onCreate(@Nullable Bundle savedInstanceState) { Origin.callVoid(); Object o = This.get(); if (o instanceof Activity) { Activity activity = (Activity) o; IMoGoMoFangProvider mofang = CallerDevaToolsManager.INSTANCE.mofang(); if (mofang != null) { Window.Callback callback = mofang.provideWindowCallback(activity.getWindow().getCallback()); activity.getWindow().setCallback(callback); } } } @Insert(mayCreateSuper = true) @TargetClass(value = "androidx.fragment.app.DialogFragment", scope = Scope.SELF) @TargetMethod(methodName = "onCreateDialog") public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { Dialog dialog = (Dialog) Origin.call(); IMoGoMoFangProvider mofang = CallerDevaToolsManager.INSTANCE.mofang(); if (dialog.getWindow() != null && mofang != null) { dialog.getWindow().setCallback(mofang.provideWindowCallback(dialog.getWindow().getCallback())); } return dialog; } // @TargetClass(value = "android.view.WindowManager",scope = Scope.SELF) // @TargetMethod(methodName = "addView") // @ReplaceInvoke // public static void proxyWindowManagerAddView(WindowManager manager, View view, ViewGroup.LayoutParams params) { // manager.addView(view, params); // Log.d("XXXXXX", "--- add view ---- 1 ---"); // IMoGoMoFangProvider mofang = CallerDevaToolsManager.INSTANCE.mofang(); // if (mofang != null) { // Log.d("XXXXXX", "--- add view ---- 2 ---"); // Window.Callback callback = mofang.provideWindowCallback(null); // view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { // @Override // public void onViewAttachedToWindow(@NonNull View v) { // Log.d("XXXXXX", "--- add view ---- 3 ---"); // v.setOnKeyListener((v1, keyCode, event) -> { // Log.d("XXXXXX", "--- add view ---- 4 ---"); // return callback.dispatchKeyEvent(event); // }); // } // // @Override // public void onViewDetachedFromWindow(@NonNull View v) { // // } // }); // } // } }