fix: improve TIM support
This commit is contained in:
@@ -1059,6 +1059,32 @@ public class Reflex {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Field findFirstDeclaredInstanceFieldByTypeOrNull(@NonNull Class<?> clazz, @NonNull Class<?> type) {
|
||||
Objects.requireNonNull(clazz, "clazz == null");
|
||||
Objects.requireNonNull(type, "type == null");
|
||||
for (Field field : clazz.getDeclaredFields()) {
|
||||
if (field.getType() == type && !Modifier.isStatic(field.getModifiers())) {
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Field findFirstDeclaredStaticFieldByTypeOrNull(@NonNull Class<?> clazz, @NonNull Class<?> type) {
|
||||
Objects.requireNonNull(clazz, "clazz == null");
|
||||
Objects.requireNonNull(type, "type == null");
|
||||
for (Field field : clazz.getDeclaredFields()) {
|
||||
if (field.getType() == type && Modifier.isStatic(field.getModifiers())) {
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Method findMethodByTypes_1(Class<?> clazz, Class returnType, Class... argt)
|
||||
throws NoSuchMethodException {
|
||||
Method method = null;
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowInsets;
|
||||
import android.view.WindowManager;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
@@ -69,6 +70,13 @@ public abstract class AppCompatTransferActivity extends AppCompatActivity {
|
||||
|
||||
protected void requestTranslucentStatusBar() {
|
||||
Window window = getWindow();
|
||||
WindowManager.LayoutParams params = window.getAttributes();
|
||||
params.flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
|
||||
params.flags |= WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
|
||||
}
|
||||
window.setAttributes(params);
|
||||
View decorView = window.getDecorView();
|
||||
int option = decorView.getSystemUiVisibility()
|
||||
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
|
||||
@@ -666,7 +666,11 @@ public class BaseActivity extends AppCompatTransferActivity {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
Class<?> activityLifecycleCallbacksClass = Initiator.loadClass("com.tencent.mobileqq.app.lifecycle.BaseActivityLifecycleCallbacks");
|
||||
Class<?> activityLifecycleCallbacksClass = Initiator.load("com.tencent.mobileqq.app.lifecycle.BaseActivityLifecycleCallbacks");
|
||||
if (activityLifecycleCallbacksClass == null) {
|
||||
// fail silently if not found
|
||||
return;
|
||||
}
|
||||
sOnActivityPreCreatedMethod = activityLifecycleCallbacksClass.getMethod("doOnActivityPreCreated", Activity.class, Bundle.class);
|
||||
sOnActivityCreateMethod = activityLifecycleCallbacksClass.getMethod("doOnActivityCreate", Activity.class, Bundle.class);
|
||||
sOnActivityPostCreatedMethod = activityLifecycleCallbacksClass.getMethod("doOnActivityPostCreated", Activity.class, Bundle.class);
|
||||
|
||||
@@ -638,8 +638,12 @@ public class Initiator {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Class _C2CMessageManager() {
|
||||
return load("com/tencent/imcore/message/C2CMessageManager");
|
||||
public static Class<?> _C2CMessageManager() {
|
||||
Class<?> k = load("com/tencent/imcore/message/C2CMessageManager");
|
||||
if (k == null) {
|
||||
k = load("com/tencent/mobileqq/app/message/C2CMessageManager");
|
||||
}
|
||||
return k;
|
||||
}
|
||||
|
||||
public static Class _AllInOne() {
|
||||
|
||||
@@ -26,10 +26,12 @@ import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import cc.ioctl.util.Reflex;
|
||||
import com.tencent.common.app.BaseApplicationImpl;
|
||||
import io.github.qauxv.SyncUtils;
|
||||
import io.github.qauxv.activity.BaseActivity;
|
||||
import io.github.qauxv.util.HostInfo;
|
||||
import io.github.qauxv.util.Initiator;
|
||||
import io.github.qauxv.util.Log;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.reflect.Field;
|
||||
@@ -76,8 +78,18 @@ public class StartupDirectorBridge {
|
||||
fDirector.setAccessible(true);
|
||||
mDirectorField = fDirector;
|
||||
mNeedInterceptStartActivity = true;
|
||||
} catch (ReflectiveOperationException e) {
|
||||
Log.e(e);
|
||||
} catch (NoSuchFieldException nfe) {
|
||||
Class<?> kStartupDirector = Initiator._StartupDirector();
|
||||
Field fDirector = null;
|
||||
if (kStartupDirector != null) {
|
||||
fDirector = Reflex.findFirstDeclaredStaticFieldByTypeOrNull(BaseApplicationImpl.class, kStartupDirector);
|
||||
}
|
||||
if (fDirector != null) {
|
||||
mDirectorField = fDirector;
|
||||
mNeedInterceptStartActivity = true;
|
||||
} else {
|
||||
Log.e("StartupDirector field not found", nfe);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user