/* * Copyright (c) 2020 Hemanth Savarla. * * Licensed under the GNU General Public License v3 * * This is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * */ package code.name.monkey.retromusic.activities import android.content.Intent import android.os.Bundle import android.view.MenuItem import androidx.navigation.NavController import androidx.navigation.NavDestination import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.base.AbsThemeActivity import code.name.monkey.retromusic.appshortcuts.DynamicShortcutManager import code.name.monkey.retromusic.databinding.ActivitySettingsBinding import code.name.monkey.retromusic.extensions.* import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.color.ColorCallback class SettingsActivity : AbsThemeActivity(), ColorCallback, OnThemeChangedListener { private lateinit var binding: ActivitySettingsBinding override fun onCreate(savedInstanceState: Bundle?) { setDrawUnderStatusBar() val mSavedInstanceState = extra(TAG).value ?: savedInstanceState super.onCreate(mSavedInstanceState) setLightStatusBarAuto(surfaceColor()) binding = ActivitySettingsBinding.inflate(layoutInflater) setContentView(binding.root) setupToolbar() } private fun setupToolbar() { applyToolbar(binding.toolbar) val navController: NavController = findNavController(R.id.contentFrame) navController.addOnDestinationChangedListener { _, _, _ -> binding.collapsingToolbarLayout.title = navController.currentDestination?.let { getStringFromDestination(it) } } } private fun getStringFromDestination(currentDestination: NavDestination): String { val idRes = when (currentDestination.id) { R.id.mainSettingsFragment -> R.string.action_settings R.id.audioSettings -> R.string.pref_header_audio R.id.imageSettingFragment -> R.string.pref_header_images R.id.notificationSettingsFragment -> R.string.notification R.id.nowPlayingSettingsFragment -> R.string.now_playing R.id.otherSettingsFragment -> R.string.others R.id.personalizeSettingsFragment -> R.string.personalize R.id.themeSettingsFragment -> R.string.general_settings_title R.id.aboutActivity -> R.string.action_about R.id.backup_fragment -> R.string.backup_restore_title else -> R.id.action_settings } return getString(idRes) } override fun onSupportNavigateUp(): Boolean { return findNavController(R.id.contentFrame).navigateUp() || super.onSupportNavigateUp() } override fun onOptionsItemSelected(item: MenuItem): Boolean { if (item.itemId == android.R.id.home) { onBackPressed() } return super.onOptionsItemSelected(item) } override fun invoke(dialog: MaterialDialog, color: Int) { ThemeStore.editTheme(this).accentColor(color).commit() if (VersionUtils.hasNougatMR()) DynamicShortcutManager(this).updateDynamicShortcuts() restart() } override fun onThemeValuesChanged() { restart() } private fun restart() { val savedInstanceState = Bundle().apply { onSaveInstanceState(this) } finish() val intent = Intent(this, this::class.java).putExtra(TAG, savedInstanceState) startActivity(intent) overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out) } companion object { val TAG: String = SettingsActivity::class.java.simpleName } } interface OnThemeChangedListener { fun onThemeValuesChanged() }