v2.10
This commit is contained in:
parent
3d7ba2afc6
commit
08e00b89c5
341 changed files with 7612 additions and 6811 deletions
|
@ -1,122 +1,122 @@
|
|||
package code.name.monkey.appthemehelper;
|
||||
|
||||
import static android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.ActivityManager;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import android.view.View;
|
||||
import code.name.monkey.appthemehelper.util.ColorUtil;
|
||||
import code.name.monkey.appthemehelper.util.TintHelper;
|
||||
import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper;
|
||||
|
||||
import static android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
|
||||
|
||||
/**
|
||||
* @author Karim Abou Zeid (kabouzeid)
|
||||
*/
|
||||
public final class ATH {
|
||||
|
||||
private ATH() {
|
||||
}
|
||||
|
||||
@SuppressLint("CommitPrefEdits")
|
||||
public static boolean didThemeValuesChange(@NonNull Context context, long since) {
|
||||
return ThemeStore.isConfigured(context)
|
||||
&& ThemeStore.prefs(context).getLong(ThemeStore.VALUES_CHANGED, -1) > since;
|
||||
}
|
||||
|
||||
public static void setStatusbarColorAuto(Activity activity) {
|
||||
setStatusbarColor(activity, ThemeStore.statusBarColor(activity));
|
||||
}
|
||||
|
||||
public static void setStatusbarColor(Activity activity, int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
activity.getWindow().setStatusBarColor(color);
|
||||
setLightStatusbarAuto(activity, color);
|
||||
private ATH() {
|
||||
}
|
||||
}
|
||||
|
||||
public static void setLightStatusbarAuto(Activity activity, int bgColor) {
|
||||
setLightStatusbar(activity, ColorUtil.isColorLight(bgColor));
|
||||
}
|
||||
|
||||
public static void setLightStatusbar(Activity activity, boolean enabled) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
final View decorView = activity.getWindow().getDecorView();
|
||||
final int systemUiVisibility = decorView.getSystemUiVisibility();
|
||||
if (enabled) {
|
||||
decorView.setSystemUiVisibility(systemUiVisibility | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||
} else {
|
||||
decorView.setSystemUiVisibility(systemUiVisibility & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||
}
|
||||
@SuppressLint("CommitPrefEdits")
|
||||
public static boolean didThemeValuesChange(@NonNull Context context, long since) {
|
||||
return ThemeStore.isConfigured(context)
|
||||
&& ThemeStore.prefs(context).getLong(ThemeStore.VALUES_CHANGED, -1) > since;
|
||||
}
|
||||
}
|
||||
|
||||
public static void setLightNavigationbar(Activity activity, boolean enabled) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
final View decorView = activity.getWindow().getDecorView();
|
||||
int systemUiVisibility = decorView.getSystemUiVisibility();
|
||||
if (enabled) {
|
||||
systemUiVisibility |= SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
|
||||
} else {
|
||||
systemUiVisibility &= ~SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
|
||||
}
|
||||
decorView.setSystemUiVisibility(systemUiVisibility);
|
||||
public static void setStatusbarColorAuto(Activity activity) {
|
||||
setStatusbarColor(activity, ThemeStore.statusBarColor(activity));
|
||||
}
|
||||
}
|
||||
|
||||
public static void setLightNavigationbarAuto(Activity activity, int bgColor) {
|
||||
setLightNavigationbar(activity, ColorUtil.isColorLight(bgColor));
|
||||
}
|
||||
|
||||
public static void setNavigationbarColorAuto(Activity activity) {
|
||||
setNavigationbarColor(activity, ThemeStore.navigationBarColor(activity));
|
||||
}
|
||||
|
||||
public static void setNavigationbarColor(Activity activity, int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
activity.getWindow().setNavigationBarColor(color);
|
||||
setLightNavigationbarAuto(activity, color);
|
||||
public static void setStatusbarColor(Activity activity, int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
activity.getWindow().setStatusBarColor(color);
|
||||
setLightStatusbarAuto(activity, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void setActivityToolbarColorAuto(Activity activity, @Nullable Toolbar toolbar) {
|
||||
setActivityToolbarColor(activity, toolbar, ThemeStore.primaryColor(activity));
|
||||
}
|
||||
|
||||
public static void setActivityToolbarColor(Activity activity, @Nullable Toolbar toolbar,
|
||||
int color) {
|
||||
if (toolbar == null) {
|
||||
return;
|
||||
public static void setLightStatusbarAuto(Activity activity, int bgColor) {
|
||||
setLightStatusbar(activity, ColorUtil.isColorLight(bgColor));
|
||||
}
|
||||
toolbar.setBackgroundColor(color);
|
||||
ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(activity, toolbar, color);
|
||||
}
|
||||
|
||||
public static void setTaskDescriptionColorAuto(@NonNull Activity activity) {
|
||||
setTaskDescriptionColor(activity, ThemeStore.primaryColor(activity));
|
||||
}
|
||||
|
||||
public static void setTaskDescriptionColor(@NonNull Activity activity, @ColorInt int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
// Task description requires fully opaque color
|
||||
color = ColorUtil.stripAlpha(color);
|
||||
// Sets color of entry in the system recents page
|
||||
activity.setTaskDescription(
|
||||
new ActivityManager.TaskDescription((String) activity.getTitle(), null, color));
|
||||
public static void setLightStatusbar(Activity activity, boolean enabled) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
final View decorView = activity.getWindow().getDecorView();
|
||||
final int systemUiVisibility = decorView.getSystemUiVisibility();
|
||||
if (enabled) {
|
||||
decorView.setSystemUiVisibility(systemUiVisibility | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||
} else {
|
||||
decorView.setSystemUiVisibility(systemUiVisibility & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void setTint(@NonNull View view, @ColorInt int color) {
|
||||
TintHelper.setTintAuto(view, color, false);
|
||||
}
|
||||
public static void setLightNavigationbar(Activity activity, boolean enabled) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
final View decorView = activity.getWindow().getDecorView();
|
||||
int systemUiVisibility = decorView.getSystemUiVisibility();
|
||||
if (enabled) {
|
||||
systemUiVisibility |= SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
|
||||
} else {
|
||||
systemUiVisibility &= ~SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
|
||||
}
|
||||
decorView.setSystemUiVisibility(systemUiVisibility);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setBackgroundTint(@NonNull View view, @ColorInt int color) {
|
||||
TintHelper.setTintAuto(view, color, true);
|
||||
}
|
||||
public static void setLightNavigationbarAuto(Activity activity, int bgColor) {
|
||||
setLightNavigationbar(activity, ColorUtil.isColorLight(bgColor));
|
||||
}
|
||||
|
||||
public static void setNavigationbarColorAuto(Activity activity) {
|
||||
setNavigationbarColor(activity, ThemeStore.navigationBarColor(activity));
|
||||
}
|
||||
|
||||
public static void setNavigationbarColor(Activity activity, int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
activity.getWindow().setNavigationBarColor(color);
|
||||
setLightNavigationbarAuto(activity, color);
|
||||
}
|
||||
}
|
||||
|
||||
public static void setActivityToolbarColorAuto(Activity activity, @Nullable Toolbar toolbar) {
|
||||
setActivityToolbarColor(activity, toolbar, ThemeStore.primaryColor(activity));
|
||||
}
|
||||
|
||||
public static void setActivityToolbarColor(Activity activity, @Nullable Toolbar toolbar,
|
||||
int color) {
|
||||
if (toolbar == null) {
|
||||
return;
|
||||
}
|
||||
toolbar.setBackgroundColor(color);
|
||||
ToolbarContentTintHelper.setToolbarContentColorBasedOnToolbarColor(activity, toolbar, color);
|
||||
}
|
||||
|
||||
public static void setTaskDescriptionColorAuto(@NonNull Activity activity) {
|
||||
setTaskDescriptionColor(activity, ThemeStore.primaryColor(activity));
|
||||
}
|
||||
|
||||
public static void setTaskDescriptionColor(@NonNull Activity activity, @ColorInt int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
// Task description requires fully opaque color
|
||||
color = ColorUtil.stripAlpha(color);
|
||||
// Sets color of entry in the system recents page
|
||||
activity.setTaskDescription(new ActivityManager.TaskDescription((String) activity.getTitle(), null, color));
|
||||
}
|
||||
}
|
||||
|
||||
public static void setTint(@NonNull View view, @ColorInt int color) {
|
||||
TintHelper.setTintAuto(view, color, false);
|
||||
}
|
||||
|
||||
public static void setBackgroundTint(@NonNull View view, @ColorInt int color) {
|
||||
TintHelper.setTintAuto(view, color, true);
|
||||
}
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
package code.name.monkey.appthemehelper;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
package code.name.monkey.appthemehelper.util;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.Typeface;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.content.res.ResourcesCompat;
|
||||
import code.name.monkey.appthemehelper.R;
|
||||
import code.name.monkey.appthemehelper.ThemeStore;
|
||||
|
||||
public class MaterialUtil {
|
||||
public static void setTint(@NonNull MaterialButton button, boolean background) {
|
||||
setTint(button, background, ThemeStore.accentColor(button.getContext()));
|
||||
}
|
||||
|
||||
public static void setTint(@NonNull MaterialButton button, boolean background, int color) {
|
||||
button.setPadding(48, 48, 48, 48);
|
||||
button.setAllCaps(false);
|
||||
final Context context = button.getContext();
|
||||
final ColorStateList colorState = ColorStateList.valueOf(color);
|
||||
final ColorStateList textColor = ColorStateList.valueOf(MaterialValueHelper.getPrimaryTextColor(context, ColorUtil.isColorLight(color)));
|
||||
|
||||
|
||||
if (background) {
|
||||
button.setBackgroundTintList(colorState);
|
||||
button.setTextColor(textColor);
|
||||
button.setIconTint(textColor);
|
||||
} else {
|
||||
button.setStrokeColor(colorState);
|
||||
button.setTextColor(colorState);
|
||||
button.setIconTint(colorState);
|
||||
}
|
||||
|
||||
Typeface font = ResourcesCompat.getFont(button.getContext(), R.font.product_sans);
|
||||
button.setTypeface(font);
|
||||
|
||||
}
|
||||
|
||||
public static void setTint(TextInputLayout textInputLayout, boolean background) {
|
||||
final Context context = textInputLayout.getContext();
|
||||
final int accentColor = ThemeStore.accentColor(context);
|
||||
final ColorStateList colorState = ColorStateList.valueOf(accentColor);
|
||||
|
||||
if (background) {
|
||||
textInputLayout.setBackgroundTintList(colorState);
|
||||
textInputLayout.setDefaultHintTextColor(colorState);
|
||||
} else {
|
||||
textInputLayout.setBoxStrokeColor(accentColor);
|
||||
textInputLayout.setDefaultHintTextColor(colorState);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,15 +7,6 @@ import android.graphics.PorterDuff;
|
|||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.RippleDrawable;
|
||||
import android.os.Build;
|
||||
import androidx.annotation.CheckResult;
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.drawable.DrawableCompat;
|
||||
import androidx.appcompat.widget.AppCompatEditText;
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
|
@ -27,10 +18,20 @@ import android.widget.SeekBar;
|
|||
import android.widget.Switch;
|
||||
import android.widget.TextView;
|
||||
|
||||
import code.name.monkey.appthemehelper.R;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import androidx.annotation.CheckResult;
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.AppCompatEditText;
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.drawable.DrawableCompat;
|
||||
import code.name.monkey.appthemehelper.R;
|
||||
|
||||
/**
|
||||
* @author afollestad, plusCubed
|
||||
*/
|
||||
|
@ -154,8 +155,7 @@ public final class TintHelper {
|
|||
!background && view.getBackground() instanceof RippleDrawable) {
|
||||
// Ripples for the above views (e.g. when you tap and hold a switch or checkbox)
|
||||
RippleDrawable rd = (RippleDrawable) view.getBackground();
|
||||
@SuppressLint("PrivateResource")
|
||||
final int unchecked = ContextCompat.getColor(view.getContext(),
|
||||
@SuppressLint("PrivateResource") final int unchecked = ContextCompat.getColor(view.getContext(),
|
||||
isDark ? R.color.ripple_material_dark : R.color.ripple_material_light);
|
||||
final int checked = ColorUtil.adjustAlpha(color, 0.4f);
|
||||
final ColorStateList sl = new ColorStateList(
|
||||
|
@ -187,6 +187,7 @@ public final class TintHelper {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public static void setTint(@NonNull RadioButton radioButton, @ColorInt int color, boolean useDarker) {
|
||||
ColorStateList sl = new ColorStateList(new int[][]{
|
||||
new int[]{-android.R.attr.state_enabled},
|
||||
|
|
File diff suppressed because it is too large
Load diff
7
appthemehelper/src/main/res/font/product_sans.xml
Normal file
7
appthemehelper/src/main/res/font/product_sans.xml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<font
|
||||
android:font="@font/products_sans_regular"
|
||||
android:fontStyle="normal"
|
||||
android:fontWeight="400" />
|
||||
</font-family>
|
BIN
appthemehelper/src/main/res/font/products_sans_regular.ttf
Executable file
BIN
appthemehelper/src/main/res/font/products_sans_regular.ttf
Executable file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue