Skip to content

Commit

Permalink
Dynamic theme 4.5.0
Browse files Browse the repository at this point in the history
Add support for system contrast.
  • Loading branch information
pranavpandey committed Jul 5, 2023
1 parent 61c87c6 commit 398761c
Show file tree
Hide file tree
Showing 13 changed files with 159 additions and 26 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ buildscript {
'material' : '1.10.0-alpha04',
'preferences' : '2.3.0',
'swiperefresh': '1.1.0',
'theme' : '4.4.1',
'theme' : '4.5.0',
'toasts' : '4.1.3',
'work' : '2.8.1'
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1440,11 +1440,16 @@ public boolean isBackgroundAware() {

@Override
public int getContrast(boolean resolve) {
if (resolve && getContrast(false) == Theme.Contrast.AUTO) {
return getThemeFallback(false).getContrast();
if (resolve) {
if (getContrast(false) == Theme.Contrast.AUTO) {
return getThemeFallback(false).getContrast();
} else if (getContrast(false) == Theme.Contrast.SYSTEM) {
return DynamicTheme.getInstance().getSystemContrast(
getThemeFallback(false).getContrast());
}
}

return Math.min(Theme.Contrast.MAX, contrast);
return Math.min(contrast, Theme.Contrast.MAX);
}

@Override
Expand Down Expand Up @@ -1475,7 +1480,7 @@ public int getOpacity(boolean resolve) {
return getThemeFallback(false).getOpacity();
}

return Math.min(Theme.Opacity.MAX, opacity);
return Math.min(opacity, Theme.Opacity.MAX);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.UiModeManager;
import android.app.WallpaperColors;
import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
Expand Down Expand Up @@ -269,6 +270,11 @@ public class DynamicTheme implements DynamicListener, DynamicResolver {
*/
private BroadcastReceiver mBroadcastReceiver;

/**
* UI mode manager to perform system related operations.
*/
private UiModeManager mUiModeManager;

/**
* Power manager to perform battery and screen related events.
*/
Expand Down Expand Up @@ -369,6 +375,8 @@ public void initialize(@NonNull DynamicListener listener,
DynamicPermissions.initializeInstance(listener.getContext());

this.mListener = listener;
this.mUiModeManager = ContextCompat.getSystemService(
mListener.getContext(), UiModeManager.class);
this.mPowerManager = ContextCompat.getSystemService(
mListener.getContext(), PowerManager.class);
this.mDynamicResolver = dynamicResolver;
Expand Down Expand Up @@ -1204,6 +1212,15 @@ public void setLocalVersion(@Version int version) {
return getLocalContext() != null ? getLocalContext() : getContext();
}

/**
* Get the UI mode manager used by the application.
*
* @return The UI mode manager used by the application.
*/
public @NonNull UiModeManager getUiModeManager() {
return mUiModeManager;
}

/**
* Get the power manager used by the application.
*
Expand Down Expand Up @@ -1431,6 +1448,25 @@ public void onLocalDestroy(@Nullable DynamicListener listener) {
? R.color.ads_window_background : R.color.ads_window_background_light);
}

/**
* Try to get the contrast from the system.
*
* @param fallback The fallback contrast to be used in case of any issues.
*
* @return The contrast from the system.
*/
@TargetApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
public int getSystemContrast(int fallback) {
if (DynamicSdkUtils.is34()) {
int contrast = (int) (mUiModeManager.getContrast() * Theme.Contrast.MAX) / 2;
contrast = getDefault().getContrast() + contrast;

return Math.min(Math.abs(contrast), Theme.Contrast.MAX);
}

return fallback;
}

/**
* Try to get the corner radius for the widget background from the system.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import com.pranavpandey.android.dynamic.support.theme.view.ThemePreview;
import com.pranavpandey.android.dynamic.theme.Theme;
import com.pranavpandey.android.dynamic.theme.util.DynamicThemeUtils;
import com.pranavpandey.android.dynamic.util.DynamicSdkUtils;

/**
* Base theme fragment to provide theme editing functionality.
Expand Down Expand Up @@ -582,7 +583,12 @@ public void onLoadTheme(@NonNull DynamicRemoteTheme theme) {
mCornerSizePreference.setPreferenceValue(Theme.Corner.ToString.CUSTOM);
mCornerSizePreference.setValue(theme.getCornerSize());
} else {
mCornerSizePreference.setPreferenceValue(Theme.Corner.ToString.AUTO);
if (DynamicSdkUtils.is31()
&& theme.getCornerRadius(false) == Theme.Corner.SYSTEM) {
mCornerSizePreference.setPreferenceValue(Theme.Corner.ToString.SYSTEM);
} else {
mCornerSizePreference.setPreferenceValue(Theme.Corner.ToString.AUTO);
}
mCornerSizePreference.setValue(mDynamicThemeDefault.getCornerSize());
}

Expand All @@ -591,11 +597,17 @@ public void onLoadTheme(@NonNull DynamicRemoteTheme theme) {
mElevationPreference.setPreferenceValue(String.valueOf(theme.getElevation(false)));
mStylePreference.setPreferenceValue(String.valueOf(theme.getStyle()));

if (theme.getContrast(false) != Theme.Contrast.AUTO) {
if (theme.getContrast(false) != Theme.Contrast.AUTO
&& theme.getContrast(false) != Theme.Contrast.SYSTEM) {
mContrastPreference.setPreferenceValue(Theme.Contrast.ToString.CUSTOM);
mContrastPreference.setValue(theme.getContrast());
} else {
mContrastPreference.setPreferenceValue(Theme.Contrast.ToString.AUTO);
if (DynamicSdkUtils.is34()
&& theme.getContrast(false) == Theme.Contrast.SYSTEM) {
mContrastPreference.setPreferenceValue(Theme.Contrast.ToString.SYSTEM);
} else {
mContrastPreference.setPreferenceValue(Theme.Contrast.ToString.AUTO);
}
mContrastPreference.setValue(mDynamicThemeDefault.getContrast());
}

Expand Down Expand Up @@ -733,7 +745,9 @@ private void updatePreferences() {
&& (mThemePreview.getDynamicTheme()
.getCornerRadius(false) != Theme.Corner.SYSTEM));
mContrastPreference.setSeekEnabled(mThemePreview.getDynamicTheme()
.getContrast(false) != Theme.Contrast.AUTO);
.getContrast(false) != Theme.Contrast.AUTO
&& (mThemePreview.getDynamicTheme()
.getContrast(false) != Theme.Contrast.SYSTEM));
mOpacityPreference.setSeekEnabled(mThemePreview.getDynamicTheme()
.getOpacity(false) != Theme.Opacity.AUTO);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import com.pranavpandey.android.dynamic.support.theme.view.DynamicPresetsView;
import com.pranavpandey.android.dynamic.support.theme.view.ThemePreview;
import com.pranavpandey.android.dynamic.theme.Theme;
import com.pranavpandey.android.dynamic.util.DynamicSdkUtils;

/**
* Base theme fragment to provide theme editing functionality.
Expand Down Expand Up @@ -572,7 +573,12 @@ public void onLoadTheme(@NonNull DynamicAppTheme theme) {
mCornerSizePreference.setPreferenceValue(Theme.Corner.ToString.CUSTOM);
mCornerSizePreference.setValue(theme.getCornerSize());
} else {
mCornerSizePreference.setPreferenceValue(Theme.Corner.ToString.AUTO);
if (DynamicSdkUtils.is31()
&& theme.getCornerRadius(false) == Theme.Corner.SYSTEM) {
mCornerSizePreference.setPreferenceValue(Theme.Corner.ToString.SYSTEM);
} else {
mCornerSizePreference.setPreferenceValue(Theme.Corner.ToString.AUTO);
}
mCornerSizePreference.setValue(mDynamicThemeDefault.getCornerSize());
}

Expand All @@ -581,11 +587,17 @@ public void onLoadTheme(@NonNull DynamicAppTheme theme) {
mElevationPreference.setPreferenceValue(String.valueOf(theme.getElevation(false)));
mStylePreference.setPreferenceValue(String.valueOf(theme.getStyle()));

if (theme.getContrast(false) != Theme.Contrast.AUTO) {
if (theme.getContrast(false) != Theme.Contrast.AUTO
&& theme.getContrast(false) != Theme.Contrast.SYSTEM) {
mContrastPreference.setPreferenceValue(Theme.Contrast.ToString.CUSTOM);
mContrastPreference.setValue(theme.getContrast());
} else {
mContrastPreference.setPreferenceValue(Theme.Contrast.ToString.AUTO);
if (DynamicSdkUtils.is34()
&& theme.getContrast(false) == Theme.Contrast.SYSTEM) {
mContrastPreference.setPreferenceValue(Theme.Contrast.ToString.SYSTEM);
} else {
mContrastPreference.setPreferenceValue(Theme.Contrast.ToString.AUTO);
}
mContrastPreference.setValue(mDynamicThemeDefault.getContrast());
}

Expand Down Expand Up @@ -713,7 +725,9 @@ private void updatePreferences() {
&& (mThemePreview.getDynamicTheme()
.getCornerRadius(false) != Theme.Corner.SYSTEM));
mContrastPreference.setSeekEnabled(mThemePreview.getDynamicTheme()
.getContrast(false) != Theme.Contrast.AUTO);
.getContrast(false) != Theme.Contrast.AUTO
&& (mThemePreview.getDynamicTheme()
.getContrast(false) != Theme.Contrast.SYSTEM));
mOpacityPreference.setSeekEnabled(mThemePreview.getDynamicTheme()
.getOpacity(false) != Theme.Opacity.AUTO);
}
Expand Down
4 changes: 2 additions & 2 deletions dynamic-support/src/main/res/layout/ads_fragment_theme.xml
Original file line number Diff line number Diff line change
Expand Up @@ -299,8 +299,8 @@
app:ads_title="@string/ads_theme_contrast"
app:ads_summary="@string/ads_theme_contrast_summary"
app:ads_description="@string/ads_theme_entry_auto_default_desc"
app:ads_entries="@array/ads_theme_entries_auto"
app:ads_values="@array/ads_theme_values_auto"
app:ads_entries="@array/ads_contrast_entries"
app:ads_values="@array/ads_contrast_values"
app:ads_min="@integer/adt_contrast_min"
app:ads_max="@integer/adt_contrast_max"
app:ads_interval="@integer/adt_contrast_interval"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -306,8 +306,8 @@
app:ads_title="@string/ads_theme_contrast"
app:ads_summary="@string/ads_theme_contrast_summary"
app:ads_description="@string/ads_theme_entry_auto_default_desc"
app:ads_entries="@array/ads_theme_entries_auto"
app:ads_values="@array/ads_theme_values_auto"
app:ads_entries="@array/ads_contrast_entries"
app:ads_values="@array/ads_contrast_values"
app:ads_min="@integer/adt_contrast_min"
app:ads_max="@integer/adt_contrast_max"
app:ads_interval="@integer/adt_contrast_interval"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
style="?attr/ads_textAppearanceTutorialTitle"
android:id="@+id/ads_tutorial_simple_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content" />

<com.pranavpandey.android.dynamic.support.widget.DynamicTextView
style="?attr/ads_textAppearanceTutorialSubtitle"
Expand Down
6 changes: 4 additions & 2 deletions dynamic-support/src/main/res/values-v21/arrays_theme.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@
xmlns:tools="http://schemas.android.com/tools">

<!-- Night theme entries for auto and batter saver. -->
<string-array name="ads_theme_entries_night" tools:ignore="InconsistentArrays">
<string-array name="ads_theme_entries_night"
tools:ignore="InconsistentArrays">
<item>@string/ads_theme_entry_auto</item>
<item>@string/ads_theme_entry_battery</item>
</string-array>

<!-- Night theme values for auto and batter saver. -->
<string-array name="ads_theme_values_night" tools:ignore="InconsistentArrays">
<string-array name="ads_theme_values_night"
tools:ignore="InconsistentArrays">
<!-- Auto -->
<item>-3</item>
<!-- Battery -->
Expand Down
6 changes: 4 additions & 2 deletions dynamic-support/src/main/res/values-v28/arrays_theme.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,16 @@
xmlns:tools="http://schemas.android.com/tools">

<!-- Night theme entries for auto, batter saver and system. -->
<string-array name="ads_theme_entries_night" tools:ignore="InconsistentArrays">
<string-array name="ads_theme_entries_night"
tools:ignore="InconsistentArrays">
<item>@string/ads_theme_entry_auto</item>
<item>@string/ads_theme_entry_battery</item>
<item>@string/ads_locale_system</item>
</string-array>

<!-- Night theme values for auto, batter saver and system. -->
<string-array name="ads_theme_values_night" tools:ignore="InconsistentArrays">
<string-array name="ads_theme_values_night"
tools:ignore="InconsistentArrays">
<!-- Auto -->
<item>-3</item>
<!-- Battery -->
Expand Down
6 changes: 4 additions & 2 deletions dynamic-support/src/main/res/values-v31/arrays_theme.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,16 @@
xmlns:tools="http://schemas.android.com/tools">

<!-- Corner radius entries for the app widget. -->
<string-array name="ads_corner_entries_widget" tools:ignore="InconsistentArrays">
<string-array name="ads_corner_entries_widget"
tools:ignore="InconsistentArrays">
<item>@string/ads_theme_entry_auto</item>
<item>@string/ads_theme_entry_system</item>
<item>@string/ads_theme_entry_custom</item>
</string-array>

<!-- Corner radius values for the app widget. -->
<string-array name="ads_corner_values_widget" tools:ignore="InconsistentArrays">
<string-array name="ads_corner_values_widget"
tools:ignore="InconsistentArrays">
<!-- Auto -->
<item>-3</item>
<!-- Auto (System) -->
Expand Down
40 changes: 40 additions & 0 deletions dynamic-support/src/main/res/values-v34/arrays_theme.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018-2022 Pranav Pandey
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.
-->

<resources
xmlns:tools="http://schemas.android.com/tools">

<!-- Contrast ratio entries. -->
<string-array name="ads_contrast_entries"
tools:ignore="InconsistentArrays">
<item>@string/ads_theme_entry_auto</item>
<item>@string/ads_theme_entry_system</item>
<item>@string/ads_theme_entry_custom</item>
</string-array>

<!-- Contrast ratio values. -->
<string-array name="ads_contrast_values"
tools:ignore="InconsistentArrays">
<!-- Auto -->
<item>-3</item>
<!-- Auto (System) -->
<item>-5</item>
<!-- Custom -->
<item>-2</item>
</string-array>

</resources>
22 changes: 20 additions & 2 deletions dynamic-support/src/main/res/values/arrays_theme.xml
Original file line number Diff line number Diff line change
Expand Up @@ -172,12 +172,14 @@
</string-array>

<!-- Night theme entries for auto. -->
<string-array name="ads_theme_entries_night" tools:ignore="InconsistentArrays">
<string-array name="ads_theme_entries_night"
tools:ignore="InconsistentArrays">
<item>@string/ads_theme_entry_auto</item>
</string-array>

<!-- Night theme values for auto. -->
<string-array name="ads_theme_values_night" tools:ignore="InconsistentArrays">
<string-array name="ads_theme_values_night"
tools:ignore="InconsistentArrays">
<!-- Auto -->
<item>-3</item>
</string-array>
Expand Down Expand Up @@ -260,6 +262,22 @@
<item>1</item>
</string-array>

<!-- Contrast ratio entries. -->
<string-array name="ads_contrast_entries"
tools:ignore="InconsistentArrays">
<item>@string/ads_theme_entry_auto</item>
<item>@string/ads_theme_entry_custom</item>
</string-array>

<!-- Contrast ratio values. -->
<string-array name="ads_contrast_values"
tools:ignore="InconsistentArrays">
<!-- Auto -->
<item>-3</item>
<!-- Custom -->
<item>-2</item>
</string-array>

<!-- Theme elevation entries. -->
<string-array name="ads_elevation_entries">
<item>@string/ads_theme_entry_auto</item>
Expand Down

0 comments on commit 398761c

Please sign in to comment.