All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.WazaBe.HoloEverywhere.SystemServiceManager Maven / Gradle / Ivy

The newest version!
package com.WazaBe.HoloEverywhere;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import android.content.Context;

import com.WazaBe.HoloEverywhere.SystemServiceManager.SystemServiceCreator.SystemService;

public final class SystemServiceManager {
	public static interface SuperSystemService {
		public Object superGetSystemService(String name);
	}

	public static interface SystemServiceCreator {
		@Target(ElementType.TYPE)
		@Retention(RetentionPolicy.RUNTIME)
		public static @interface SystemService {
			public String value();
		}

		public T createService(Context context);
	}

	private static final Map> MAP = new HashMap>();

	public static Object getSystemService(Context context, String name) {
		if (context == null || context.isRestricted()) {
			throw new RuntimeException("Invalid context");
		} else if (name == null || name.length() == 0) {
			return null;
		}
		SystemServiceCreator creator = MAP.get(name);
		if (creator != null) {
			Object o = creator.createService(context);
			if (o != null) {
				return o;
			}
		}
		if (context instanceof SuperSystemService) {
			return ((SuperSystemService) context).superGetSystemService(name);
		} else {
			return context.getSystemService(name);
		}
	}

	public static void register(Class> clazz) {
		try {
			register(clazz.newInstance());
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public static void register(SystemServiceCreator creator) {
		Class clazz = creator.getClass();
		if (!clazz.isAnnotationPresent(SystemService.class)) {
			throw new RuntimeException(
					"SystemServiceCreator must be implement SystemService");
		}
		SystemService systemService = clazz.getAnnotation(SystemService.class);
		final String name = systemService.value();
		if (name == null || name.length() == 0) {
			throw new RuntimeException("SystemService has incorrect name");
		}
		MAP.put(name, creator);
	}

	public static void unregister(SystemServiceCreator creator) {
		for (Entry> entry : MAP.entrySet()) {
			if (entry.getValue() == creator) {
				MAP.remove(entry.getKey());
				return;
			}
		}
	}

	private SystemServiceManager() {

	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy