mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-02 17:43:06 +02:00
@@ -22,6 +22,7 @@ import android.view.View;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import de.dennisguse.opentracks.services.announcement.TTSManager;
|
||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||
|
||||
/**
|
||||
* @author Jimmy Shih
|
||||
@@ -30,6 +31,10 @@ public abstract class AbstractActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
if (PreferencesUtils.shouldApplyOledTheme()) {
|
||||
setTheme(R.style.OpenTracksThemeOled);
|
||||
}
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// Set volume control stream for text to speech
|
||||
|
||||
@@ -87,6 +87,10 @@ public class PreferencesUtils {
|
||||
changeListener.onSharedPreferenceChanged(sharedPreferences, null);
|
||||
}
|
||||
|
||||
public static void registerOnSharedPreferenceChangeListenerSilent(SharedPreferences.OnSharedPreferenceChangeListener changeListener) {
|
||||
sharedPreferences.registerOnSharedPreferenceChangeListener(changeListener);
|
||||
}
|
||||
|
||||
public static void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener changeListener) {
|
||||
sharedPreferences.unregisterOnSharedPreferenceChangeListener(changeListener);
|
||||
}
|
||||
@@ -670,13 +674,29 @@ public class PreferencesUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* @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) {
|
||||
@@ -823,10 +843,6 @@ public class PreferencesUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void applyNightMode() {
|
||||
AppCompatDelegate.setDefaultNightMode(PreferencesUtils.getDefaultNightMode());
|
||||
}
|
||||
|
||||
//TODO Check if resetPreferences can be used instead.
|
||||
@Deprecated
|
||||
@VisibleForTesting
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.preference.ListPreference;
|
||||
@@ -20,7 +21,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();
|
||||
Toast.makeText(getContext(), R.string.settings_theme_switch_restart, Toast.LENGTH_LONG).show();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -50,7 +54,7 @@ public class UserInterfaceSettingsFragment extends PreferenceFragmentCompat {
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||
PreferencesUtils.registerOnSharedPreferenceChangeListenerSilent(sharedPreferenceChangeListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
@@ -377,6 +377,7 @@ limitations under the License.
|
||||
<string name="settings_chart_by_time">By time</string>
|
||||
<!-- Settings Recording -->
|
||||
<string name="settings_recording_title">Recording</string>
|
||||
<string name="settings_theme_switch_restart">Theme changes may require a manual restart.</string>
|
||||
<string name="settings_ui_dynamic_colors_title">Dynamic Colors</string>
|
||||
<string name="settings_ui_dynamic_colors_summary">Use user-defined Dynamic Colors (Android 12+ only; requires a manual restart)</string>
|
||||
<string name="settings_recording_customize_layout_title">Customize your recording layout</string>
|
||||
@@ -404,6 +405,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>
|
||||
|
||||
@@ -8,19 +8,20 @@
|
||||
<!-- 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>
|
||||
|
||||
<item name="bottomAppBarStyle">@style/Widget.OpenTracks.BottomAppBar</item>
|
||||
|
||||
<item name="android:statusBarColor">?attr/colorSurfaceBright</item>
|
||||
<item name="android:windowLightStatusBar">true</item>
|
||||
<item name="android:navigationBarColor">?attr/colorSurfaceContainer</item>
|
||||
</style>
|
||||
|
||||
<style name="SplashTheme" parent="Theme.SplashScreen">
|
||||
@@ -31,4 +32,36 @@
|
||||
<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>
|
||||
|
||||
<!-- Snackbar -->
|
||||
<item name="snackbarStyle">@style/MaterialSnackbarTheme</item>
|
||||
<item name="snackbarButtonStyle">@style/MaterialSnackbarTextButtonTheme</item>
|
||||
<item name="snackbarTextViewStyle">@style/MaterialSnackbarTextViewTheme</item>
|
||||
|
||||
<item name="floatingActionButtonStyle">@style/Widget.OpenTracks.FloatingActionButton</item>
|
||||
|
||||
<item name="windowActionModeOverlay">true</item>
|
||||
|
||||
<!-- Differences to OpenTracksTheme -->
|
||||
<item name="bottomAppBarStyle">@style/Widget.OpenTracks.BottomAppBarOled</item>
|
||||
|
||||
<item name="android:statusBarColor">@android:color/black</item>
|
||||
<item name="android:windowLightStatusBar">false</item>
|
||||
<item name="android:navigationBarColor">@android:color/black</item>
|
||||
|
||||
<item name="colorSurface">@android:color/black</item>
|
||||
<item name="colorSurfaceContainer">@android:color/black</item>
|
||||
<item name="android:windowBackground">@android:color/black</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.OpenTracks.BottomAppBarOled" parent="Widget.Material3.BottomAppBar">
|
||||
<item name="backgroundTint">@android:color/transparent</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user