翰林优商.apk(点击下载) / ComponentManager.java


package com.bytedance.pangle;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import androidx.fragment.app.Fragment;
import com.bytedance.pangle.log.ZeusLogger;
import com.bytedance.pangle.receiver.PluginBroadcastReceiver;
import com.bytedance.pangle.receiver.a;
import com.bytedance.pangle.receiver.c;
import com.bytedance.pangle.util.MethodUtils;
import java.util.HashMap;
import java.util.Map;

public class ComponentManager {
    public static HashMap<String, String> stubString2PluginPkgName = new HashMap<>();
    public static HashMap<String, String> target2StubActivity = new HashMap<>();
    public static HashMap<String, String> targetString2PluginPkgName = new HashMap<>();
    public static HashMap<String, String> targetString2StubActivity = new HashMap<>();

    public static void registerActivity(String str, String str2, String... strArr) {
        if (strArr != null) {
            for (String str3 : strArr) {
                String str4 = targetString2PluginPkgName.get(str3);
                if (str4 == null || !TextUtils.equals(str4, str)) {
                    target2StubActivity.put(str3, str2);
                    targetString2StubActivity.put(str3, str2);
                    targetString2PluginPkgName.put(str3, str);
                    stubString2PluginPkgName.put(str2, str);
                } else {
                    throw new RuntimeException(String.format("%s is repeated in %s and %s", str3, str, str4));
                }
            }
        }
    }

    public static void startActivity(Object obj, Intent intent, Bundle bundle, String str) {
        if (obj instanceof Context) {
            realStartActivity(null, (Context) obj, intent, bundle, str);
        } else if (obj instanceof Fragment) {
            realStartActivity(obj, ((Fragment) obj).getActivity(), intent, bundle, str);
        } else if (obj instanceof android.app.Fragment) {
            realStartActivity(obj, ((android.app.Fragment) obj).getActivity(), intent, bundle, str);
        } else {
            try {
                MethodUtils.invokeMethod(obj, "startActivity", new Object[]{intent, bundle}, new Class[]{Intent.class, Bundle.class});
            } catch (Throwable th) {
                throw new RuntimeException(th);
            }
        }
    }

    public static void startActivity(Context context, Intent intent, String str) {
        realStartActivity(null, context, intent, null, str);
    }

    public static void startActivity(Context context, Intent intent, Bundle bundle, String str) {
        realStartActivity(null, context, intent, bundle, str);
    }

    public static void realStartActivity(Object obj, Context context, Intent intent, Bundle bundle, String str) {
        if (context instanceof PluginContext) {
            context = ((PluginContext) context).mOriginContext;
        }
        if (intent.getComponent() != null) {
            String className = intent.getComponent().getClassName();
            Zeus.loadPlugin(str);
            String str2 = targetString2StubActivity.get(className);
            if (!TextUtils.isEmpty(str2)) {
                intent.setComponent(new ComponentName(context, str2));
                intent.putExtra("targetPlugin", className);
            }
        }
        try {
            if (obj instanceof Fragment) {
                ((Fragment) obj).startActivity(intent, bundle);
            } else if (obj instanceof android.app.Fragment) {
                ((android.app.Fragment) obj).startActivity(intent, bundle);
            } else {
                context.startActivity(intent, bundle);
            }
        } catch (Throwable th) {
            throw new RuntimeException("component = " + intent.getComponent(), th);
        }
    }

    public static void startActivityForResult(Object obj, Intent intent, int i, Bundle bundle, String str) {
        if (obj instanceof Activity) {
            realStartActivityForResult(null, (Activity) obj, intent, i, null, str);
        } else if (obj instanceof Fragment) {
            realStartActivityForResult(obj, ((Fragment) obj).getActivity(), intent, i, null, str);
        } else if (obj instanceof android.app.Fragment) {
            realStartActivityForResult(obj, ((android.app.Fragment) obj).getActivity(), intent, i, null, str);
        } else {
            try {
                MethodUtils.invokeMethod(obj, "startActivityForResult", new Object[]{intent, Integer.valueOf(i), bundle}, new Class[]{Intent.class, Integer.TYPE, Bundle.class});
            } catch (Throwable th) {
                throw new RuntimeException(th);
            }
        }
    }

    public static void startActivityForResult(Activity activity, Intent intent, int i, Bundle bundle, String str) {
        realStartActivityForResult(null, activity, intent, i, bundle, str);
    }

    private static void realStartActivityForResult(Object obj, Activity activity, Intent intent, int i, Bundle bundle, String str) {
        if (intent.getComponent() != null) {
            String className = intent.getComponent().getClassName();
            Zeus.loadPlugin(str);
            String str2 = targetString2StubActivity.get(className);
            if (!TextUtils.isEmpty(str2)) {
                intent.setComponent(new ComponentName(activity, str2));
                intent.putExtra("targetPlugin", className);
            }
        }
        try {
            if (obj instanceof Fragment) {
                ((Fragment) obj).startActivityForResult(intent, i, bundle);
            } else if (obj instanceof android.app.Fragment) {
                ((android.app.Fragment) obj).startActivityForResult(intent, i, bundle);
            } else {
                activity.startActivityForResult(intent, i, bundle);
            }
        } catch (Throwable th) {
            throw new RuntimeException("component =  " + intent.getComponent(), th);
        }
    }

