Seize the day

POST : Android Dev Study

앱 테마 만들기 #4

앱 테마 만들기 마지막 시간입니다. 테마를 정의하고 설치, 업데이트하는 코드를 정리하겠습니다. 


ThemeKey 현재는 ASSETS에서 zip 파일 형태로 내장되어 있는 경우만 구현했습니다. 

public class ThemeKey {

    public enum Type {
        RESOURCE,
        ASSETS, //extract zip file from asset
        URL // download from url and extract zip file
    }

    private final int themeId;
    private final int version;
    private final String name;
    private final Type type;
    private final String uri; //asset zip filename or url
    @StringRes
    private int nameResourceId;

    public ThemeKey(int themeId, String name, int version) {
        this(themeId, name, version, Type.RESOURCE, null);
    }

    public ThemeKey(int themeId, String name, int version, Type type, String uri) {
        this.themeId = themeId;
        this.version = version;
        this.name = name;
        this.type = type;
        this.uri = uri;
    }

    public boolean hasFiles() {
        return type != Type.RESOURCE;
    }

    public int getThemeId() {
        return themeId;
    }

    public String getName() {
        if (nameResourceId != 0) {
            return ApplicationKeeper.get().getString(nameResourceId);
        }
        return name;
    }

    public int getVersion() {
        return version;
    }

    public Type getType() {
        return type;
    }

    public String getUri() {
        return uri;
    }

    public ThemeKey nameResourceId(@StringRes  int nameResourceId) {
        this.nameResourceId = nameResourceId;
        return this;
    }
}



Theme 정의하기 계산기 앱에서 실제로 정의된 테마입니다. 마지막 TEST 테마는 Debug  모드에서만 사용가능합니다. 

public class Theme {
    public static final ThemeKey DEFAULT = new ThemeKey(0, "Default theme", 1).nameResourceId(R.string.default_theme);
    public static final ThemeKey BROWN = new ThemeKey(1, "Brown theme", 2, ThemeKey.Type.ASSETS, "brown_theme.zip").nameResourceId(R.string.brown_theme);
    public static final ThemeKey GREY = new ThemeKey(2, "Grey theme", 2, ThemeKey.Type.ASSETS, "grey_theme.zip").nameResourceId(R.string.grey_theme);
    public static final ThemeKey TEST = new ThemeKey(21, "Test theme", 6, ThemeKey.Type.ASSETS, "test.zip");

    public static final ThemeKey[] THEME_KEYS = {
            DEFAULT, BROWN, GREY, TEST
    };

    public static ThemeKey valueOf(int id) {
        for (ThemeKey themeKey : THEME_KEYS) {
            if (themeKey.getThemeId() == id) {
                return themeKey;
            }
        }
        return DEFAULT;
    }


테마 설치, 업데이트하기 에셋에서 zip 파일을 풀어서 테마를 설치하고, 테마가 업데이트될 경우를 체크해서 다시 설치하는 코드입니다. 테마 업데이트 체크는 스플래시 Activity나 Main activity에서 하면 됩니다.


실제 assets 저장된 두 개의 테마 zip 파일을 참고하시면 도움이 될 것입니다. 

brown_theme.zip

grey_theme.zip


top

posted at

2018. 6. 18. 21:20


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크