package com.dappervision.wearscript.managers;
import android.content.pm.PackageManager;
import com.dappervision.wearscript.BackgroundService;
import com.dappervision.wearscript.HardwareDetector;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class ManagerManager {
private static ManagerManager singleton;
Map<String, Manager> managers;
private ManagerManager() {
managers = new ConcurrentHashMap<String, Manager>();
}
public static ManagerManager get() {
if (singleton != null) {
return singleton;
}
singleton = new ManagerManager();
return singleton;
}
public static boolean hasManager(Class<? extends Manager> c) {
return get().get(c) != null;
}
public void newManagers(BackgroundService bs) {
add(new OpenCVManager(bs));
add(new DataManager(bs));
add(new CameraManager(bs));
add(new BarcodeManager(bs));
add(new WifiManager(bs));
add(new AudioManager(bs));
add(new BluetoothManager(bs));
add(new SpeechManager(bs));
add(new ConnectionManager(bs));
add(new WarpManager(bs));
add(new LiveCardManager(bs));
add(new PicarusManager(bs));
//Really just FEATURE_CAMERA_ANY should work, but someone is a dumb head and broke Android.
if(bs.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY) || bs.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
add(new CameraManager(bs));
add(new BarcodeManager(bs));
}
if(bs.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
add(new BluetoothManager(bs));
}
if (HardwareDetector.hasGDK) {
add(new CardTreeManager(bs));
add(new EyeManager(bs));
}
}
public void add(Manager manager) {
String name = manager.getClass().getName();
Manager old = managers.remove(name);
if (old != null)
old.shutdown();
managers.put(name, manager);
}
public Manager remove(Class<? extends Manager> manager) {
String name = manager.getName();
return managers.remove(name);
}
public Manager get(Class<? extends Manager> c) {
return managers.get(c.getName());
}
public void resetAll() {
for (Manager m : managers.values()) {
m.reset();
}
}
public void shutdownAll() {
for (String name : managers.keySet()) {
Manager m = managers.remove(name);
m.shutdown();
}
}
}