/* * Copyright (C) 2013 WhiteCat 白猫 (www.thinkandroid.cn) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * 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.ta.util; import java.lang.reflect.Field; import com.ta.annotation.TAInject; import com.ta.annotation.TAInjectResource; import com.ta.annotation.TAInjectView; import android.app.Activity; import android.content.res.Resources; public class TAInjector { private static TAInjector instance; private TAInjector() { } public static TAInjector getInstance() { if (instance == null) { instance = new TAInjector(); } return instance; } public void inJectAll(Activity activity) { // TODO Auto-generated method stub Field[] fields = activity.getClass().getDeclaredFields(); if (fields != null && fields.length > 0) { for (Field field : fields) { if (field.isAnnotationPresent(TAInjectView.class)) { injectView(activity, field); } else if (field.isAnnotationPresent(TAInjectResource.class)) { injectResource(activity, field); } else if (field.isAnnotationPresent(TAInject.class)) { inject(activity, field); } } } } private void inject(Activity activity, Field field) { // TODO Auto-generated method stub try { field.setAccessible(true); field.set(activity, field.getType().newInstance()); } catch (Exception e) { e.printStackTrace(); } } private void injectView(Activity activity, Field field) { // TODO Auto-generated method stub if (field.isAnnotationPresent(TAInjectView.class)) { TAInjectView viewInject = field.getAnnotation(TAInjectView.class); int viewId = viewInject.id(); try { field.setAccessible(true); field.set(activity, activity.findViewById(viewId)); } catch (Exception e) { e.printStackTrace(); } } } private void injectResource(Activity activity, Field field) { // TODO Auto-generated method stub if (field.isAnnotationPresent(TAInjectResource.class)) { TAInjectResource resourceJect = field .getAnnotation(TAInjectResource.class); int resourceID = resourceJect.id(); try { field.setAccessible(true); Resources resources = activity.getResources(); String type = resources.getResourceTypeName(resourceID); if (type.equalsIgnoreCase("string")) { field.set(activity, activity.getResources().getString(resourceID)); } else if (type.equalsIgnoreCase("drawable")) { field.set(activity, activity.getResources().getDrawable(resourceID)); } else if (type.equalsIgnoreCase("layout")) { field.set(activity, activity.getResources().getLayout(resourceID)); } else if (type.equalsIgnoreCase("array")) { if (field.getType().equals(int[].class)) { field.set(activity, activity.getResources() .getIntArray(resourceID)); } else if (field.getType().equals(String[].class)) { field.set(activity, activity.getResources() .getStringArray(resourceID)); } else { field.set(activity, activity.getResources() .getStringArray(resourceID)); } } else if (type.equalsIgnoreCase("color")) { if (field.getType().equals(Integer.TYPE)) { field.set(activity, activity.getResources().getColor(resourceID)); } else { field.set(activity, activity.getResources() .getColorStateList(resourceID)); } } } catch (Exception e) { e.printStackTrace(); } } } public void inject(Activity activity) { // TODO Auto-generated method stub Field[] fields = activity.getClass().getDeclaredFields(); if (fields != null && fields.length > 0) { for (Field field : fields) { if (field.isAnnotationPresent(TAInject.class)) { inject(activity, field); } } } } public void injectView(Activity activity) { // TODO Auto-generated method stub Field[] fields = activity.getClass().getDeclaredFields(); if (fields != null && fields.length > 0) { for (Field field : fields) { if (field.isAnnotationPresent(TAInjectView.class)) { injectView(activity, field); } } } } public void injectResource(Activity activity) { // TODO Auto-generated method stub Field[] fields = activity.getClass().getDeclaredFields(); if (fields != null && fields.length > 0) { for (Field field : fields) { if (field.isAnnotationPresent(TAInjectResource.class)) { injectResource(activity, field); } } } } }