Skip to content

Commit

Permalink
UI: re-add OLED friendly (aka black) theme.
Browse files Browse the repository at this point in the history
Fixes #1625.
  • Loading branch information
dennisguse committed Feb 13, 2024
1 parent aca1ec6 commit e85045e
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 8 deletions.
5 changes: 5 additions & 0 deletions src/main/java/de/dennisguse/opentracks/AbstractActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import androidx.appcompat.app.AppCompatActivity;

import de.dennisguse.opentracks.services.announcement.TTSManager;
import de.dennisguse.opentracks.settings.PreferencesUtils;

/**
* @author Jimmy Shih
Expand All @@ -36,6 +37,10 @@ protected void onCreate(Bundle savedInstanceState) {
setVolumeControlStream(TTSManager.AUDIO_STREAM);

setContentView(getRootView());

if (PreferencesUtils.shouldApplyOledTheme()) {
setTheme(R.style.OpenTracksThemeOled);
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -670,13 +670,29 @@ public static boolean getPreventReimportTracks() {
}

/**
* @return {@link androidx.appcompat.app.AppCompatDelegate}.MODE_*
* @return * {@link androidx.appcompat.app.AppCompatDelegate}.MODE_*
* * 3: Night OLED friendly
*/
public static int getDefaultNightMode() {
private static String getUiMode() {
final String defaultValue = getKey(R.string.night_mode_default);
final String value = getString(R.string.night_mode_key, defaultValue);

return Integer.parseInt(value);
return value;
}

public static boolean shouldApplyOledTheme() {
return resources.getString(R.string.night_mode_night_oled_value)
.equals(getUiMode());
}

public static void applyNightMode() {
String uiMode = getUiMode();
if (resources.getString(R.string.night_mode_night_oled_value)
.equals(uiMode)) {
return;
}

AppCompatDelegate.setDefaultNightMode(Integer.parseInt(uiMode));
}

public static void resetPreferences(Context context, boolean readAgain) {
Expand Down Expand Up @@ -823,10 +839,6 @@ public static void resetCustomLayoutPreferences() {
}
}

public static void applyNightMode() {
AppCompatDelegate.setDefaultNightMode(PreferencesUtils.getDefaultNightMode());
}

//TODO Check if resetPreferences can be used instead.
@Deprecated
@VisibleForTesting
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,10 @@ public class UserInterfaceSettingsFragment extends PreferenceFragmentCompat {

private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> {
if (PreferencesUtils.isKey(R.string.night_mode_key, key)) {
getActivity().runOnUiThread(PreferencesUtils::applyNightMode);
getActivity().runOnUiThread(() -> {
PreferencesUtils.applyNightMode();
getActivity().recreate();
});
}
};

Expand Down
3 changes: 3 additions & 0 deletions src/main/res/values/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -281,16 +281,19 @@
<string name="night_mode_default" translatable="false">@string/night_mode_system_value</string>
<string name="night_mode_no_value" translatable="false">1</string>
<string name="night_mode_yes_value" translatable="false">2</string>
<string name="night_mode_night_oled_value" translatable="false">3</string>
<string name="night_mode_system_value" translatable="false">-1</string>
<string-array name="night_mode_values">
<item>@string/night_mode_system_value</item>
<item>@string/night_mode_no_value</item>
<item>@string/night_mode_yes_value</item>
<item>@string/night_mode_night_oled_value</item>
</string-array>
<string-array name="night_mode_options">
<item>@string/settings_night_mode_option_system</item>
<item>@string/settings_night_mode_option_day</item>
<item>@string/settings_night_mode_option_night</item>
<item>@string/settings_night_mode_option_night_oled</item>
</string-array>

<!-- Stats layout customization -->
Expand Down
1 change: 1 addition & 0 deletions src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,7 @@ limitations under the License.
<string name="settings_night_mode_option_system">System</string>
<string name="settings_night_mode_option_day">Day</string>
<string name="settings_night_mode_option_night">Night</string>
<string name="settings_night_mode_option_night_oled">Night (OLED friendly)</string>

<string name="settings_announcements_totaltime_frequency">Time interval</string>
<string name="settings_announcements_distance_frequency">Lap length</string>
Expand Down
25 changes: 25 additions & 0 deletions src/main/res/values/styles_theme.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,29 @@
<style name="Widget.OpenTracks.BottomAppBar" parent="Widget.Material3.BottomAppBar">
<item name="backgroundTint">?attr/colorSurfaceContainer</item>
</style>

<style name="OpenTracksThemeOled" parent="Theme.Material3.Dark.NoActionBar">
<item name="colorPrimary">@color/opentracks</item>
<item name="colorSecondary">@color/opentracks</item>

<!-- Material3 https://github.com/material-components/material-components-android/issues/2828#issuecomment-1187563903 -->
<item name="switchPreferenceCompatStyle">@style/MaterialSwitchPreferenceCompat</item>

<item name="android:statusBarColor">?attr/colorSurfaceBright</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:navigationBarColor">?attr/colorSurfaceContainer</item>

<!-- Snackbar -->
<item name="snackbarStyle">@style/MaterialSnackbarTheme</item>
<item name="snackbarButtonStyle">@style/MaterialSnackbarTextButtonTheme</item>
<item name="snackbarTextViewStyle">@style/MaterialSnackbarTextViewTheme</item>

<item name="bottomAppBarStyle">@style/Widget.OpenTracks.BottomAppBar</item>
<item name="floatingActionButtonStyle">@style/Widget.OpenTracks.FloatingActionButton</item>

<item name="windowActionModeOverlay">true</item>

<!-- Differences to OpenTracksTheme -->
<item name="android:colorBackground">@android:color/black</item>
</style>
</resources>

0 comments on commit e85045e

Please sign in to comment.