diff --git a/app/build.gradle b/app/build.gradle index 75597b9b..a895eb85 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,7 +15,7 @@ android { annotationProcessorOptions { arguments = [ "resourcePackageName": "org.transdroid", - "androidManifestFile": "app/src/main/AndroidManifest.xml" + "androidManifestFile": file("src/main/AndroidManifest.xml").absolutePath ] } } diff --git a/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java b/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java index 77e9b35c..4508d8cf 100644 --- a/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java +++ b/app/src/main/java/org/transdroid/core/app/settings/ApplicationSettings.java @@ -712,8 +712,7 @@ public class ApplicationSettings { StatusType.valueOf(prefs.getString("widget_status_" + appWidgetId, StatusType.ShowAll.name())), TorrentsSortBy.valueOf(prefs.getString("widget_sortby_" + appWidgetId, TorrentsSortBy.Alphanumeric.name())), prefs.getBoolean("widget_reverse_" + appWidgetId, false), - prefs.getBoolean("widget_showstatus_" + appWidgetId, false), - prefs.getBoolean("widget_darktheme_" + appWidgetId, false)); + prefs.getBoolean("widget_showstatus_" + appWidgetId, false)); // @formatter:on } @@ -733,7 +732,6 @@ public class ApplicationSettings { edit.putString("widget_sortby_" + appWidgetId, settings.getSortBy().name()); edit.putBoolean("widget_reverse_" + appWidgetId, settings.shouldReserveSort()); edit.putBoolean("widget_showstatus_" + appWidgetId, settings.shouldShowStatusView()); - edit.putBoolean("widget_darktheme_" + appWidgetId, settings.shouldUseDarkTheme()); edit.apply(); } diff --git a/app/src/main/java/org/transdroid/core/app/settings/SettingsUtils.java b/app/src/main/java/org/transdroid/core/app/settings/SettingsUtils.java new file mode 100644 index 00000000..79989549 --- /dev/null +++ b/app/src/main/java/org/transdroid/core/app/settings/SettingsUtils.java @@ -0,0 +1,38 @@ +package org.transdroid.core.app.settings; + + +import android.content.Context; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.app.AppCompatDelegate; + +import com.afollestad.materialdialogs.MaterialDialog; +import com.afollestad.materialdialogs.Theme; + +public class SettingsUtils { + /** + * Set the theme according to the user preference. + */ + public static void applyDayNightTheme(AppCompatActivity activity) { + SystemSettings settings = SystemSettings_.getInstance_(activity); + + if (settings.autoDarkTheme()) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); + } else { + AppCompatDelegate.setDefaultNightMode(settings.useDarkTheme() ? + AppCompatDelegate.MODE_NIGHT_YES : + AppCompatDelegate.MODE_NIGHT_NO + ); + } + } + + + public static MaterialDialog.Builder applyDialogTheme(MaterialDialog.Builder builder) { + SystemSettings settings = SystemSettings_.getInstance_(builder.getContext()); + + if (settings.autoDarkTheme()) { + return builder; + } + + return builder.theme(settings.useDarkTheme() ? Theme.DARK: Theme.LIGHT); + } +} diff --git a/app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java b/app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java index f0cd1e42..a651a2b8 100644 --- a/app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java +++ b/app/src/main/java/org/transdroid/core/app/settings/SystemSettings.java @@ -26,7 +26,6 @@ import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import com.afollestad.materialdialogs.Theme; /** * Allows instantiation of the settings specified in R.xml.pref_system. @@ -59,12 +58,12 @@ public class SystemSettings { return prefs.getBoolean("system_checkupdates", true); } - public boolean useDarkTheme() { - return prefs.getBoolean("system_usedarktheme", false); + public boolean autoDarkTheme() { + return prefs.getBoolean("system_autodarktheme", true); } - public Theme getMaterialDialogtheme() { - return useDarkTheme() ? Theme.DARK: Theme.LIGHT; + public boolean useDarkTheme() { + return prefs.getBoolean("system_usedarktheme", false); } /** diff --git a/app/src/main/java/org/transdroid/core/gui/DetailsActivity.java b/app/src/main/java/org/transdroid/core/gui/DetailsActivity.java index c67d1f13..2ec7ee0e 100644 --- a/app/src/main/java/org/transdroid/core/gui/DetailsActivity.java +++ b/app/src/main/java/org/transdroid/core/gui/DetailsActivity.java @@ -40,7 +40,7 @@ import org.androidannotations.annotations.ViewById; import org.transdroid.R; import org.transdroid.core.app.settings.ApplicationSettings; import org.transdroid.core.app.settings.ServerSetting; -import org.transdroid.core.app.settings.SystemSettings_; +import org.transdroid.core.app.settings.SettingsUtils; import org.transdroid.core.gui.lists.LocalTorrent; import org.transdroid.core.gui.log.Log; import org.transdroid.core.gui.navigation.Label; @@ -114,10 +114,7 @@ public class DetailsActivity extends AppCompatActivity implements TorrentTasksEx @Override public void onCreate(Bundle savedInstanceState) { - // Set the theme according to the user preference - if (SystemSettings_.getInstance_(this).useDarkTheme()) { - setTheme(R.style.TransdroidTheme_Dark); - } + SettingsUtils.applyDayNightTheme(this); super.onCreate(savedInstanceState); } diff --git a/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java b/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java index 3039ae71..d701d54e 100644 --- a/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java +++ b/app/src/main/java/org/transdroid/core/gui/DetailsFragment.java @@ -122,11 +122,7 @@ public class DetailsFragment extends Fragment implements OnTrackersUpdatedListen // On large screens where this fragment is shown next to the torrents list, we show a continues grey vertical // line to separate the lists visually if (!NavigationHelper_.getInstance_(getActivity()).isSmallScreen()) { - if (SystemSettings_.getInstance_(getActivity()).useDarkTheme()) { - detailsContainer.setBackgroundResource(R.drawable.details_list_background_dark); - } else { - detailsContainer.setBackgroundResource(R.drawable.details_list_background_light); - } + detailsContainer.setBackgroundResource(R.drawable.details_list_background); } createMenuOptions(); diff --git a/app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java b/app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java index 147e81ea..dae5833d 100644 --- a/app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java +++ b/app/src/main/java/org/transdroid/core/gui/TorrentsActivity.java @@ -68,8 +68,8 @@ import org.transdroid.R; import org.transdroid.core.app.search.SearchHelper_; import org.transdroid.core.app.settings.ApplicationSettings; import org.transdroid.core.app.settings.ServerSetting; +import org.transdroid.core.app.settings.SettingsUtils; import org.transdroid.core.app.settings.SystemSettings; -import org.transdroid.core.app.settings.SystemSettings_; import org.transdroid.core.app.settings.WebsearchSetting; import org.transdroid.core.gui.lists.LocalTorrent; import org.transdroid.core.gui.lists.SimpleListItem; @@ -220,10 +220,8 @@ public class TorrentsActivity extends AppCompatActivity implements TorrentTasksE @Override public void onCreate(Bundle savedInstanceState) { - // Set the theme according to the user preference - if (SystemSettings_.getInstance_(this).useDarkTheme()) { - setTheme(R.style.TransdroidTheme_Dark); - } + SettingsUtils.applyDayNightTheme(this); + // Catch any uncaught exception to log it Thread.setDefaultUncaughtExceptionHandler(new LogUncaughtExceptionHandler(this, Thread.getDefaultUncaughtExceptionHandler())); super.onCreate(savedInstanceState); diff --git a/app/src/main/java/org/transdroid/core/gui/navigation/Label.java b/app/src/main/java/org/transdroid/core/gui/navigation/Label.java index d2bae95e..32ecbb2c 100644 --- a/app/src/main/java/org/transdroid/core/gui/navigation/Label.java +++ b/app/src/main/java/org/transdroid/core/gui/navigation/Label.java @@ -101,13 +101,17 @@ public class Label implements SimpleListItem, NavigationFilter, Comparable