diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 19219584a..888bf536c 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -248,6 +248,10 @@ public class Settings { return getIntFromStr(KEY_THEME, DEFAULT_THEME); } + public static void putTheme(int theme) { + putIntToStr(KEY_THEME, theme); + } + public static final String KEY_GALLERY_SITE = "gallery_site"; private static final int DEFAULT_GALLERY_SITE = 1; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index 2402821dc..f642a0cc9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -40,12 +40,14 @@ import android.util.Pair; import android.view.Gravity; import android.view.MenuItem; import android.view.View; +import android.widget.Button; import android.widget.FrameLayout; import android.widget.TextView; import android.widget.Toast; import com.hippo.drawerlayout.DrawerLayout; import com.hippo.ehviewer.AppConfig; import com.hippo.ehviewer.Crash; +import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.client.EhUrl; @@ -115,6 +117,8 @@ public final class MainActivity extends StageActivity private LoadImageView mAvatar; @Nullable private TextView mDisplayName; + @Nullable + private Button mChangeTheme; private int mNavCheckedItem = 0; @@ -335,6 +339,7 @@ public final class MainActivity extends StageActivity View headerLayout = mNavView.getHeaderView(0); mAvatar = (LoadImageView) ViewUtils.$$(headerLayout, R.id.avatar); mDisplayName = (TextView) ViewUtils.$$(headerLayout, R.id.display_name); + mChangeTheme = (Button) ViewUtils.$$(this, R.id.change_theme); mDrawerLayout.setStatusBarColor(ResourcesUtils.getAttrColor(this, R.attr.colorPrimaryDark)); // Pre-L need shadow drawable @@ -349,6 +354,12 @@ public final class MainActivity extends StageActivity mNavView.setNavigationItemSelectedListener(this); } + mChangeTheme.setText(getThemeText()); + mChangeTheme.setOnClickListener(v -> { + Settings.putTheme(getNextTheme()); + ((EhApplication) getApplication()).recreate(); + }); + if (savedInstanceState == null) { onInit(); if (Settings.getAutoCheckUpdateEnable()) { @@ -363,6 +374,35 @@ public final class MainActivity extends StageActivity } } + private String getThemeText() { + int resId; + switch (Settings.getTheme()) { + default: + case Settings.THEME_LIGHT: + resId = R.string.theme_light; + break; + case Settings.THEME_DARK: + resId = R.string.theme_dark; + break; + case Settings.THEME_BLACK: + resId = R.string.theme_black; + break; + } + return getString(resId); + } + + private int getNextTheme() { + switch (Settings.getTheme()) { + default: + case Settings.THEME_LIGHT: + return Settings.THEME_DARK; + case Settings.THEME_DARK: + return Settings.THEME_BLACK; + case Settings.THEME_BLACK: + return Settings.THEME_LIGHT; + } + } + private void checkDownloadLocation() { UniFile uniFile = Settings.getDownloadLocation(); // null == uniFile for first start diff --git a/app/src/main/java/com/hippo/ehviewer/widget/EhNavigationView.java b/app/src/main/java/com/hippo/ehviewer/widget/EhNavigationView.java index f4724a474..bfe66cde6 100644 --- a/app/src/main/java/com/hippo/ehviewer/widget/EhNavigationView.java +++ b/app/src/main/java/com/hippo/ehviewer/widget/EhNavigationView.java @@ -21,12 +21,11 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.os.Build; import android.support.annotation.NonNull; -import android.support.design.widget.NavigationView; import android.util.AttributeSet; - +import android.widget.LinearLayout; import com.hippo.drawerlayout.DrawerLayoutChild; -public class EhNavigationView extends NavigationView implements DrawerLayoutChild { +public class EhNavigationView extends LinearLayout implements DrawerLayoutChild { private static final int SCRIM_COLOR = 0x44000000; private static final boolean DRAW_SCRIM = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 3e0fa0a43..c3cbbe70e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -34,13 +34,30 @@ + android:orientation="vertical" + android:background="?android:attr/windowBackground"> + + + +