forked from mirrors/Fedilab
switch between themes
This commit is contained in:
parent
c8a4ffa922
commit
9a10a7aaf6
6 changed files with 71 additions and 71 deletions
|
@ -30,6 +30,7 @@ import org.acra.config.DialogConfigurationBuilder;
|
||||||
import org.acra.config.MailSenderConfigurationBuilder;
|
import org.acra.config.MailSenderConfigurationBuilder;
|
||||||
import org.acra.data.StringFormat;
|
import org.acra.data.StringFormat;
|
||||||
|
|
||||||
|
import app.fedilab.android.helper.ThemeHelper;
|
||||||
import es.dmoral.toasty.Toasty;
|
import es.dmoral.toasty.Toasty;
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,6 +69,8 @@ public class MainApplication extends MultiDexApplication {
|
||||||
MultiDex.install(MainApplication.this);
|
MultiDex.install(MainApplication.this);
|
||||||
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MainApplication.this);
|
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(MainApplication.this);
|
||||||
boolean send_crash_reports = sharedpreferences.getBoolean(getString(R.string.SET_SEND_CRASH_REPORTS), false);
|
boolean send_crash_reports = sharedpreferences.getBoolean(getString(R.string.SET_SEND_CRASH_REPORTS), false);
|
||||||
|
String currentTheme = sharedpreferences.getString(getString(R.string.SET_THEME_BASE), getString(R.string.SET_DEFAULT_THEME));
|
||||||
|
ThemeHelper.switchTo(currentTheme);
|
||||||
if (send_crash_reports) {
|
if (send_crash_reports) {
|
||||||
ACRA.init(this, new CoreConfigurationBuilder()
|
ACRA.init(this, new CoreConfigurationBuilder()
|
||||||
//core configuration:
|
//core configuration:
|
||||||
|
|
|
@ -23,6 +23,7 @@ import android.content.res.ColorStateList;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
|
import android.os.Build;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -32,6 +33,7 @@ import android.view.animation.TranslateAnimation;
|
||||||
|
|
||||||
import androidx.annotation.AttrRes;
|
import androidx.annotation.AttrRes;
|
||||||
import androidx.annotation.ColorInt;
|
import androidx.annotation.ColorInt;
|
||||||
|
import androidx.appcompat.app.AppCompatDelegate;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
|
@ -264,6 +266,25 @@ public class ThemeHelper {
|
||||||
activity.getBaseContext().getResources().updateConfiguration(configuration, metrics);
|
activity.getBaseContext().getResources().updateConfiguration(configuration, metrics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void switchTo(String themePref) {
|
||||||
|
if (themes.LIGHT.name().equals(themePref)) {
|
||||||
|
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
|
||||||
|
} else if (themes.DARK.name().equals(themePref)) {
|
||||||
|
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
|
||||||
|
} else {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
|
||||||
|
} else {
|
||||||
|
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum themes {
|
||||||
|
LIGHT,
|
||||||
|
DARK,
|
||||||
|
SYSTEM
|
||||||
|
}
|
||||||
|
|
||||||
public interface SlideAnimation {
|
public interface SlideAnimation {
|
||||||
void onAnimationEnded();
|
void onAnimationEnded();
|
||||||
|
|
|
@ -60,6 +60,7 @@ import java.util.List;
|
||||||
|
|
||||||
import app.fedilab.android.R;
|
import app.fedilab.android.R;
|
||||||
import app.fedilab.android.activities.ComposeActivity;
|
import app.fedilab.android.activities.ComposeActivity;
|
||||||
|
import app.fedilab.android.databinding.ActivityThemeSettingsBinding;
|
||||||
import app.fedilab.android.databinding.PopupStatusThemeBinding;
|
import app.fedilab.android.databinding.PopupStatusThemeBinding;
|
||||||
import app.fedilab.android.helper.Helper;
|
import app.fedilab.android.helper.Helper;
|
||||||
import app.fedilab.android.helper.ThemeHelper;
|
import app.fedilab.android.helper.ThemeHelper;
|
||||||
|
@ -72,7 +73,6 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements
|
||||||
private List<LinkedHashMap<String, String>> listOfThemes;
|
private List<LinkedHashMap<String, String>> listOfThemes;
|
||||||
private SharedPreferences appPref;
|
private SharedPreferences appPref;
|
||||||
private SharedPreferences cyneaPref;
|
private SharedPreferences cyneaPref;
|
||||||
private boolean shouldRestart;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle bundle, String s) {
|
public void onCreatePreferences(Bundle bundle, String s) {
|
||||||
|
@ -80,7 +80,6 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements
|
||||||
appPref = PreferenceManager.getDefaultSharedPreferences(requireActivity());
|
appPref = PreferenceManager.getDefaultSharedPreferences(requireActivity());
|
||||||
createPref();
|
createPref();
|
||||||
listOfThemes = ThemeHelper.getContributorsTheme(requireActivity());
|
listOfThemes = ThemeHelper.getContributorsTheme(requireActivity());
|
||||||
shouldRestart = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,7 +108,12 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements
|
||||||
if (key.equals("use_custom_theme")) {
|
if (key.equals("use_custom_theme")) {
|
||||||
createPref();
|
createPref();
|
||||||
}
|
}
|
||||||
shouldRestart = true;
|
if (key.compareTo(getString(R.string.SET_THEME_BASE)) == 0) {
|
||||||
|
ListPreference SET_THEME_BASE = findPreference(getString(R.string.SET_THEME_BASE));
|
||||||
|
if (SET_THEME_BASE != null) {
|
||||||
|
ThemeHelper.switchTo(SET_THEME_BASE.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
Helper.recreateMainActivity(requireActivity());
|
Helper.recreateMainActivity(requireActivity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,8 +304,7 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements
|
||||||
Preference launch_custom_theme = findPreference("launch_custom_theme");
|
Preference launch_custom_theme = findPreference("launch_custom_theme");
|
||||||
if (launch_custom_theme != null) {
|
if (launch_custom_theme != null) {
|
||||||
launch_custom_theme.setOnPreferenceClickListener(preference -> {
|
launch_custom_theme.setOnPreferenceClickListener(preference -> {
|
||||||
|
startActivity(new Intent(requireActivity(), ActivityThemeSettingsBinding.class));
|
||||||
shouldRestart = true;
|
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -418,7 +421,6 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements
|
||||||
ComposeActivity.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
|
ComposeActivity.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
shouldRestart = true;
|
|
||||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||||
intent.setType("*/*");
|
intent.setType("*/*");
|
||||||
|
@ -439,7 +441,6 @@ public class FragmentThemingSettings extends PreferenceFragmentCompat implements
|
||||||
createPref();
|
createPref();
|
||||||
|
|
||||||
});
|
});
|
||||||
shouldRestart = true;
|
|
||||||
dialogBuilder.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
|
dialogBuilder.setNegativeButton(R.string.cancel, (dialog, id) -> dialog.dismiss());
|
||||||
AlertDialog alertDialog = dialogBuilder.create();
|
AlertDialog alertDialog = dialogBuilder.create();
|
||||||
alertDialog.setCancelable(false);
|
alertDialog.setCancelable(false);
|
||||||
|
|
|
@ -55,7 +55,11 @@
|
||||||
|
|
||||||
<action
|
<action
|
||||||
android:id="@+id/categories_to_theming"
|
android:id="@+id/categories_to_theming"
|
||||||
app:destination="@id/ThemeSettingsActivity" />
|
app:destination="@id/FragmentThemingSettings"
|
||||||
|
app:enterAnim="@anim/enter"
|
||||||
|
app:exitAnim="@anim/exit"
|
||||||
|
app:popEnterAnim="@anim/pop_enter"
|
||||||
|
app:popExitAnim="@anim/pop_exit" />
|
||||||
|
|
||||||
<action
|
<action
|
||||||
android:id="@+id/categories_to_language"
|
android:id="@+id/categories_to_language"
|
||||||
|
@ -91,6 +95,10 @@
|
||||||
android:name="app.fedilab.android.ui.fragment.settings.FragmentPrivacySettings"
|
android:name="app.fedilab.android.ui.fragment.settings.FragmentPrivacySettings"
|
||||||
android:label="@string/action_privacy" />
|
android:label="@string/action_privacy" />
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/FragmentThemingSettings"
|
||||||
|
android:name="app.fedilab.android.ui.fragment.settings.FragmentThemingSettings"
|
||||||
|
android:label="@string/theming" />
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/FragmentLanguageSettings"
|
android:id="@+id/FragmentLanguageSettings"
|
||||||
|
@ -101,8 +109,4 @@
|
||||||
android:id="@+id/EditProfileActivity"
|
android:id="@+id/EditProfileActivity"
|
||||||
android:name="app.fedilab.android.activities.EditProfileActivity" />
|
android:name="app.fedilab.android.activities.EditProfileActivity" />
|
||||||
|
|
||||||
<activity
|
|
||||||
android:id="@+id/ThemeSettingsActivity"
|
|
||||||
android:name="app.fedilab.android.activities.ThemeSettingsActivity" />
|
|
||||||
|
|
||||||
</navigation>
|
</navigation>
|
||||||
|
|
|
@ -695,6 +695,18 @@
|
||||||
<string name="not_valid_list_name">List name is not valid!</string>
|
<string name="not_valid_list_name">List name is not valid!</string>
|
||||||
<string name="no_account_in_list">No accounts found for this list!</string>
|
<string name="no_account_in_list">No accounts found for this list!</string>
|
||||||
<string name="scheduled">Scheduled</string>
|
<string name="scheduled">Scheduled</string>
|
||||||
|
|
||||||
|
<string-array name="set_theme_mode_value">
|
||||||
|
<item>Light</item>
|
||||||
|
<item>Dark</item>
|
||||||
|
<item>System default</item>
|
||||||
|
</string-array>
|
||||||
|
<string-array name="SET_THEME_MODE_VALUE" translatable="false">
|
||||||
|
<item>LIGHT</item>
|
||||||
|
<item>DARK</item>
|
||||||
|
<item>SYSTEM</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<string-array name="set_notification_type_value">
|
<string-array name="set_notification_type_value">
|
||||||
<item>Push notifications</item>
|
<item>Push notifications</item>
|
||||||
<item>Fetch at fixed times</item>
|
<item>Fetch at fixed times</item>
|
||||||
|
@ -1252,6 +1264,9 @@
|
||||||
<string name="SET_SHOW_REPLIES" translatable="false">SET_SHOW_REPLIES</string>
|
<string name="SET_SHOW_REPLIES" translatable="false">SET_SHOW_REPLIES</string>
|
||||||
<string name="SET_DISABLE_ANIMATED_EMOJI" translatable="false">SET_DISABLE_ANIMATED_EMOJI</string>
|
<string name="SET_DISABLE_ANIMATED_EMOJI" translatable="false">SET_DISABLE_ANIMATED_EMOJI</string>
|
||||||
<string name="SET_CAPITALIZE" translatable="false">SET_CAPITALIZE</string>
|
<string name="SET_CAPITALIZE" translatable="false">SET_CAPITALIZE</string>
|
||||||
|
<string name="SET_THEME_BASE" translatable="false">SET_THEME_BASE</string>
|
||||||
|
<string name="SET_DEFAULT_THEME" translatable="false">SYSTEM</string>
|
||||||
|
|
||||||
<string name="SET_FULL_PREVIEW" translatable="false">SET_FULL_PREVIEW</string>
|
<string name="SET_FULL_PREVIEW" translatable="false">SET_FULL_PREVIEW</string>
|
||||||
<string name="SET_SHARE_DETAILS" translatable="false">SET_SHARE_DETAILS</string>
|
<string name="SET_SHARE_DETAILS" translatable="false">SET_SHARE_DETAILS</string>
|
||||||
<string name="SET_CUSTOM_SHARING" translatable="false">SET_CUSTOM_SHARING</string>
|
<string name="SET_CUSTOM_SHARING" translatable="false">SET_CUSTOM_SHARING</string>
|
||||||
|
@ -1957,4 +1972,7 @@
|
||||||
<string name="saved_changes">Changes have been saved!</string>
|
<string name="saved_changes">Changes have been saved!</string>
|
||||||
<string name="create_domain_block">Create domain block</string>
|
<string name="create_domain_block">Create domain block</string>
|
||||||
<string name="mute_tag">Are you sure to mute the tag %1$s?</string>
|
<string name="mute_tag">Are you sure to mute the tag %1$s?</string>
|
||||||
|
<string name="type_of_theme">Pickup a mode for the theme</string>
|
||||||
|
<string name="pref_customize">Customize colors</string>
|
||||||
|
<string name="pref_customize_summary">Allow to set your custom colors for themes.</string>
|
||||||
</resources>
|
</resources>
|
|
@ -5,19 +5,22 @@
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
app:defaultValue="SYSTEM"
|
||||||
|
app:dialogTitle="@string/type_of_theme"
|
||||||
|
app:entries="@array/set_theme_mode_value"
|
||||||
|
app:entryValues="@array/SET_THEME_MODE_VALUE"
|
||||||
|
app:iconSpaceReserved="false"
|
||||||
|
app:key="@string/SET_THEME_BASE"
|
||||||
|
app:title="@string/type_of_theme"
|
||||||
|
app:useSimpleSummaryProvider="true" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
app:key="launch_custom_theme"
|
app:key="launch_custom_theme"
|
||||||
app:summary="@string/pref_theme_base_summary"
|
app:summary="@string/pref_customize_summary"
|
||||||
app:title="@string/pref_theme_base" />
|
app:title="@string/pref_customize" />
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
|
||||||
app:defaultValue="false"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
app:key="use_custom_theme"
|
|
||||||
app:singleLineTitle="false"
|
|
||||||
app:summary="@string/pref_custom_theme_new_summary"
|
|
||||||
app:title="@string/pref_custom_theme" />
|
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
|
@ -29,57 +32,7 @@
|
||||||
android:key="cyanea_preference_category"
|
android:key="cyanea_preference_category"
|
||||||
android:title="@string/customize_timelines"
|
android:title="@string/customize_timelines"
|
||||||
app:iconSpaceReserved="false">
|
app:iconSpaceReserved="false">
|
||||||
<!--
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
app:defaultValue="-1"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
app:key="theme_link_color"
|
|
||||||
app:summary="@string/link_color"
|
|
||||||
app:title="@string/link_color_title" />
|
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
app:defaultValue="-1"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
app:key="theme_boost_header_color"
|
|
||||||
app:summary="@string/boost_header_color"
|
|
||||||
app:title="@string/boost_header_color_title" />
|
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
app:defaultValue="-1"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
app:key="theme_text_header_1_line"
|
|
||||||
app:summary="@string/displayname_title"
|
|
||||||
app:title="@string/display_name" />
|
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
app:defaultValue="-1"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
app:key="theme_text_header_2_line"
|
|
||||||
app:summary="@string/username_title"
|
|
||||||
app:title="@string/username" />
|
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
app:defaultValue="-1"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
app:key="theme_statuses_color"
|
|
||||||
app:summary="@string/background_status"
|
|
||||||
app:title="@string/background_status_title" />
|
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
app:defaultValue="-1"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
app:key="theme_icons_color"
|
|
||||||
app:summary="@string/icons_color"
|
|
||||||
app:title="@string/icons_color_title" />
|
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
app:defaultValue="-1"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
app:key="theme_text_color"
|
|
||||||
app:summary="@string/text_color"
|
|
||||||
app:title="@string/text_color_title" />
|
|
||||||
|
|
||||||
-->
|
|
||||||
<Preference
|
<Preference
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
app:key="reset_pref"
|
app:key="reset_pref"
|
||||||
|
|
Loading…
Reference in a new issue