package com.asha.nightowllib.handler;
import android.view.View;
import com.asha.nightowllib.handler.ISkinHandler;
import com.asha.nightowllib.handler.annotations.OwlHandle;
import java.util.HashMap;
import static com.asha.nightowllib.NightOwlUtil.newInstanceSafely;
/**
* Created by hzqiujiadi on 15/11/8.
* hzqiujiadi ashqalcn@gmail.com
*/
public class OwlHandlerManager {
private static HashMap<Class,ISkinHandler> sHandlers = new HashMap<>();
private static HashMap<Class,Class<? extends ISkinHandler>> sHandlerTable = new HashMap<>();
// TODO: 15/11/5 impl it later.
private static Class<ISkinHandler> generateHandler() {
return null;
}
public static void registerView(Class<? extends View> clz){
sHandlerTable.put(clz, generateHandler());
}
public static void registerHandler(Class key, Class<? extends ISkinHandler> clz){
sHandlerTable.put(key,clz);
}
public static void registerHandler(Class<? extends ISkinHandler> clz){
OwlHandle owlHandle = clz.getAnnotation(OwlHandle.class);
if ( owlHandle != null ){
Class<? extends View>[] keys = owlHandle.value();
for ( Class<? extends View> key : keys )
registerHandler(key,clz);
}
}
public static ISkinHandler queryHandler(Class clz) {
Class<? extends ISkinHandler> handlerClz = sHandlerTable.get(clz);
// if handlerClz == null
// look for superclass's handlerClz
// it will be end when meet View.class
while( handlerClz == null ){
clz = clz.getSuperclass();
handlerClz = sHandlerTable.get(clz);
}
// query handler now
ISkinHandler skinHandler = sHandlers.get(handlerClz);
if ( skinHandler == null ) {
skinHandler = newInstanceSafely(handlerClz);
sHandlers.put(handlerClz, skinHandler);
}
return skinHandler;
}
}