diff options
| author | Tanuj <tanbook@Tanujs-MacBook-Pro.local> | 2021-09-20 16:46:38 +0530 |
|---|---|---|
| committer | Tanuj <tanbook@Tanujs-MacBook-Pro.local> | 2021-09-20 16:46:38 +0530 |
| commit | 2e110a06599aeb767bc76ab2afee44b71a229520 (patch) | |
| tree | 45559879d23af0dd164a4e123de565329ac61942 /app/src/main/java | |
| parent | 974b1792c7527f5f795d95bffa20c73eb1aec853 (diff) | |
| download | SidePhOnelauncher-2e110a06599aeb767bc76ab2afee44b71a229520.tar.gz SidePhOnelauncher-2e110a06599aeb767bc76ab2afee44b71a229520.tar.bz2 SidePhOnelauncher-2e110a06599aeb767bc76ab2afee44b71a229520.zip | |
Added system default theme mode
Diffstat (limited to 'app/src/main/java')
8 files changed, 81 insertions, 51 deletions
diff --git a/app/src/main/java/app/olauncher/MainActivity.kt b/app/src/main/java/app/olauncher/MainActivity.kt index 2acbd57..457e12f 100644 --- a/app/src/main/java/app/olauncher/MainActivity.kt +++ b/app/src/main/java/app/olauncher/MainActivity.kt @@ -3,24 +3,28 @@ package app.olauncher import android.app.Activity import android.content.Intent import android.content.pm.ActivityInfo +import android.content.res.Configuration import android.os.Build import android.os.Bundle import android.provider.Settings import android.view.View import android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.app.AppCompatDelegate import androidx.lifecycle.ViewModelProvider import androidx.navigation.NavController import androidx.navigation.Navigation import app.olauncher.data.Constants import app.olauncher.data.Prefs +import app.olauncher.helper.isDarkThemeOn import app.olauncher.helper.isTablet +import app.olauncher.helper.setPlainWallpaper import app.olauncher.helper.showToastLong import kotlinx.android.synthetic.main.activity_main.* - class MainActivity : AppCompatActivity() { + private lateinit var prefs: Prefs private lateinit var navController: NavController override fun onBackPressed() { @@ -29,17 +33,13 @@ class MainActivity : AppCompatActivity() { } override fun onCreate(savedInstanceState: Bundle?) { - val prefs = Prefs(this) - -// when (prefs.themeColor) { -// Constants.THEME_MODE_LIGHT -> setTheme(R.style.LightTheme) -// else -> setTheme(R.style.DarkTheme) -// } - super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + prefs = Prefs(this) navController = Navigation.findNavController(this, R.id.nav_host_fragment) val viewModel = ViewModelProvider(this).get(MainViewModel::class.java) + + setAppTheme(prefs.appTheme) if (prefs.firstOpen) { viewModel.firstOpen(true) prefs.firstOpen = false @@ -71,6 +71,13 @@ class MainActivity : AppCompatActivity() { super.onNewIntent(intent) } + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + if (prefs.dailyWallpaper) + changeBackground() + recreate() + } + private fun initObservers(viewModel: MainViewModel) { viewModel.launcherResetFailed.observe(this, { openLauncherChooser(it) @@ -78,6 +85,9 @@ class MainActivity : AppCompatActivity() { viewModel.showMessageDialog.observe(this, { showMessage(it) }) + viewModel.appSetTheme.observe(this, { + setAppTheme(it) + }) } private fun setupOrientation() { @@ -94,6 +104,20 @@ class MainActivity : AppCompatActivity() { navController.popBackStack(R.id.mainFragment, false) } + private fun setAppTheme(theme: Int) { + when (theme) { + Constants.THEME_MODE_LIGHT -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + Constants.THEME_MODE_DARK -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) + else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) + } + } + + private fun changeBackground() { + if (this.isDarkThemeOn()) + setPlainWallpaper(this, android.R.color.black) + else setPlainWallpaper(this, android.R.color.white) + } + private fun openLauncherChooser(resetFailed: Boolean) { if (resetFailed) { val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) @@ -119,7 +143,7 @@ class MainActivity : AppCompatActivity() { when (requestCode) { Constants.REQUEST_CODE_ENABLE_ADMIN -> { if (resultCode == Activity.RESULT_OK) { - Prefs(this).lockModeOn = true + prefs.lockModeOn = true if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) showMessage(getString(R.string.double_tap_lock_is_enabled_message)) else diff --git a/app/src/main/java/app/olauncher/MainViewModel.kt b/app/src/main/java/app/olauncher/MainViewModel.kt index f4b7266..9128cdd 100644 --- a/app/src/main/java/app/olauncher/MainViewModel.kt +++ b/app/src/main/java/app/olauncher/MainViewModel.kt @@ -30,6 +30,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { val launcherResetFailed = MutableLiveData<Boolean>() val homeAppAlignment = MutableLiveData<Int>() val showMessageDialog = MutableLiveData<String>() + val appSetTheme = MutableLiveData<Int>() fun selectedApp(appModel: AppModel, flag: Int) { when (flag) { @@ -199,4 +200,11 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { fun showMessageDialog(message: String) { showMessageDialog.postValue(message) } + + fun appSetTheme(theme: Int) { + prefs.appTheme = theme + appSetTheme.value = theme + if (prefs.dailyWallpaper) + setWallpaperWorker() + } }
\ No newline at end of file diff --git a/app/src/main/java/app/olauncher/data/Constants.kt b/app/src/main/java/app/olauncher/data/Constants.kt index 9f50c49..f8ebed7 100644 --- a/app/src/main/java/app/olauncher/data/Constants.kt +++ b/app/src/main/java/app/olauncher/data/Constants.kt @@ -6,6 +6,7 @@ object Constants { const val THEME_MODE_DARK = 0 const val THEME_MODE_LIGHT = 1 + const val THEME_MODE_SYSTEM = 2 const val FLAG_LAUNCH_APP = 100 const val FLAG_HIDDEN_APPS = 101 diff --git a/app/src/main/java/app/olauncher/data/Prefs.kt b/app/src/main/java/app/olauncher/data/Prefs.kt index 35802ec..8f4e394 100644 --- a/app/src/main/java/app/olauncher/data/Prefs.kt +++ b/app/src/main/java/app/olauncher/data/Prefs.kt @@ -122,7 +122,7 @@ class Prefs(context: Context) { get() = prefs.getBoolean(SWIPE_RIGHT_ENABLED, true) set(value) = prefs.edit().putBoolean(SWIPE_RIGHT_ENABLED, value).apply() - var themeColor: Int + var appTheme: Int get() = prefs.getInt(THEME_COLOR, Constants.THEME_MODE_DARK) set(value) = prefs.edit().putInt(THEME_COLOR, value).apply() diff --git a/app/src/main/java/app/olauncher/helper/Utils.kt b/app/src/main/java/app/olauncher/helper/Utils.kt index 1e1bf35..7d60cfe 100644 --- a/app/src/main/java/app/olauncher/helper/Utils.kt +++ b/app/src/main/java/app/olauncher/helper/Utils.kt @@ -6,6 +6,8 @@ import android.content.Context import android.content.Intent import android.content.pm.LauncherApps import android.content.pm.PackageManager +import android.content.res.Configuration +import android.content.res.Configuration.UI_MODE_NIGHT_YES import android.graphics.* import android.net.Uri import android.os.UserHandle @@ -387,6 +389,11 @@ fun isTablet(context: Context): Boolean { return false } +fun Context.isDarkThemeOn(): Boolean { + return resources.configuration.uiMode and + Configuration.UI_MODE_NIGHT_MASK == UI_MODE_NIGHT_YES +} + @ColorInt fun Context.getColorFromAttr( @AttrRes attrColor: Int, diff --git a/app/src/main/java/app/olauncher/helper/WallpaperWorker.kt b/app/src/main/java/app/olauncher/helper/WallpaperWorker.kt index b22e6eb..819af5e 100644 --- a/app/src/main/java/app/olauncher/helper/WallpaperWorker.kt +++ b/app/src/main/java/app/olauncher/helper/WallpaperWorker.kt @@ -12,21 +12,15 @@ import java.util.* class WallpaperWorker(appContext: Context, workerParams: WorkerParameters) : CoroutineWorker(appContext, workerParams) { override suspend fun doWork(): Result = coroutineScope { - val date: String = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date()) - if (date == Prefs(applicationContext).wallpaperUpdatedDay) Result.success() - - var wallType = Constants.WALL_TYPE_DARK - if (Prefs(applicationContext).themeColor == Constants.THEME_MODE_LIGHT) - wallType = Constants.WALL_TYPE_LIGHT - + if (date == Prefs(applicationContext).wallpaperUpdatedDay) + Result.success() + val wallType = checkWallpaperType() val wallpaperUrl = getTodaysWallpaper(wallType) - val success = setWallpaper( applicationContext, wallpaperUrl ) - if (success) { updateWallpaperPrefs(wallpaperUrl, date) Result.success() @@ -37,4 +31,15 @@ class WallpaperWorker(appContext: Context, workerParams: WorkerParameters) : Cor Prefs(applicationContext).dailyWallpaperUrl = url Prefs(applicationContext).wallpaperUpdatedDay = date } + + private fun checkWallpaperType(): String { + return when (Prefs(applicationContext).appTheme) { + Constants.THEME_MODE_DARK -> Constants.WALL_TYPE_DARK + Constants.THEME_MODE_LIGHT -> Constants.WALL_TYPE_LIGHT + else -> if (applicationContext.isDarkThemeOn()) + Constants.WALL_TYPE_DARK + else + Constants.WALL_TYPE_LIGHT + } + } } diff --git a/app/src/main/java/app/olauncher/ui/HomeFragment.kt b/app/src/main/java/app/olauncher/ui/HomeFragment.kt index 52f34e5..ebdb476 100644 --- a/app/src/main/java/app/olauncher/ui/HomeFragment.kt +++ b/app/src/main/java/app/olauncher/ui/HomeFragment.kt @@ -314,7 +314,7 @@ class HomeFragment : Fragment(), View.OnClickListener, View.OnLongClickListener requireActivity().window.insetsController?.show(WindowInsets.Type.statusBars()) else @Suppress("DEPRECATION", "InlinedApi") - if (prefs.themeColor == Constants.THEME_MODE_DARK) + if (prefs.appTheme == Constants.THEME_MODE_DARK) requireActivity().window.decorView.apply { systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN } diff --git a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt index 1cc09b7..93ea18a 100644 --- a/app/src/main/java/app/olauncher/ui/SettingsFragment.kt +++ b/app/src/main/java/app/olauncher/ui/SettingsFragment.kt @@ -9,7 +9,6 @@ import android.os.Build import android.os.Bundle import android.provider.Settings import android.view.* -import androidx.appcompat.app.AppCompatDelegate import androidx.core.os.bundleOf import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider @@ -54,7 +53,7 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe populateKeyboardText() populateLockSettings() populateWallpaperText() - populateThemeColorText() + populateAppThemeText() populateAlignment() populateStatusBar() populateDateTime() @@ -67,7 +66,7 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe override fun onClick(view: View) { appsNumSelectLayout.visibility = View.GONE alignmentSelectLayout.visibility = View.GONE - themeColorSelectLayout.visibility = View.GONE + appThemeSelectLayout.visibility = View.GONE when (view.id) { R.id.olauncherHiddenApps -> showHiddenApps() R.id.appInfo -> openAppInfo(requireContext(), android.os.Process.myUserHandle(), BuildConfig.APPLICATION_ID) @@ -83,7 +82,8 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe R.id.alignmentRight -> viewModel.updateHomeAlignment(Gravity.END) R.id.statusBar -> toggleStatusBar() R.id.dateTime -> toggleDateTime() - R.id.themeColor -> themeColorSelectLayout.visibility = View.VISIBLE + R.id.appThemeText -> appThemeSelectLayout.visibility = View.VISIBLE + R.id.themeSystem -> updateTheme(Constants.THEME_MODE_SYSTEM) R.id.themeLight -> updateTheme(Constants.THEME_MODE_LIGHT) R.id.themeDark -> updateTheme(Constants.THEME_MODE_DARK) @@ -144,9 +144,10 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe dateTime.setOnClickListener(this) swipeLeftApp.setOnClickListener(this) swipeRightApp.setOnClickListener(this) - themeColor.setOnClickListener(this) + appThemeText.setOnClickListener(this) themeLight.setOnClickListener(this) themeDark.setOnClickListener(this) + themeSystem.setOnClickListener(this) about.setOnClickListener(this) share.setOnClickListener(this) @@ -243,7 +244,7 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe requireActivity().window.insetsController?.show(WindowInsets.Type.statusBars()) else @Suppress("DEPRECATION", "InlinedApi") - if (prefs.themeColor == Constants.THEME_MODE_DARK) + if (prefs.appTheme == Constants.THEME_MODE_DARK) requireActivity().window.decorView.apply { systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN } @@ -353,33 +354,17 @@ class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongClickListe populateKeyboardText() } - private fun updateTheme(themeColor: Int) { - if (prefs.themeColor == themeColor) return - prefs.themeColor = themeColor - populateThemeColorText() - when (prefs.themeColor) { - Constants.THEME_MODE_DARK -> { - if (prefs.dailyWallpaper) { - setPlainWallpaper(requireContext(), android.R.color.black) - viewModel.setWallpaperWorker() - } - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) - } - else -> { - if (prefs.dailyWallpaper) { - setPlainWallpaper(requireContext(), android.R.color.white) - viewModel.setWallpaperWorker() - } - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) - } - } - requireActivity().recreate() + private fun updateTheme(appTheme: Int) { + if (prefs.appTheme == appTheme) return + populateAppThemeText(appTheme) + viewModel.appSetTheme(appTheme) } - private fun populateThemeColorText() { - when (prefs.themeColor) { - Constants.THEME_MODE_DARK -> themeColor.text = getString(R.string.dark) - else -> themeColor.text = getString(R.string.light) + private fun populateAppThemeText(appTheme: Int = prefs.appTheme) { + when (appTheme) { + Constants.THEME_MODE_DARK -> appThemeText.text = getString(R.string.dark) + Constants.THEME_MODE_LIGHT -> appThemeText.text = getString(R.string.light) + else -> appThemeText.text = getString(R.string.system_default) } } |