    public static Intent registerReceiver(Context context, PluginBroadcastReceiver pluginBroadcastReceiver, IntentFilter intentFilter, String str) {
        Zeus.loadPlugin(str);
        if (pluginBroadcastReceiver != null) {
            c a = c.a();
            if (!(pluginBroadcastReceiver == null || intentFilter == null || intentFilter.actionsIterator() == null)) {
                a aVar = new a();
                Intent registerReceiver = context.registerReceiver(aVar, intentFilter);
                a.b.put(pluginBroadcastReceiver, aVar);
                a.a(intentFilter, pluginBroadcastReceiver);
                return registerReceiver;
            }
        }
        return null;
    }

    public static Intent registerReceiver(Context context, PluginBroadcastReceiver pluginBroadcastReceiver, IntentFilter intentFilter, String str, Handler handler, String str2) {
        Zeus.loadPlugin(str2);
        if (pluginBroadcastReceiver != null) {
            c a = c.a();
            if (!(pluginBroadcastReceiver == null || intentFilter == null || intentFilter.actionsIterator() == null)) {
                a aVar = new a();
                Intent registerReceiver = context.registerReceiver(aVar, intentFilter, str, handler);
                a.b.put(pluginBroadcastReceiver, aVar);
                if (handler != null) {
                    a.c.add(Integer.valueOf(aVar.hashCode()));
                }
                a.a(intentFilter, pluginBroadcastReceiver);
                return registerReceiver;
            }
        }
        return null;
    }

    public static Intent registerReceiver(Context context, PluginBroadcastReceiver pluginBroadcastReceiver, IntentFilter intentFilter, int i, String str) {
        Zeus.loadPlugin(str);
        if (pluginBroadcastReceiver != null) {
            c a = c.a();
            if (!(pluginBroadcastReceiver == null || intentFilter == null || intentFilter.actionsIterator() == null || Build.VERSION.SDK_INT < 26)) {
                a aVar = new a();
                Intent registerReceiver = context.registerReceiver(aVar, intentFilter, i);
                a.b.put(pluginBroadcastReceiver, aVar);
                a.a(intentFilter, pluginBroadcastReceiver);
                return registerReceiver;
            }
        }
        return null;
    }

    public static Intent registerReceiver(Context context, PluginBroadcastReceiver pluginBroadcastReceiver, IntentFilter intentFilter, String str, Handler handler, int i, String str2) {
        Zeus.loadPlugin(str2);
        if (pluginBroadcastReceiver != null) {
            c a = c.a();
            if (!(pluginBroadcastReceiver == null || intentFilter == null || intentFilter.actionsIterator() == null || Build.VERSION.SDK_INT < 26)) {
                a aVar = new a();
                Intent registerReceiver = context.registerReceiver(aVar, intentFilter, str, handler, i);
                a.b.put(pluginBroadcastReceiver, aVar);
                if (handler != null) {
                    a.c.add(Integer.valueOf(aVar.hashCode()));
                }
                a.a(intentFilter, pluginBroadcastReceiver);
                return registerReceiver;
            }
        }
        return null;
    }

    public static void unregisterReceiver(Context context, PluginBroadcastReceiver pluginBroadcastReceiver) {
        boolean remove;
        if (pluginBroadcastReceiver != null) {
            c a = c.a();
            for (Map.Entry<String, c.a> entry : a.a.entrySet()) {
                c.a value = entry.getValue();
                if (!(value == null || pluginBroadcastReceiver == null)) {
                    try {
                        if (value.b.size() > 0 && (remove = value.b.remove(pluginBroadcastReceiver))) {
                            ZeusLogger.d(ZeusLogger.TAG_RECEIVER, "unregisterReceiver->[移除Action]:" + value.a + ",receiver.hashCode()=" + pluginBroadcastReceiver.hashCode() + ",是否成功,success:" + remove);
                        }
                    } catch (Throwable th) {
                        ZeusLogger.e(ZeusLogger.TAG_RECEIVER, "unregisterReceiver-plugin-receiver->action:" + value.a + "[exception]:", th);
                    }
                }
                BroadcastReceiver broadcastReceiver = a.b.get(pluginBroadcastReceiver);
                if (broadcastReceiver != null) {
                    try {
                        a.c.remove(Integer.valueOf(broadcastReceiver.hashCode()));
                        a.b.remove(pluginBroadcastReceiver);
                        context.unregisterReceiver(broadcastReceiver);
                    } catch (Throwable th2) {
                        ZeusLogger.e(ZeusLogger.TAG_RECEIVER, "unregisterReceiver-移除系统注册的广播发生异常:", th2);
                    }
                }
            }
        }
    }
}