140 lines
4.3 KiB
Java
140 lines
4.3 KiB
Java
/*
|
|
* Copyright 2016 Hippo Seven
|
|
*
|
|
* 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.hippo.ehviewer.ui;
|
|
|
|
import android.content.Context;
|
|
import android.content.res.Configuration;
|
|
import android.content.res.Resources;
|
|
import android.os.Bundle;
|
|
import android.view.WindowManager;
|
|
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.StyleRes;
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
|
|
import com.hippo.content.ContextLocalWrapper;
|
|
import com.hippo.ehviewer.EhApplication;
|
|
import com.hippo.ehviewer.R;
|
|
import com.hippo.ehviewer.Settings;
|
|
|
|
import java.util.Locale;
|
|
import java.util.Objects;
|
|
|
|
public abstract class EhActivity extends AppCompatActivity {
|
|
|
|
private static final String THEME_DEFAULT = "DEFAULT";
|
|
private static final String THEME_BLACK = "BLACK";
|
|
private String mTheme;
|
|
|
|
public static boolean isBlackNightTheme() {
|
|
return Settings.getBoolean("black_dark_theme", false);
|
|
}
|
|
|
|
public static String getTheme(Context context) {
|
|
if (isBlackNightTheme()
|
|
&& isNightMode(context.getResources().getConfiguration()))
|
|
return THEME_BLACK;
|
|
|
|
return THEME_DEFAULT;
|
|
}
|
|
|
|
public static boolean isNightMode(Configuration configuration) {
|
|
return (configuration.uiMode & Configuration.UI_MODE_NIGHT_YES) > 0;
|
|
}
|
|
|
|
@Override
|
|
protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
|
|
// apply real style and our custom style
|
|
if (getParent() == null) {
|
|
theme.applyStyle(resid, true);
|
|
} else {
|
|
try {
|
|
theme.setTo(getParent().getTheme());
|
|
} catch (Exception e) {
|
|
// Empty
|
|
}
|
|
theme.applyStyle(resid, false);
|
|
}
|
|
theme.applyStyle(getThemeStyleRes(this), true);
|
|
// only pass theme style to super, so styled theme will not be overwritten
|
|
super.onApplyThemeResource(theme, R.style.ThemeOverlay, first);
|
|
}
|
|
|
|
@StyleRes
|
|
public int getThemeStyleRes(Context context) {
|
|
switch (getTheme(context)) {
|
|
case THEME_BLACK:
|
|
return R.style.ThemeOverlay_Black;
|
|
case THEME_DEFAULT:
|
|
default:
|
|
return R.style.ThemeOverlay;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
((EhApplication) getApplication()).registerActivity(this);
|
|
|
|
mTheme = getTheme(this);
|
|
}
|
|
|
|
@Override
|
|
protected void onDestroy() {
|
|
super.onDestroy();
|
|
|
|
((EhApplication) getApplication()).unregisterActivity(this);
|
|
}
|
|
|
|
@Override
|
|
protected void onResume() {
|
|
super.onResume();
|
|
if (Settings.getEnabledSecurity()) {
|
|
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
|
|
WindowManager.LayoutParams.FLAG_SECURE);
|
|
} else {
|
|
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
|
|
}
|
|
if (!Objects.equals(mTheme, getTheme(this))) {
|
|
recreate();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void attachBaseContext(Context newBase) {
|
|
Locale locale = null;
|
|
String language = Settings.getAppLanguage();
|
|
if (language != null && !language.equals("system")) {
|
|
String[] split = language.split("-");
|
|
if (split.length == 1) {
|
|
locale = new Locale(split[0]);
|
|
} else if (split.length == 2) {
|
|
locale = new Locale(split[0], split[1]);
|
|
} else if (split.length == 3) {
|
|
locale = new Locale(split[0], split[1], split[2]);
|
|
}
|
|
}
|
|
|
|
if (locale != null) {
|
|
newBase = ContextLocalWrapper.wrap(newBase, locale);
|
|
}
|
|
|
|
super.attachBaseContext(newBase);
|
|
}
|
|
}
|