package com.v7lin.android.env;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.Resources;
import android.content.res.Resources.Theme;
/**
* 皮肤插件 APK 就嫑签名,防止用户错误安装皮肤插件 APK ...
*
* Window 层级的 View,救不了 ...
*
* 非 inflater 的 View,救不了 ...
*
* @author v7lin E-mail:v7lin@qq.com
*/
public class EnvContextWrapper extends ContextWrapper {
private final EnvResourcesManager mResourcesManager;
private EnvSkinResourcesWrapper mResources;
private Theme mTheme;
public EnvContextWrapper(Context base, EnvResourcesManager manager) {
super(base);
mResourcesManager = manager;
ensureEnvSkinResources();
}
private void ensureEnvSkinResources() {
getResources();
}
public void setSystemResMap(SystemResMap resourcesMap) {
ensureEnvSkinResources();
mResources.setSystemResMap(resourcesMap);
}
public void setScheduleSkin(boolean scheduleSkin) {
mResourcesManager.setScheduleSkin(scheduleSkin);
}
public void setScheduleFont(boolean scheduleFont) {
mResourcesManager.setScheduleFont(scheduleFont);
}
@Override
public Resources getResources() {
if (mResources == null) {
mResources = new EnvSkinResourcesWrapper(getBaseContext(), getBaseContext().getResources(), mResourcesManager);
}
return mResources;
}
@Override
public Theme getTheme() {
if (mTheme == null) {
mTheme = getResources().newTheme();
Resources.Theme theme = getBaseContext().getTheme();
if (theme != null) {
mTheme.setTo(theme);
}
}
return mTheme;
}
}