// Path: core/src/main/java/com/fenlisproject/elf/core/base/BaseApplication.java
// public class BaseApplication extends Application {
// 
//     private AppEnvironment mAppEnvironment;
//     private PreferencesStorage mDefaultPreferencesStorage;
//     private SessionStorage mDefaultSessionStorage;
//     private MemoryStorage<Typeface> fontCache;
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         mAppEnvironment = new AppEnvironment(this);
//         mDefaultPreferencesStorage = new PreferencesStorage(this, Configs.DEFAULT_PREFERENCES_NAME);
//         mDefaultSessionStorage = new SessionStorage(this, mAppEnvironment.getSessionDirectory());
//         fontCache = new MemoryStorage<>(Configs.DEFAULT_FONT_CACHE_SIZE);
//     }
// 
//     public AppEnvironment getAppEnvironment() {
//         return mAppEnvironment;
//     }
// 
//     public PreferencesStorage getDefaultPreferencesStorage() {
//         return mDefaultPreferencesStorage;
//     }
// 
//     public SessionStorage getDefaultSessionStorage() {
//         return mDefaultSessionStorage;
//     }
// 
//     public MemoryStorage<Typeface> getFontCache() {
//         return fontCache;
//     }
// }
// 
// Path: core/src/main/java/com/fenlisproject/elf/core/data/MemoryStorage.java
// public class MemoryStorage<T> implements DataStorage<T> {
// 
//     private final LruCache<String, T> cache;
// 
//     public MemoryStorage(int maxSize) {
//         cache = new LruCache<>(maxSize);
//     }
// 
//     @Override
//     public T get(String key) {
//         return cache.get(key);
//     }
// 
//     @Override
//     public boolean put(String key, T value) {
//         return cache.put(key, value) != null;
//     }
// 
//     @Override
//     public boolean remove(String key) {
//         return cache.remove(key) != null;
//     }
// }


import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.support.v7.widget.AppCompatCheckBox;
import android.util.AttributeSet;
import com.fenlisproject.elf.R;
import com.fenlisproject.elf.core.base.BaseApplication;
import com.fenlisproject.elf.core.data.MemoryStorage;
package com.fenlisproject.elf.core.widget;



public class ExtendedCheckBox extends AppCompatCheckBox implements FontFace, ExtendedAttributes {

    private String mFontName;
    private String mFontFormat;

    public ExtendedCheckBox(Context context) {
        this(context, null);
    }

    public ExtendedCheckBox(Context context, AttributeSet attrs) {
        this(context, attrs, android.R.attr.checkboxStyle);
    }

    public ExtendedCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        if (!isInEditMode()) {
            initExtendedAttributes(attrs);
        }
    }

    public void initExtendedAttributes(AttributeSet attrs) {
// Path: core/src/main/java/com/fenlisproject/elf/core/base/BaseApplication.java
// public class BaseApplication extends Application {
// 
//     private AppEnvironment mAppEnvironment;
//     private PreferencesStorage mDefaultPreferencesStorage;
//     private SessionStorage mDefaultSessionStorage;
//     private MemoryStorage<Typeface> fontCache;
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         mAppEnvironment = new AppEnvironment(this);
//         mDefaultPreferencesStorage = new PreferencesStorage(this, Configs.DEFAULT_PREFERENCES_NAME);
//         mDefaultSessionStorage = new SessionStorage(this, mAppEnvironment.getSessionDirectory());
//         fontCache = new MemoryStorage<>(Configs.DEFAULT_FONT_CACHE_SIZE);
//     }
// 
//     public AppEnvironment getAppEnvironment() {
//         return mAppEnvironment;
//     }
// 
//     public PreferencesStorage getDefaultPreferencesStorage() {
//         return mDefaultPreferencesStorage;
//     }
// 
//     public SessionStorage getDefaultSessionStorage() {
//         return mDefaultSessionStorage;
//     }
// 
//     public MemoryStorage<Typeface> getFontCache() {
//         return fontCache;
//     }
// }
// 
// Path: core/src/main/java/com/fenlisproject/elf/core/data/MemoryStorage.java
// public class MemoryStorage<T> implements DataStorage<T> {
// 
//     private final LruCache<String, T> cache;
// 
//     public MemoryStorage(int maxSize) {
//         cache = new LruCache<>(maxSize);
//     }
// 
//     @Override
//     public T get(String key) {
//         return cache.get(key);
//     }
// 
//     @Override
//     public boolean put(String key, T value) {
//         return cache.put(key, value) != null;
//     }
// 
//     @Override
//     public boolean remove(String key) {
//         return cache.remove(key) != null;
//     }
// }


// Path: core/src/main/java/com/fenlisproject/elf/core/widget/ExtendedCheckBox.java
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.support.v7.widget.AppCompatCheckBox;
import android.util.AttributeSet;
import com.fenlisproject.elf.R;
import com.fenlisproject.elf.core.base.BaseApplication;
import com.fenlisproject.elf.core.data.MemoryStorage;

package com.fenlisproject.elf.core.widget;



public class ExtendedCheckBox extends AppCompatCheckBox implements FontFace, ExtendedAttributes {

    private String mFontName;
    private String mFontFormat;

    public ExtendedCheckBox(Context context) {
        this(context, null);
    }

    public ExtendedCheckBox(Context context, AttributeSet attrs) {
        this(context, attrs, android.R.attr.checkboxStyle);
    }

    public ExtendedCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        if (!isInEditMode()) {
            initExtendedAttributes(attrs);
        }
    }

    public void initExtendedAttributes(AttributeSet attrs) {
        if (getContext().getApplicationContext() instanceof BaseApplication) {