/*
* Tencent is pleased to support the open source community by making
* Tencent GT (Version 2.4 and subsequent versions) available.
*
* Notwithstanding anything to the contrary herein, any previous version
* of Tencent GT shall not be subject to the license hereunder.
* All right, title, and interest, including all intellectual property rights,
* in and to the previous version of Tencent GT (including any and all copies thereof)
* shall be owned and retained by Tencent and subject to the license under the
* Tencent GT End User License Agreement (http://gt.qq.com/wp-content/EULA_EN.html).
*
* Copyright (C) 2015 THL A29 Limited, a Tencent company. All rights reserved.
*
* Licensed under the MIT License (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License at
*
* http://opensource.org/licenses/MIT
*
* 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 com.tencent.wstt.gt.plugin;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import android.os.Bundle;
public class PluginManager {
private static PluginManager INSTANCE;
private LinkedHashSet<PluginItem> pluginList;
private Map<String, PluginItem> piMap;
private static PluginItem[] EMPTY = {};
private PluginControler mPluginControler;
public static PluginManager getInstance()
{
if (INSTANCE == null)
{
INSTANCE = new PluginManager();
}
return INSTANCE;
}
private PluginManager()
{
pluginList = new LinkedHashSet<PluginItem>();
piMap = new HashMap<String, PluginItem>();
}
public PluginItem[] getPlugins()
{
return pluginList.toArray(EMPTY);
}
public void addPlugin(PluginItem item)
{
synchronized (INSTANCE) {
pluginList.add(item);
piMap.put(item.name, item);
}
}
public void removePlugin(String name)
{
synchronized (INSTANCE) {
PluginItem item = piMap.remove(name);
if (null != item)
{
pluginList.remove(item);
}
}
}
public PluginItem getPlugin(String name)
{
return piMap.get(name);
}
@SuppressWarnings("unchecked")
public void onInitConnectGT() {
LinkedHashSet<PluginItem> copyPluginList = null;
synchronized (INSTANCE) {
copyPluginList = (LinkedHashSet<PluginItem>)pluginList.clone();
}
for (PluginItem item : copyPluginList) {
item.onInitConnectGT();
}
}
public void register(PluginItem item)
{
if(null != item.name && item.name.length() > 0)
{
pluginList.add(item);
piMap.put(item.name, item);
}
}
public PluginControler getPluginControler(){
if(null == mPluginControler){
mPluginControler = new PluginControler();
}
return mPluginControler;
}
public void dispatchCommand(String sReceiver, Bundle bundle)
{
PluginItem item = piMap.get(sReceiver);
if (item != null)
{
// 加入任务队列,由插件自己决定如何执行
item.addTask(bundle);
}
}
public void dispatchCommandSync(String sReceiver, Bundle bundle)
{
PluginItem item = piMap.get(sReceiver);
if (item != null)
{
// 加入任务队列,由插件自己决定如何执行
item.doTask(bundle);
}
}
}