diff --git a/app/src/main/java/com/github/gotify/init/InitializationActivity.kt b/app/src/main/java/com/github/gotify/init/InitializationActivity.kt index d62483c..febd64f 100644 --- a/app/src/main/java/com/github/gotify/init/InitializationActivity.kt +++ b/app/src/main/java/com/github/gotify/init/InitializationActivity.kt @@ -31,7 +31,7 @@ class InitializationActivity : AppCompatActivity() { super.onCreate(savedInstanceState) Log.init(this) val theme = PreferenceManager.getDefaultSharedPreferences(this) - .getString(getString(R.string.setting_key_theme), getString(R.string.theme_default)) + .getString(getString(R.string.setting_key_theme), getString(R.string.theme_default))!! ThemeHelper.setTheme(this, theme) setContentView(R.layout.splash) diff --git a/app/src/main/java/com/github/gotify/settings/SettingsActivity.java b/app/src/main/java/com/github/gotify/settings/SettingsActivity.java deleted file mode 100644 index 6ad24c8..0000000 --- a/app/src/main/java/com/github/gotify/settings/SettingsActivity.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.github.gotify.settings; - -import android.app.AlertDialog; -import android.content.ComponentName; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.os.Bundle; -import android.view.MenuItem; -import android.view.View; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.preference.ListPreference; -import androidx.preference.PreferenceFragmentCompat; -import androidx.preference.PreferenceManager; -import com.github.gotify.R; - -public class SettingsActivity extends AppCompatActivity - implements SharedPreferences.OnSharedPreferenceChangeListener { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.settings_activity); - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.settings, new SettingsFragment()) - .commit(); - setSupportActionBar(findViewById(R.id.toolbar)); - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setDisplayShowCustomEnabled(true); - } - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - sharedPreferences.registerOnSharedPreferenceChangeListener(this); - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (item.getItemId() == android.R.id.home) { - finish(); - } - return super.onOptionsItemSelected(item); - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (getString(R.string.setting_key_theme).equals(key)) { - ThemeHelper.setTheme( - this, sharedPreferences.getString(key, getString(R.string.theme_default))); - } - } - - public static class SettingsFragment extends PreferenceFragmentCompat { - @Override - public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - setPreferencesFromResource(R.xml.root_preferences, rootKey); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - ListPreference message_layout = - findPreference(getString(R.string.setting_key_message_layout)); - message_layout.setOnPreferenceChangeListener( - (ignored, ignored2) -> { - new AlertDialog.Builder(getContext()) - .setTitle(R.string.setting_message_layout_dialog_title) - .setMessage(R.string.setting_message_layout_dialog_message) - .setPositiveButton( - getString(R.string.setting_message_layout_dialog_button1), - (ignored3, ignored4) -> { - restartApp(); - }) - .setNegativeButton( - getString(R.string.setting_message_layout_dialog_button2), - (ignore3, ignored4) -> {}) - .show(); - return true; - }); - } - - private void restartApp() { - PackageManager packageManager = getContext().getPackageManager(); - String packageName = getContext().getPackageName(); - Intent intent = packageManager.getLaunchIntentForPackage(packageName); - ComponentName componentName = intent.getComponent(); - Intent mainIntent = Intent.makeRestartActivityTask(componentName); - startActivity(mainIntent); - Runtime.getRuntime().exit(0); - } - } -} diff --git a/app/src/main/java/com/github/gotify/settings/SettingsActivity.kt b/app/src/main/java/com/github/gotify/settings/SettingsActivity.kt new file mode 100644 index 0000000..2a6f1a3 --- /dev/null +++ b/app/src/main/java/com/github/gotify/settings/SettingsActivity.kt @@ -0,0 +1,92 @@ +package com.github.gotify.settings + +import android.app.AlertDialog +import android.content.Intent +import android.content.SharedPreferences +import android.content.SharedPreferences.OnSharedPreferenceChangeListener +import android.os.Bundle +import android.view.MenuItem +import android.view.View +import androidx.appcompat.app.AppCompatActivity +import androidx.preference.ListPreference +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import androidx.preference.PreferenceManager +import com.github.gotify.R +import com.github.gotify.databinding.SettingsActivityBinding + +class SettingsActivity : AppCompatActivity(), OnSharedPreferenceChangeListener { + private lateinit var binding: SettingsActivityBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = SettingsActivityBinding.inflate(layoutInflater) + setContentView(binding.root) + supportFragmentManager + .beginTransaction() + .replace(R.id.settings, SettingsFragment()) + .commit() + setSupportActionBar(binding.appBarDrawer.toolbar) + val actionBar = supportActionBar + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true) + actionBar.setDisplayShowCustomEnabled(true) + } + val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) + sharedPreferences.registerOnSharedPreferenceChangeListener(this) + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + if (item.itemId == android.R.id.home) { + finish() + return true + } + return false + } + + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { + if (getString(R.string.setting_key_theme) == key) { + ThemeHelper.setTheme( + this, sharedPreferences.getString(key, getString(R.string.theme_default))!!) + } + } + + class SettingsFragment : PreferenceFragmentCompat() { + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.root_preferences, rootKey) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val messageLayout: ListPreference? = + findPreference(getString(R.string.setting_key_message_layout)) + messageLayout?.onPreferenceChangeListener = + Preference.OnPreferenceChangeListener { _, _ -> + AlertDialog.Builder(context) + .setTitle(R.string.setting_message_layout_dialog_title) + .setMessage(R.string.setting_message_layout_dialog_message) + .setPositiveButton( + getString(R.string.setting_message_layout_dialog_button1) + ) { _, _ -> + restartApp() + } + .setNegativeButton( + getString(R.string.setting_message_layout_dialog_button2), + null + ) + .show() + true + } + } + + private fun restartApp() { + val packageManager = requireContext().packageManager + val packageName = requireContext().packageName + val intent = packageManager.getLaunchIntentForPackage(packageName) + val componentName = intent!!.component + val mainIntent = Intent.makeRestartActivityTask(componentName) + startActivity(mainIntent) + Runtime.getRuntime().exit(0) + } + } +} diff --git a/app/src/main/java/com/github/gotify/settings/ThemeHelper.java b/app/src/main/java/com/github/gotify/settings/ThemeHelper.java deleted file mode 100644 index 58af750..0000000 --- a/app/src/main/java/com/github/gotify/settings/ThemeHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.github.gotify.settings; - -import android.content.Context; -import android.os.Build; -import androidx.appcompat.app.AppCompatDelegate; -import com.github.gotify.R; - -public final class ThemeHelper { - private ThemeHelper() {} - - public static void setTheme(Context context, String newTheme) { - AppCompatDelegate.setDefaultNightMode(ofKey(context, newTheme)); - } - - private static int ofKey(Context context, String newTheme) { - if (context.getString(R.string.theme_dark).equals(newTheme)) { - return AppCompatDelegate.MODE_NIGHT_YES; - } - if (context.getString(R.string.theme_light).equals(newTheme)) { - return AppCompatDelegate.MODE_NIGHT_NO; - } - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) { - return AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY; - } - return AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; - } -} diff --git a/app/src/main/java/com/github/gotify/settings/ThemeHelper.kt b/app/src/main/java/com/github/gotify/settings/ThemeHelper.kt new file mode 100644 index 0000000..e18c422 --- /dev/null +++ b/app/src/main/java/com/github/gotify/settings/ThemeHelper.kt @@ -0,0 +1,22 @@ +package com.github.gotify.settings + +import android.content.Context +import android.os.Build +import androidx.appcompat.app.AppCompatDelegate +import com.github.gotify.R + +object ThemeHelper { + fun setTheme(context: Context, newTheme: String) { + AppCompatDelegate.setDefaultNightMode(ofKey(context, newTheme)) + } + + private fun ofKey(context: Context, newTheme: String): Int { + return if (context.getString(R.string.theme_dark) == newTheme) { + AppCompatDelegate.MODE_NIGHT_YES + } else if (context.getString(R.string.theme_light) == newTheme) { + AppCompatDelegate.MODE_NIGHT_NO + } else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) { + AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY + } else AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM + } +} diff --git a/app/src/main/res/layout/settings_activity.xml b/app/src/main/res/layout/settings_activity.xml index caf07a7..20b859a 100644 --- a/app/src/main/res/layout/settings_activity.xml +++ b/app/src/main/res/layout/settings_activity.xml @@ -12,7 +12,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - @@ -24,6 +24,7 @@