package com.lody.virtual.client.hook.patchs.am; import android.content.res.Resources; import android.content.res.TypedArray; import android.os.IBinder; import android.util.TypedValue; import com.lody.virtual.client.hook.base.Hook; import com.lody.virtual.client.ipc.ActivityClientRecord; import com.lody.virtual.client.ipc.VActivityManager; import java.lang.reflect.Method; /** * @author Lody */ /*package*/ class FinishActivity extends Hook { @Override public String getName() { return "finishActivity"; } @Override public Object afterCall(Object who, Method method, Object[] args, Object result) throws Throwable { IBinder token = (IBinder) args[0]; ActivityClientRecord r = VActivityManager.get().getActivityRecord(token); boolean taskRemoved = VActivityManager.get().onActivityDestroy(token); if (!taskRemoved && r != null && r.activity != null && r.info.getThemeResource() != 0) { try { TypedValue out = new TypedValue(); Resources.Theme theme = r.activity.getResources().newTheme(); theme.applyStyle(r.info.getThemeResource(), true); if (theme.resolveAttribute(android.R.attr.windowAnimationStyle, out, true)) { TypedArray array = theme.obtainStyledAttributes(out.data, new int[]{ android.R.attr.activityCloseEnterAnimation, android.R.attr.activityCloseExitAnimation }); r.activity.overridePendingTransition(array.getResourceId(0, 0), array.getResourceId(1, 0)); array.recycle(); } } catch (Throwable e) { e.printStackTrace(); } } return super.afterCall(who, method, args, result); } @Override public boolean isEnable() { return isAppProcess(); } }