增加删除拓展区域的plugin

增加删除展区域的plugin
发布时间: 2018-03-22 19:35

回答:

ImagePlugin(图片)和FilePlugin(文件)是SDK默认添加到拓展区的,其它的plugin开发者也可以自定义,如果开发者想要删除按照以下步骤:

方案一:

第一步:自定义一个 ExtensionModule 继承自 DefaultExtensionModule,复写其中的 getPluginModules() 方法:

例如:

public class LiaoBaExtensionModule extends DefaultExtensionModule {
    private EditText mEditText;

    @Override
    public void onAttachedToExtension(RongExtension extension) {
        super.onAttachedToExtension(extension);
        mEditText = extension.getInputEditText();
    }

    @Override
    public void onDetachedFromExtension() {
        super.onDetachedFromExtension();
        mEditText = null;
    }

    @Override
    public List<IPluginModule> getPluginModules(Conversation.ConversationType conversationType) {
        List<IPluginModule> pluginModules = super.getPluginModules(conversationType);
        ListIterator<IPluginModule> iterator = pluginModules.listIterator();
        while (iterator.hasNext()) {
            IPluginModule integer = iterator.next();
            if (integer instanceof FilePlugin) {
                iterator.remove();
            }
        }
        pluginModules.add(new ConectionPlugin());
        return pluginModules;
    }
}

注意:在删除FilePlugin的时候如果用下面这种增强for循环的方式,会抛异常java.util.ConcurrentModificationException。

for (IPluginModule module : pluginModules) {
    if (module instanceof FilePlugin) {
        pluginModules.remove(module);
    }

}

第二步:SDK在Application的onCreate()方法初始化之后,取消 SDK 默认的 ExtensionModule,注册自定义的 ExtensionModule

例如:在init之后,在Application的onCreate()方法中调用下面方法:

private void registerExtensionPlugin() {
    List<IExtensionModule> moduleList = RongExtensionManager.getInstance().getExtensionModules();
    IExtensionModule defaultModule = null;
    if (moduleList != null) {
        for (IExtensionModule module : moduleList) {
            if (module instanceof DefaultExtensionModule) {
                defaultModule = module;
                break;
            }
        }
        if (defaultModule != null) {
            RongExtensionManager.getInstance().unregisterExtensionModule(defaultModule);
            RongExtensionManager.getInstance().registerExtensionModule(new LiaoBaExtensionModule());
        }
    }
}


方案二:

自定义ConversationFragment 继承自ConversationFragment,获取RongExtensionon,在Resume 中调用

4.x sdk

@Override
public void onResume() {
    super.onResume();
    List<IPluginModule> pluginModules = mRongExtension.getPluginModules(); //获取当前所有 Plugin 列表
    mRongExtension.addPlugin(new CustomPlugin()); //增加某个plugin
    for (int i = 0; i < pluginModules.size(); i++) {
        if (pluginModules.get(i) instanceof FilePlugin){
            mRongExtension.removePlugin(pluginModules.get(i) ); //删除个plugin
        }
    }
}

5.xsdk

@Override
public void onResume() {
    super.onResume();
    mRongExtension.getPluginBoard().addPlugin(new AudioPlugin()); //增加某个plugin
    List<IPluginModule> pluginModules = mRongExtension.getPluginBoard().getPluginModules();
    for (int i = 0; i < pluginModules.size(); i++) {
        if (pluginModules.get(i) instanceof FilePlugin){
            mRongExtension.getPluginBoard().removePlugin(pluginModules.get(i) ); //删除个plugin
        }
    }

}