feat:add DoricJSLoader
This commit is contained in:
parent
876fa98254
commit
e1ac85d18a
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2019] [Doric.Pub]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package pub.doric;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: pub.doric
|
||||||
|
* @Author: pengfei.zhou
|
||||||
|
* @CreateDate: 2019-11-23
|
||||||
|
*/
|
||||||
|
public class DoricPanelFragment extends Fragment {
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||||
|
return super.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
}
|
||||||
|
}
|
@ -17,6 +17,9 @@ package pub.doric;
|
|||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import pub.doric.loader.DoricAssetJSLoader;
|
||||||
|
import pub.doric.loader.DoricHttpJSLoader;
|
||||||
|
import pub.doric.loader.IDoricJSLoader;
|
||||||
import pub.doric.plugin.NavigatorPlugin;
|
import pub.doric.plugin.NavigatorPlugin;
|
||||||
import pub.doric.plugin.NetworkPlugin;
|
import pub.doric.plugin.NetworkPlugin;
|
||||||
import pub.doric.plugin.ShaderPlugin;
|
import pub.doric.plugin.ShaderPlugin;
|
||||||
@ -37,6 +40,7 @@ import pub.doric.utils.DoricMetaInfo;
|
|||||||
import pub.doric.plugin.DoricJavaPlugin;
|
import pub.doric.plugin.DoricJavaPlugin;
|
||||||
import pub.doric.plugin.ModalPlugin;
|
import pub.doric.plugin.ModalPlugin;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -50,9 +54,16 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
*/
|
*/
|
||||||
public class DoricRegistry {
|
public class DoricRegistry {
|
||||||
private static Map<String, String> bundles = new ConcurrentHashMap<>();
|
private static Map<String, String> bundles = new ConcurrentHashMap<>();
|
||||||
|
private static Set<DoricLibrary> doricLibraries = new HashSet<>();
|
||||||
|
private static Set<IDoricJSLoader> jsLoaders = new HashSet<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
addJSLoader(new DoricAssetJSLoader());
|
||||||
|
addJSLoader(new DoricHttpJSLoader());
|
||||||
|
}
|
||||||
|
|
||||||
private Map<String, DoricMetaInfo<DoricJavaPlugin>> pluginInfoMap = new HashMap<>();
|
private Map<String, DoricMetaInfo<DoricJavaPlugin>> pluginInfoMap = new HashMap<>();
|
||||||
private Map<String, DoricMetaInfo<ViewNode>> nodeInfoMap = new HashMap<>();
|
private Map<String, DoricMetaInfo<ViewNode>> nodeInfoMap = new HashMap<>();
|
||||||
private static Set<DoricLibrary> doricLibraries = new HashSet<>();
|
|
||||||
|
|
||||||
private static void initRegistry(DoricRegistry doricRegistry) {
|
private static void initRegistry(DoricRegistry doricRegistry) {
|
||||||
for (DoricLibrary library : doricLibraries) {
|
for (DoricLibrary library : doricLibraries) {
|
||||||
@ -114,4 +125,12 @@ public class DoricRegistry {
|
|||||||
public String acquireJSBundle(String name) {
|
public String acquireJSBundle(String name) {
|
||||||
return bundles.get(name);
|
return bundles.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void addJSLoader(IDoricJSLoader jsLoader) {
|
||||||
|
jsLoaders.add(jsLoader);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Collection<IDoricJSLoader> getJSLoaders() {
|
||||||
|
return jsLoaders;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,13 @@ public class AsyncResult<R> {
|
|||||||
|
|
||||||
private Callback<R> callback = null;
|
private Callback<R> callback = null;
|
||||||
|
|
||||||
|
public AsyncResult() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public AsyncResult(R r) {
|
||||||
|
this.result = r;
|
||||||
|
}
|
||||||
|
|
||||||
public void setResult(R result) {
|
public void setResult(R result) {
|
||||||
this.result = result;
|
this.result = result;
|
||||||
if (this.callback != null) {
|
if (this.callback != null) {
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2019] [Doric.Pub]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package pub.doric.loader;
|
||||||
|
|
||||||
|
import pub.doric.async.AsyncResult;
|
||||||
|
import pub.doric.utils.DoricUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: handle "assets://asset-file-path"
|
||||||
|
* @Author: pengfei.zhou
|
||||||
|
* @CreateDate: 2019-11-23
|
||||||
|
*/
|
||||||
|
public class DoricAssetJSLoader implements IDoricJSLoader {
|
||||||
|
@Override
|
||||||
|
public boolean filter(String scheme) {
|
||||||
|
return scheme.startsWith("assets");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AsyncResult<String> request(String scheme) {
|
||||||
|
return new AsyncResult<>(DoricUtils.readAssetFile(scheme.substring("assets://".length())));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2019] [Doric.Pub]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package pub.doric.loader;
|
||||||
|
|
||||||
|
import com.bumptech.glide.RequestBuilder;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import okhttp3.Call;
|
||||||
|
import okhttp3.Callback;
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import okhttp3.Request;
|
||||||
|
import okhttp3.Response;
|
||||||
|
import pub.doric.async.AsyncResult;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: handle like "https://xxxx.js"
|
||||||
|
* @Author: pengfei.zhou
|
||||||
|
* @CreateDate: 2019-11-23
|
||||||
|
*/
|
||||||
|
public class DoricHttpJSLoader implements IDoricJSLoader {
|
||||||
|
private OkHttpClient okHttpClient = new OkHttpClient();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean filter(String scheme) {
|
||||||
|
return scheme.startsWith("http");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AsyncResult<String> request(String scheme) {
|
||||||
|
final AsyncResult<String> ret = new AsyncResult<>();
|
||||||
|
okHttpClient.newCall(new Request.Builder().url(scheme).build()).enqueue(new Callback() {
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NotNull Call call, @NotNull IOException e) {
|
||||||
|
ret.setError(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NotNull Call call, @NotNull Response response) {
|
||||||
|
try {
|
||||||
|
ret.setResult(response.body().string());
|
||||||
|
} catch (Exception e) {
|
||||||
|
ret.setError(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2019] [Doric.Pub]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package pub.doric.loader;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import pub.doric.DoricRegistry;
|
||||||
|
import pub.doric.async.AsyncResult;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: pub.doric
|
||||||
|
* @Author: pengfei.zhou
|
||||||
|
* @CreateDate: 2019-11-23
|
||||||
|
*/
|
||||||
|
public class DoricJSLoaderManager {
|
||||||
|
private DoricJSLoaderManager() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Inner {
|
||||||
|
private static final DoricJSLoaderManager sInstance = new DoricJSLoaderManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DoricJSLoaderManager getInstance() {
|
||||||
|
return Inner.sInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AsyncResult<String> loadJSBundle(String scheme) {
|
||||||
|
Collection<IDoricJSLoader> jsLoaders = DoricRegistry.getJSLoaders();
|
||||||
|
for (IDoricJSLoader jsLoader : jsLoaders) {
|
||||||
|
if (jsLoader.filter(scheme)) {
|
||||||
|
return jsLoader.request(scheme);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new AsyncResult<>("");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2019] [Doric.Pub]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package pub.doric.loader;
|
||||||
|
|
||||||
|
import pub.doric.async.AsyncResult;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: pub.doric
|
||||||
|
* @Author: pengfei.zhou
|
||||||
|
* @CreateDate: 2019-11-23
|
||||||
|
*/
|
||||||
|
public interface IDoricJSLoader {
|
||||||
|
boolean filter(String scheme);
|
||||||
|
|
||||||
|
AsyncResult<String> request(String scheme);
|
||||||
|
}
|
Reference in New Issue
Block a user