BaseActivityManagerService.java 源代码


package com.x8zs.morgoo.droidplugin.am;

import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ProviderInfo;
import android.content.pm.ServiceInfo;
import android.os.Bundle;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import com.x8zs.morgoo.droidplugin.pm.IApplicationCallback;
import com.x8zs.morgoo.droidplugin.pm.IPluginManagerImpl;
import com.x8zs.morgoo.droidplugin.pm.parser.PluginPackageParser;
import com.x8zs.morgoo.helper.Log;
import java.util.List;
import java.util.Map;

public abstract class BaseActivityManagerService {
    private static final String TAG = "BaseActivityManagerService";
    protected Context mHostContext;
    private RemoteCallbackList<IApplicationCallback> mRemoteCallbackList;

    private class MyRemoteCallbackList extends RemoteCallbackList<IApplicationCallback> {
        private MyRemoteCallbackList() {
        }

        @Override
        public void onCallbackDied(IApplicationCallback iApplicationCallback, Object obj) {
            super.onCallbackDied((MyRemoteCallbackList) iApplicationCallback, obj);
            if (obj == null || !(obj instanceof ProcessCookie)) {
                return;
            }
            ProcessCookie processCookie = (ProcessCookie) obj;
            BaseActivityManagerService.this.onProcessDied(processCookie.pid, processCookie.uid);
        }
    }

    public static class ProcessCookie {
        private final int pid;
        private final int uid;

        private ProcessCookie(int i6, int i7) {
            this.pid = i6;
            this.uid = i7;
        }
    }

    public BaseActivityManagerService(Context context) {
        this.mHostContext = context;
    }

    public abstract List<String> getPackageNamesByPid(int i6);

    public String getProcessNameByPid(int i6) {
        return null;
    }

    public abstract ServiceInfo getTargetServiceInfo(int i6, int i7, ServiceInfo serviceInfo);

    public void onActivityCreated(int i6, int i7, ActivityInfo activityInfo, ActivityInfo activityInfo2) {
    }

    public void onActivityDestory(int i6, int i7, ActivityInfo activityInfo, ActivityInfo activityInfo2) {
    }

    public abstract void onActivtyOnNewIntent(int i6, int i7, ActivityInfo activityInfo, ActivityInfo activityInfo2, Intent intent);

    public void onCreate(IPluginManagerImpl iPluginManagerImpl) {
        if (this.mRemoteCallbackList == null) {
            this.mRemoteCallbackList = new MyRemoteCallbackList();
        }
    }

    public void onDestory() {
        this.mRemoteCallbackList.kill();
        this.mRemoteCallbackList = null;
    }

    public void onPkgDeleted(Map<String, PluginPackageParser> map, PluginPackageParser pluginPackageParser, String str) {
    }

    public void onPkgInstalled(Map<String, PluginPackageParser> map, PluginPackageParser pluginPackageParser, String str) {
    }

    public void onProcessDied(int i6, int i7) {
        Log.i(TAG, "onProcessDied,pid=%s,uid=%s", Integer.valueOf(i6), Integer.valueOf(i7));
    }

    public void onProviderCreated(int i6, int i7, ProviderInfo providerInfo, ProviderInfo providerInfo2) {
    }

    public void onReportMyProcessName(int i6, int i7, String str, String str2, String str3) {
    }

    public void onServiceCreated(int i6, int i7, ServiceInfo serviceInfo, ServiceInfo serviceInfo2) {
    }

    public void onServiceDestory(int i6, int i7, ServiceInfo serviceInfo, ServiceInfo serviceInfo2) {
    }

    public boolean registerApplicationCallback(int i6, int i7, IApplicationCallback iApplicationCallback) {
        return this.mRemoteCallbackList.register(iApplicationCallback, new ProcessCookie(i6, i7));
    }

    public abstract ActivityInfo selectStubActivityInfo(int i6, int i7, ActivityInfo activityInfo);

    public abstract ProviderInfo selectStubProviderInfo(int i6, int i7, ProviderInfo providerInfo);

    public abstract ServiceInfo selectStubServiceInfo(int i6, int i7, ServiceInfo serviceInfo);

    protected void sendCallBack(Bundle bundle) {
        RemoteCallbackList<IApplicationCallback> remoteCallbackList = this.mRemoteCallbackList;
        if (remoteCallbackList != null) {
            int beginBroadcast = remoteCallbackList.beginBroadcast();
            while (beginBroadcast > 0) {
                beginBroadcast--;
                try {
                    this.mRemoteCallbackList.getBroadcastItem(beginBroadcast).onCallback(bundle);
                } catch (RemoteException unused) {
                }
            }
            this.mRemoteCallbackList.finishBroadcast();
        }
    }

    public boolean unregisterApplicationCallback(int i6, int i7, IApplicationCallback iApplicationCallback) {
        return this.mRemoteCallbackList.unregister(iApplicationCallback);
    }
}