Skip to content

Commit

Permalink
Replace activity with a fragment for the settings screen
Browse files Browse the repository at this point in the history
  • Loading branch information
majorkik committed Nov 24, 2020
1 parent 29d7c08 commit f3b15d5
Show file tree
Hide file tree
Showing 8 changed files with 145 additions and 154 deletions.
7 changes: 0 additions & 7 deletions feature_navigation/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,6 @@
android:screenOrientation="portrait"
android:theme="@style/AppTheme.Transparent.NoActionBar.Dark"
tools:ignore="LockedOrientationActivity" />

<activity
android:name=".presentation.settings.SettingsActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.Transparent.NoActionBar.Dark"
tools:ignore="LockedOrientationActivity" />

</application>
</manifest>

Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -147,7 +147,7 @@ class ProfileFragment : Fragment(R.layout.fragment_profile) {
}

viewBinding.btnSettings.setSafeOnClickListener {
context?.startActivityWithAnim(SettingsActivity::class.java)
findNavController().navigate(ProfileFragmentDirections.actionToSettings())
}
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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 {
Expand All @@ -72,23 +59,12 @@ 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
)
cache_size.text = this
}
}
}

companion object {
const val CACHE_SIZE_ARG = "cache_size"

fun newInstance(cacheSizeFormattedToString: String?) =
ClearCacheDialog().apply {
arguments = Bundle().apply {
putString(CACHE_SIZE_ARG, cacheSizeFormattedToString)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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">

<Toolbar
<FrameLayout
android:id="@+id/settings_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:navigationIcon="@drawable/ic_arrow_down"
android:layout_height="56dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:theme="@style/AppTheme.AppBarOverlay">
app:layout_constraintTop_toTopOf="parent">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="56dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginHorizontal="56dp"
android:fontFamily="@font/rubik_one_regular"
android:gravity="center"
android:text="@string/navigation_settings"
android:textAllCaps="true"
android:textColor="@color/mine_shaft"
android:textSize="18sp" />
</Toolbar>

<ImageButton
android:id="@+id/btn_back"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_margin="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/ic_arrow_down"
android:tint="@color/mine_shaft" />
</FrameLayout>

<TextView
android:id="@+id/textView2"
Expand Down
30 changes: 30 additions & 0 deletions feature_navigation/src/main/res/navigation/navigation_profile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,38 @@
app:argType="integer"
app:nullable="false" />
</action>

<action
android:id="@+id/action_to_settings"
app:destination="@+id/settings"
app:enterAnim="@anim/fragment_enter_slide_up"
app:exitAnim="@anim/fade_none"
app:popEnterAnim="@anim/fade_none"
app:popExitAnim="@anim/fragment_exit_slide_down" />
</fragment>

<fragment
android:id="@+id/settings"
android:name="com.majorik.moviebox.feature.navigation.presentation.settings.SettingsFragment"
tools:layout="@layout/fragment_settings">

<action
android:id="@+id/action_to_clear_cache"
app:destination="@+id/clear_cache_dialog" />
</fragment>

<dialog
android:id="@+id/clear_cache_dialog"
android:name="com.majorik.moviebox.feature.navigation.presentation.settings.clear_dialog.ClearCacheDialog"
tools:layout="@layout/dialog_clear_cache">

<argument
android:name="cache_size"
android:defaultValue=""
app:argType="string"
app:nullable="false" />
</dialog>

<include-dynamic
android:id="@+id/nav_movie_details"
app:graphPackage="com.majorik.moviebox.feature_details"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,10 @@ object ScreenLinks {
const val authorization = "$PACKAGE_NAME.feature.auth.presentation.ui.authorization.AuthorizationActivity"

// Navigation module
const val movieCollection = "$PACKAGE_NAME.feature.collections.presentation.movieTabCollections.MovieCollectionsActivity"
const val tvCollection = "$PACKAGE_NAME.feature.collections.presentation.tvTabCollections.TVCollectionsActivity"
const val genresActivity = "$PACKAGE_NAME.feature.collections.presentation.genres.GenresActivity"
const val searchableActivity = "$PACKAGE_NAME.feature.search.presentation.ui.SearchableActivity"

// Search module

const val discoverActivity = "$PACKAGE_NAME.feature.search.presentation.ui.discover.DiscoverActivity"

/**
* Fragments
*/

// Search discover filters
const val discoverFiltersDialog = "$PACKAGE_NAME.feature.search.presentation.ui.filters.DiscoverFiltersBottomSheetFragment"
}

0 comments on commit f3b15d5

Please sign in to comment.