/*
* 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.internal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.tencent.wstt.gt.GTApp;
import com.tencent.wstt.gt.plugin.BaseService;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
public class PluginService extends Service {
private static final HashMap<Class<?>, BaseService> mServiceMap = new HashMap<Class<?>, BaseService>();
private static final HashMap<Class<?>, ArrayList<BaseServiceConnection>> mServiceConnections =
new HashMap<Class<?>, ArrayList<BaseServiceConnection>>();
private static Handler handler;
public static Handler getRootHandler()
{
return handler;
}
@Override
public void onCreate() {
super.onCreate();
mServiceMap.clear();
mServiceConnections.clear();
handler = new Handler();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
String action = intent == null ? null : intent.getAction();
if (action != null) {
// TODO
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
return 1;
}
@Override
public void onDestroy() {
super.onDestroy();
synchronized (BaseService.class) {
for (BaseService service : mServiceMap.values()) {
service.onDestroy();
}
mServiceMap.clear();
}
mServiceConnections.clear();
super.onDestroy();
}
public static BaseService startService(BaseService service, Intent intent) {
synchronized (BaseService.class) {
if (mServiceMap.containsKey(service.getClass())) {
((BaseService) mServiceMap.get(service.getClass()))
.onStart(intent);
} else {
service.onCreate(GTApp.getContext());
service.onStart(intent);
mServiceMap.put(service.getClass(), service);
}
return service;
}
}
public static BaseService startService(BaseService service) {
return startService(service, null);
}
public static boolean stopService(Class<? extends BaseService> claxx) {
synchronized (BaseService.class) {
if (mServiceMap.containsKey(claxx)) {
List<BaseServiceConnection> serviceCons = mServiceConnections.get(claxx);
if ((null == serviceCons) || (serviceCons.size() == 0)) {
BaseService theService = (BaseService) mServiceMap.get(claxx);
theService.onDestroy();
mServiceMap.remove(claxx);
mServiceConnections.remove(claxx);
return true;
}
return false;
}
return true;
}
}
public static synchronized boolean stopService(BaseService service) {
return stopService(service.getClass());
}
public static IBinder bindService(Class<? extends BaseService> claxx,
BaseServiceConnection connection) {
synchronized (BaseService.class) {
IBinder binder = null;
BaseService service = (BaseService) mServiceMap.get(claxx);
if (service != null) {
binder = service.getBinder();
ArrayList<BaseServiceConnection> serviceCons = mServiceConnections
.get(claxx);
if (null == serviceCons) {
serviceCons = new ArrayList<BaseServiceConnection>(1);
mServiceConnections.put(claxx, serviceCons);
}
serviceCons.add(connection);
}
return binder;
}
}
public static void unBindService(Class<? extends BaseService> claxx,
BaseServiceConnection connection) {
synchronized (BaseService.class) {
List<BaseServiceConnection> serviceCons = mServiceConnections.get(claxx);
if (null != serviceCons)
serviceCons.remove(connection);
}
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}