Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support "package name" and "alias" to use plugin #241

Merged
merged 2 commits into from
Jul 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,11 @@ public static final List<PluginInfo> getPlugins(boolean clone) {
} else {
addTo = info;
}
array.add(addTo);

// 避免加了两次,毕竟包名和别名都会加进来
if (!array.contains(addTo)) {
array.add(addTo);
}
}
}
return array;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import org.json.JSONObject;

import java.io.File;
import java.util.List;
import java.util.Set;

import static com.qihoo360.i.Factory.loadPluginActivity;
Expand Down Expand Up @@ -634,9 +635,11 @@ public void handleServiceDestroy(Service service) {
* @return
*/
public JSONArray fetchPlugins(String name) {
// 先获取List,然后再逐步搞JSON
List<PluginInfo> l = MP.getPlugins(false);
JSONArray ja = new JSONArray();
synchronized (PluginTable.PLUGINS) {
for (PluginInfo info : PluginTable.PLUGINS.values()) {
for (PluginInfo info : l) {
if (TextUtils.isEmpty(name) || TextUtils.equals(info.getName(), name)) {
JSONObject jo = info.getJSON();
ja.put(jo);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,14 @@

package com.qihoo360.loader2;

import android.text.TextUtils;

import com.qihoo360.replugin.RePlugin;
import com.qihoo360.replugin.helper.LogDebug;
import com.qihoo360.replugin.model.PluginInfo;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -43,7 +44,8 @@ class PluginTable {
static final void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
if (LogDebug.DUMP_ENABLED) {
writer.println("--- PluginTable.size = " + PLUGINS.size() + " ---");
for (PluginInfo r : PLUGINS.values()) {
List<PluginInfo> l = MP.getPlugins(false);
for (PluginInfo r : l) {
writer.println(r);
}
writer.println();
Expand All @@ -53,7 +55,7 @@ static final void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
static final void initPlugins(Map<String, Plugin> plugins) {
synchronized (PLUGINS) {
for (Plugin plugin : plugins.values()) {
PLUGINS.put(plugin.mInfo.getName(), plugin.mInfo);
putPluginInfo(plugin.mInfo);
}
}
}
Expand All @@ -73,7 +75,7 @@ static final void updatePlugin(PluginInfo info) {
}

// 此处直接使用该插件,没有考虑是否只采用最新版
PLUGINS.put(info.getName(), info);
putPluginInfo(info);
}
}

Expand All @@ -84,7 +86,7 @@ static final void replaceInfo(PluginInfo info) {
pi = PLUGINS.get(info.getName());
if (pi != null) {
if (pi.canReplaceForPn(info)) {
PLUGINS.put(info.getName(), info);
putPluginInfo(info);
rc = true;
}
}
Expand All @@ -100,7 +102,7 @@ static final void removeInfo(PluginInfo info) {
synchronized (PLUGINS) {
pi = PLUGINS.get(info.getName());
if (pi != null) {
PLUGINS.remove(info.getName());
removePluginInfo(info);
rc = true;
}
}
Expand All @@ -120,16 +122,25 @@ static final List<PluginInfo> buildPlugins() {
LogDebug.d(PLUGIN_TAG, "build plugins");
}

synchronized (PLUGINS) {
ArrayList<PluginInfo> lst = new ArrayList<PluginInfo>(PLUGINS.size());
for (PluginInfo p : PLUGINS.values()) {
lst.add(p);
}
if (LOG) {
LogDebug.d(PLUGIN_TAG, "build " + lst.size() + " plugins");
}
return lst;
List<PluginInfo> lst = MP.getPlugins(false);
if (LOG) {
LogDebug.d(PLUGIN_TAG, "build " + lst.size() + " plugins");
}
return lst;
}

private static void putPluginInfo(PluginInfo info) {
// 同时加入PackageName和Alias(如有)
PLUGINS.put(info.getPackageName(), info);
if (!TextUtils.isEmpty(info.getAlias())) {
// 即便Alias和包名相同也可以再Put一次,反正只是覆盖了相同Value而已
PLUGINS.put(info.getAlias(), info);
}
}

private static void removePluginInfo(PluginInfo info) {
PLUGINS.remove(info.getPackageName());
PLUGINS.remove(info.getAlias());
}

// /**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,17 @@ private final void refreshPluginMap(List<PluginInfo> plugins) {
return;
}
for (PluginInfo info : plugins) {
mPlugins.put(info.getName(), Plugin.build(info));
Plugin plugin = Plugin.build(info);
putPluginObject(info, plugin);
}
}

private void putPluginObject(PluginInfo info, Plugin plugin) {
// 同时加入PackageName和Alias(如有)
mPlugins.put(info.getPackageName(), plugin);
if (!TextUtils.isEmpty(info.getAlias())) {
// 即便Alias和包名相同也可以再Put一次,反正只是覆盖了相同Value而已
mPlugins.put(info.getAlias(), plugin);
}
}

Expand Down Expand Up @@ -1087,7 +1097,9 @@ final void insertNewPlugin(PluginInfo info) {
}
Plugin plugin = Plugin.build(info);
plugin.attach(mContext, mClassLoader, mLocal);
mPlugins.put(info.getName(), plugin);

// 同时加入PackageName和Alias(如有)
putPluginObject(info, plugin);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,15 @@ protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.btn_start_demo1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RePlugin.startActivity(MainActivity.this, RePlugin.createIntent("demo1", "com.qihoo360.replugin.sample.demo1.MainActivity"));
// 刻意以“包名”来打开
RePlugin.startActivity(MainActivity.this, RePlugin.createIntent("com.qihoo360.replugin.sample.demo1", "com.qihoo360.replugin.sample.demo1.MainActivity"));
}
});

findViewById(R.id.btn_start_plugin_for_result).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 刻意以“Alias(别名)”来打开
Intent intent = new Intent();
intent.setComponent(new ComponentName("demo1", "com.qihoo360.replugin.sample.demo1.activity.for_result.ForResultActivity"));
RePlugin.startActivityForResult(MainActivity.this, intent, REQUEST_CODE_DEMO1, null);
Expand Down