android head node logic changed
This commit is contained in:
parent
56852286e3
commit
9a77578b9b
@ -53,25 +53,40 @@ public class DoricContext {
|
|||||||
private String extra;
|
private String extra;
|
||||||
private JSONObject initParams;
|
private JSONObject initParams;
|
||||||
private IDoricDriver doricDriver;
|
private IDoricDriver doricDriver;
|
||||||
private final Map<String, ViewNode> mHeadNodes = new HashMap<>();
|
private final Map<String, Map<String, ViewNode>> mHeadNodes = new HashMap<>();
|
||||||
|
|
||||||
public Collection<ViewNode> allHeadNodes() {
|
public Collection<ViewNode> allHeadNodes(String type) {
|
||||||
return mHeadNodes.values();
|
return mHeadNodes.get(type).values();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addHeadNode(ViewNode viewNode) {
|
public void addHeadNode(String type, ViewNode viewNode) {
|
||||||
mHeadNodes.put(viewNode.getId(), viewNode);
|
Map<String, ViewNode> map = mHeadNodes.get(type);
|
||||||
|
if (map != null) {
|
||||||
|
map.put(viewNode.getId(), viewNode);
|
||||||
|
} else {
|
||||||
|
map = new HashMap<>();
|
||||||
|
map.put(viewNode.getId(), viewNode);
|
||||||
|
mHeadNodes.put(type, map);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeHeadNode(ViewNode viewNode) {
|
public void removeHeadNode(String type, ViewNode viewNode) {
|
||||||
mHeadNodes.remove(viewNode.getId());
|
Map<String, ViewNode> map = mHeadNodes.get(type);
|
||||||
|
if (map != null) {
|
||||||
|
map.remove(viewNode.getId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ViewNode targetViewNode(String id) {
|
public ViewNode targetViewNode(String id) {
|
||||||
if (id.equals(mRootNode.getId())) {
|
if (id.equals(mRootNode.getId())) {
|
||||||
return mRootNode;
|
return mRootNode;
|
||||||
}
|
}
|
||||||
return mHeadNodes.get(id);
|
for (Map<String, ViewNode> map : mHeadNodes.values()) {
|
||||||
|
if (map.containsKey(id)) {
|
||||||
|
return map.get(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected DoricContext(Context context, String contextId, String source, String extra) {
|
protected DoricContext(Context context, String contextId, String source, String extra) {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package pub.doric.plugin;
|
package pub.doric.plugin;
|
||||||
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
@ -26,6 +25,8 @@ import pub.doric.utils.ThreadMode;
|
|||||||
*/
|
*/
|
||||||
@DoricPlugin(name = "popover")
|
@DoricPlugin(name = "popover")
|
||||||
public class PopoverPlugin extends DoricJavaPlugin {
|
public class PopoverPlugin extends DoricJavaPlugin {
|
||||||
|
private static final String TYPE = "popover";
|
||||||
|
|
||||||
private FrameLayout mFullScreenView;
|
private FrameLayout mFullScreenView;
|
||||||
|
|
||||||
public PopoverPlugin(DoricContext doricContext) {
|
public PopoverPlugin(DoricContext doricContext) {
|
||||||
@ -53,7 +54,7 @@ public class PopoverPlugin extends DoricJavaPlugin {
|
|||||||
node.init(new FrameLayout.LayoutParams(0, 0));
|
node.init(new FrameLayout.LayoutParams(0, 0));
|
||||||
node.blend(jsObject.getProperty("props").asObject());
|
node.blend(jsObject.getProperty("props").asObject());
|
||||||
mFullScreenView.addView(node.getNodeView());
|
mFullScreenView.addView(node.getNodeView());
|
||||||
getDoricContext().addHeadNode(node);
|
getDoricContext().addHeadNode(TYPE, node);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}, ThreadMode.UI).setCallback(new AsyncResult.Callback<Object>() {
|
}, ThreadMode.UI).setCallback(new AsyncResult.Callback<Object>() {
|
||||||
@ -120,9 +121,9 @@ public class PopoverPlugin extends DoricJavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void dismissViewNode(ViewNode node) {
|
private void dismissViewNode(ViewNode node) {
|
||||||
getDoricContext().removeHeadNode(node);
|
getDoricContext().removeHeadNode(TYPE, node);
|
||||||
mFullScreenView.removeView(node.getNodeView());
|
mFullScreenView.removeView(node.getNodeView());
|
||||||
if (getDoricContext().allHeadNodes().isEmpty()) {
|
if (getDoricContext().allHeadNodes(TYPE).isEmpty()) {
|
||||||
ViewGroup decorView = (ViewGroup) getDoricContext().getRootNode().getNodeView().getRootView();
|
ViewGroup decorView = (ViewGroup) getDoricContext().getRootNode().getNodeView().getRootView();
|
||||||
decorView.removeView(mFullScreenView);
|
decorView.removeView(mFullScreenView);
|
||||||
mFullScreenView = null;
|
mFullScreenView = null;
|
||||||
@ -130,7 +131,7 @@ public class PopoverPlugin extends DoricJavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void dismissPopover() {
|
private void dismissPopover() {
|
||||||
for (ViewNode node : getDoricContext().allHeadNodes()) {
|
for (ViewNode node : getDoricContext().allHeadNodes(TYPE)) {
|
||||||
dismissViewNode(node);
|
dismissViewNode(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user