From f3b15d505686d1b1a74d330f3c5109d7034c817c Mon Sep 17 00:00:00 2001 From: Rodion Date: Tue, 24 Nov 2020 22:16:13 +0300 Subject: [PATCH] Replace activity with a fragment for the settings screen --- .../src/main/AndroidManifest.xml | 7 -- .../main_page_profile/ProfileFragment.kt | 4 +- .../presentation/settings/SettingsActivity.kt | 97 ------------------- .../presentation/settings/SettingsFragment.kt | 91 +++++++++++++++++ .../settings/clear_dialog/ClearCacheDialog.kt | 34 +------ ...ity_settings.xml => fragment_settings.xml} | 27 ++++-- .../res/navigation/navigation_profile.xml | 30 ++++++ .../library/base/constants/ScreenLinks.kt | 9 -- 8 files changed, 145 insertions(+), 154 deletions(-) delete mode 100644 feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/SettingsActivity.kt create mode 100644 feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/SettingsFragment.kt rename feature_navigation/src/main/res/layout/{activity_settings.xml => fragment_settings.xml} (92%) diff --git a/feature_navigation/src/main/AndroidManifest.xml b/feature_navigation/src/main/AndroidManifest.xml index d010ff5..9da9788 100644 --- a/feature_navigation/src/main/AndroidManifest.xml +++ b/feature_navigation/src/main/AndroidManifest.xml @@ -24,13 +24,6 @@ android:screenOrientation="portrait" android:theme="@style/AppTheme.Transparent.NoActionBar.Dark" tools:ignore="LockedOrientationActivity" /> - - - diff --git a/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/main_page_profile/ProfileFragment.kt b/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/main_page_profile/ProfileFragment.kt index 3040cdb..cdb65ec 100644 --- a/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/main_page_profile/ProfileFragment.kt +++ b/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/main_page_profile/ProfileFragment.kt @@ -18,7 +18,7 @@ import com.majorik.moviebox.feature.navigation.domain.tmdbModels.account.Account import com.majorik.moviebox.feature.navigation.presentation.dialogs.LogoutDialog import com.majorik.moviebox.feature.navigation.presentation.main_page_profile.adapters.ProfileMoviesAdapter import com.majorik.moviebox.feature.navigation.presentation.main_page_profile.adapters.ProfileTVsAdapter -import com.majorik.moviebox.feature.navigation.presentation.settings.SettingsActivity +import com.majorik.moviebox.feature.navigation.presentation.settings.SettingsFragment import kotlinx.coroutines.flow.collectLatest import org.koin.androidx.viewmodel.ext.android.viewModel @@ -147,7 +147,7 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) { } viewBinding.btnSettings.setSafeOnClickListener { - context?.startActivityWithAnim(SettingsActivity::class.java) + findNavController().navigate(ProfileFragmentDirections.actionToSettings()) } } diff --git a/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/SettingsActivity.kt b/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/SettingsActivity.kt deleted file mode 100644 index 19ddd4f..0000000 --- a/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/SettingsActivity.kt +++ /dev/null @@ -1,97 +0,0 @@ -package com.majorik.moviebox.feature.navigation.presentation.settings - -import android.app.usage.StorageStatsManager -import android.content.Context -import android.content.pm.PackageStats -import android.os.Build -import android.os.Bundle -import android.os.Process -import android.os.storage.StorageManager -import android.text.format.Formatter -import android.view.View -import com.majorik.library.base.base.BaseSlidingActivity -import com.majorik.library.base.extensions.setSafeOnClickListener -import com.majorik.library.base.extensions.setWindowTransparency -import com.majorik.library.base.extensions.startActivityWithAnim -import com.majorik.library.base.extensions.updateMargin -import com.majorik.moviebox.feature.navigation.presentation.language.LanguageActivity -import com.majorik.moviebox.feature.navigation.presentation.settings.clear_dialog.ClearCacheDialog -import com.majorik.moviebox.feature.navigation.presentation.settings.clear_dialog.ClearDialogListener -import com.orhanobut.logger.Logger -import kotlinx.android.synthetic.main.activity_settings.* -import com.majorik.moviebox.feature.navigation.R - -class SettingsActivity : BaseSlidingActivity(), ClearDialogListener { - - override fun getRootView(): View = window.decorView.rootView - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_settings) - - setWindowTransparency(::updateMargins) - - calculateCache() - - setClickListeners() - setCurrentLanguage() - } - - private fun updateMargins(statusBarSize: Int, @Suppress("UNUSED_PARAMETER") navigationBarSize: Int) { - settings_toolbar.updateMargin(top = statusBarSize) - } - - override fun onSlidingStarted() {} - - override fun onSlidingFinished() {} - - override fun canSlideDown(): Boolean = true - - override fun onResume() { - super.onResume() - - settings_cache_size.text = Formatter.formatShortFileSize(this, calculateCache()) - } - - override fun onDialogDismiss() { - settings_cache_size.text = Formatter.formatShortFileSize(this, calculateCache()) - } - - private fun setClickListeners() { - btn_clear_cache.setSafeOnClickListener { - ClearCacheDialog.newInstance(settings_cache_size.text.toString()) - .show(supportFragmentManager, "clear_dialog") - } - - btn_change_lang.setSafeOnClickListener { - startActivityWithAnim(LanguageActivity::class.java) - } - } - - @OptIn(ExperimentalStdlibApi::class) - private fun setCurrentLanguage() { - val currentLanguage = getCurrentLanguage() - tv_current_language.text = currentLanguage.getDisplayName(currentLanguage).capitalize(currentLanguage) - } - - private fun calculateCache(): Long { - val cacheSize: Long - - if (Build.VERSION.SDK_INT >= 26) { - val ssm = getSystemService(Context.STORAGE_STATS_SERVICE) as StorageStatsManager - val user = Process.myUserHandle() - - val sm = ssm.queryStatsForPackage(StorageManager.UUID_DEFAULT, this.packageName, user) - - cacheSize = sm.cacheBytes - } else { - val p = PackageStats(packageName) - - cacheSize = p.cacheSize - } - - Logger.i("getCacheBytes ${Formatter.formatShortFileSize(this, cacheSize)}") - - return cacheSize - } -} diff --git a/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/SettingsFragment.kt b/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/SettingsFragment.kt new file mode 100644 index 0000000..0f52377 --- /dev/null +++ b/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/SettingsFragment.kt @@ -0,0 +1,91 @@ +package com.majorik.moviebox.feature.navigation.presentation.settings + +import android.app.usage.StorageStatsManager +import android.content.Context +import android.content.pm.PackageStats +import android.os.Build +import android.os.Bundle +import android.os.Process +import android.os.storage.StorageManager +import android.text.format.Formatter +import android.view.View +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController +import by.kirich1409.viewbindingdelegate.viewBinding +import com.akexorcist.localizationactivity.ui.LocalizationActivity +import com.majorik.library.base.extensions.getCurrentLocale +import com.majorik.library.base.extensions.setSafeOnClickListener +import com.majorik.library.base.extensions.updateMargin +import com.majorik.moviebox.feature.navigation.R +import com.majorik.moviebox.feature.navigation.databinding.FragmentSettingsBinding +import com.majorik.moviebox.feature.navigation.presentation.settings.clear_dialog.ClearCacheDialog +import com.majorik.moviebox.feature.navigation.presentation.settings.clear_dialog.ClearDialogListener +import com.orhanobut.logger.Logger + +class SettingsFragment : Fragment(R.layout.fragment_settings), ClearDialogListener { + + private val viewBinding: FragmentSettingsBinding by viewBinding() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + calculateCache() + + setClickListeners() + setCurrentLanguage() + } + + override fun onResume() { + super.onResume() + + viewBinding.settingsCacheSize.text = Formatter.formatShortFileSize(context, calculateCache()) + } + + override fun onDialogDismiss() { + viewBinding.settingsCacheSize.text = Formatter.formatShortFileSize(context, calculateCache()) + } + + private fun setClickListeners() { + viewBinding.btnClearCache.setSafeOnClickListener { + findNavController().navigate(SettingsFragmentDirections.actionToClearCache(viewBinding.settingsCacheSize.text.toString())) + } + + viewBinding.btnChangeLang.setSafeOnClickListener { +// startActivityWithAnim(LanguageActivity::class.java) + } + + viewBinding.btnBack.setOnClickListener { + findNavController().popBackStack() + } + } + + @OptIn(ExperimentalStdlibApi::class) + private fun setCurrentLanguage() { + val currentLanguage = (activity as? LocalizationActivity)?.getCurrentLanguage() ?: context?.getCurrentLocale() + viewBinding.tvCurrentLanguage.text = + currentLanguage?.getDisplayName(currentLanguage)?.capitalize(currentLanguage) ?: "" + } + + private fun calculateCache(): Long { + if (activity == null) return 0L + + val cacheSize: Long + + cacheSize = if (Build.VERSION.SDK_INT >= 26) { + val ssm = requireActivity().getSystemService(Context.STORAGE_STATS_SERVICE) as? StorageStatsManager + val user = Process.myUserHandle() + + val sm = ssm?.queryStatsForPackage(StorageManager.UUID_DEFAULT, requireActivity().packageName, user) + + sm?.cacheBytes ?: 0L + } else { + val p = PackageStats(requireActivity().packageName) + + p.cacheSize + } + + Logger.i("getCacheBytes ${Formatter.formatShortFileSize(context, cacheSize)}") + + return cacheSize + } +} diff --git a/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/clear_dialog/ClearCacheDialog.kt b/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/clear_dialog/ClearCacheDialog.kt index 2235a48..f0a9e32 100644 --- a/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/clear_dialog/ClearCacheDialog.kt +++ b/feature_navigation/src/main/java/com/majorik/moviebox/feature/navigation/presentation/settings/clear_dialog/ClearCacheDialog.kt @@ -10,29 +10,16 @@ import android.view.View import android.view.ViewGroup import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.DialogFragment +import androidx.navigation.fragment.navArgs import com.majorik.library.base.extensions.setSafeOnClickListener import com.majorik.library.base.utils.FontSpan import com.majorik.moviebox.feature.navigation.R import com.majorik.moviebox.R as AppResources import kotlinx.android.synthetic.main.dialog_clear_cache.* -class ClearCacheDialog : DialogFragment() { +class ClearCacheDialog : DialogFragment(R.layout.dialog_clear_cache) { - private var cacheSize: String = "" - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - cacheSize = arguments?.getString(CACHE_SIZE_ARG) ?: "" - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.dialog_clear_cache, container, false) - } + private val args: ClearCacheDialogArgs by navArgs() override fun onStart() { super.onStart() @@ -47,7 +34,7 @@ class ClearCacheDialog : DialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - cache_size.text = getString(R.string.navigation_cache_size_with_format, cacheSize) + cache_size.text = getString(R.string.navigation_cache_size_with_format, args.cacheSize ?: "") setSpannableCacheSizeText() btn_cancel.setOnClickListener { @@ -72,7 +59,7 @@ class ClearCacheDialog : DialogFragment() { AppResources.font.cc_montserrat_semibold ) ), - cache_size.text.length - cacheSize.length, + cache_size.text.length - args.cacheSize.length, cache_size.text.length, Spanned.SPAN_EXCLUSIVE_INCLUSIVE ) @@ -80,15 +67,4 @@ class ClearCacheDialog : DialogFragment() { } } } - - companion object { - const val CACHE_SIZE_ARG = "cache_size" - - fun newInstance(cacheSizeFormattedToString: String?) = - ClearCacheDialog().apply { - arguments = Bundle().apply { - putString(CACHE_SIZE_ARG, cacheSizeFormattedToString) - } - } - } } diff --git a/feature_navigation/src/main/res/layout/activity_settings.xml b/feature_navigation/src/main/res/layout/fragment_settings.xml similarity index 92% rename from feature_navigation/src/main/res/layout/activity_settings.xml rename to feature_navigation/src/main/res/layout/fragment_settings.xml index 6fdc652..24b1734 100644 --- a/feature_navigation/src/main/res/layout/activity_settings.xml +++ b/feature_navigation/src/main/res/layout/fragment_settings.xml @@ -6,31 +6,38 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorWhite" - tools:context="com.majorik.moviebox.feature.navigation.presentation.settings.SettingsActivity"> + tools:context="com.majorik.moviebox.feature.navigation.presentation.settings.SettingsFragment"> - + app:layout_constraintTop_toTopOf="parent"> - + + + + + + + + + + + + + + +