package com.lody.virtual.client.hook.patchs.am;
import android.annotation.TargetApi;
import android.app.ActivityManager;
import android.app.Application;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Build;
import com.lody.virtual.client.VClientImpl;
import com.lody.virtual.client.core.VirtualCore;
import com.lody.virtual.client.hook.base.Hook;
import com.lody.virtual.client.hook.delegate.TaskDescriptionDelegate;
import com.lody.virtual.helper.utils.DrawableUtils;
import java.lang.reflect.Method;
/**
* @author prife
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
/* package */ class SetTaskDescription extends Hook {
@Override
public String getName() {
return "setTaskDescription";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
ActivityManager.TaskDescription td = (ActivityManager.TaskDescription) args[1];
String label = td.getLabel();
Bitmap icon = td.getIcon();
// If the activity label/icon isn't specified, the application's label/icon is shown instead
// Android usually does that for us, but in this case we want info about the contained app, not VIrtualApp itself
if (label == null || icon == null) {
Application app = VClientImpl.get().getCurrentApplication();
if (app != null) {
try {
if (label == null) {
label = app.getApplicationInfo().loadLabel(app.getPackageManager()).toString();
}
if (icon == null) {
Drawable drawable = app.getApplicationInfo().loadIcon(app.getPackageManager());
if (drawable != null) {
icon = DrawableUtils.drawableToBitMap(drawable);
}
}
td = new ActivityManager.TaskDescription(label, icon, td.getPrimaryColor());
} catch (Throwable e) {
e.printStackTrace();
}
}
}
TaskDescriptionDelegate descriptionDelegate = VirtualCore.get().getTaskDescriptionDelegate();
if (descriptionDelegate != null) {
td = descriptionDelegate.getTaskDescription(td);
}
args[1] = td;
return method.invoke(who, args);
}
@Override
public boolean isEnable() {
return isAppProcess();
}
}