Implement incognito mode switching

pull/189/head
Koitharu 4 years ago
parent 300d365d8b
commit c158c4e18e
No known key found for this signature in database
GPG Key ID: 8E861F8CE6E7CE27

@ -35,5 +35,5 @@ val settingsModule
viewModel { OnboardViewModel(get()) } viewModel { OnboardViewModel(get()) }
viewModel { SourcesSettingsViewModel(get()) } viewModel { SourcesSettingsViewModel(get()) }
viewModel { NewSourcesViewModel(get()) } viewModel { NewSourcesViewModel(get()) }
viewModel { ToolsViewModel(get()) } viewModel { ToolsViewModel(get(), get()) }
} }

@ -13,6 +13,7 @@ import androidx.core.graphics.Insets
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.core.widget.TextViewCompat import androidx.core.widget.TextViewCompat
import com.google.android.material.R as materialR
import com.google.android.material.color.MaterialColors import com.google.android.material.color.MaterialColors
import org.koin.androidx.viewmodel.ext.android.viewModel import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
@ -25,10 +26,11 @@ import org.koitharu.kotatsu.settings.SettingsActivity
import org.koitharu.kotatsu.settings.tools.model.StorageUsage import org.koitharu.kotatsu.settings.tools.model.StorageUsage
import org.koitharu.kotatsu.utils.FileSize import org.koitharu.kotatsu.utils.FileSize
import org.koitharu.kotatsu.utils.ext.getThemeColor import org.koitharu.kotatsu.utils.ext.getThemeColor
import com.google.android.material.R as materialR
class ToolsFragment :
class ToolsFragment : BaseFragment<FragmentToolsBinding>(), CompoundButton.OnCheckedChangeListener, View.OnClickListener { BaseFragment<FragmentToolsBinding>(),
CompoundButton.OnCheckedChangeListener,
View.OnClickListener {
private var updateChecker: AppUpdateChecker? = null private var updateChecker: AppUpdateChecker? = null
private val viewModel by viewModel<ToolsViewModel>() private val viewModel by viewModel<ToolsViewModel>()
@ -43,8 +45,11 @@ class ToolsFragment : BaseFragment<FragmentToolsBinding>(), CompoundButton.OnChe
binding.buttonDownloads.setOnClickListener(this) binding.buttonDownloads.setOnClickListener(this)
binding.cardUpdate.root.setOnClickListener(this) binding.cardUpdate.root.setOnClickListener(this)
binding.cardUpdate.buttonDownload.setOnClickListener(this) binding.cardUpdate.buttonDownload.setOnClickListener(this)
binding.incognito.setOnCheckedChangeListener(this) binding.switchIncognito.setOnCheckedChangeListener(this)
viewModel.isIncognitoModeEnabled.observe(viewLifecycleOwner) {
binding.switchIncognito.isChecked = it
}
viewModel.storageUsage.observe(viewLifecycleOwner, ::onStorageUsageChanged) viewModel.storageUsage.observe(viewLifecycleOwner, ::onStorageUsageChanged)
} }
@ -56,7 +61,7 @@ class ToolsFragment : BaseFragment<FragmentToolsBinding>(), CompoundButton.OnChe
} }
override fun onCheckedChanged(button: CompoundButton?, isChecked: Boolean) { override fun onCheckedChanged(button: CompoundButton?, isChecked: Boolean) {
// TODO Incognito enabling logic viewModel.toggleIncognitoMode(isChecked)
} }
override fun onWindowInsetsChanged(insets: Insets) { override fun onWindowInsetsChanged(insets: Insets) {
@ -77,19 +82,19 @@ class ToolsFragment : BaseFragment<FragmentToolsBinding>(), CompoundButton.OnChe
val pattern = getString(R.string.memory_usage_pattern) val pattern = getString(R.string.memory_usage_pattern)
labelStorage.text = pattern.format( labelStorage.text = pattern.format(
FileSize.BYTES.format(root.context, usage.savedManga.bytes), FileSize.BYTES.format(root.context, usage.savedManga.bytes),
getString(R.string.saved_manga) getString(R.string.saved_manga),
) )
labelPagesCache.text = pattern.format( labelPagesCache.text = pattern.format(
FileSize.BYTES.format(root.context, usage.pagesCache.bytes), FileSize.BYTES.format(root.context, usage.pagesCache.bytes),
getString(R.string.pages_cache) getString(R.string.pages_cache),
) )
labelOtherCache.text = pattern.format( labelOtherCache.text = pattern.format(
FileSize.BYTES.format(root.context, usage.otherCache.bytes), FileSize.BYTES.format(root.context, usage.otherCache.bytes),
getString(R.string.other_cache) getString(R.string.other_cache),
) )
labelAvailable.text = pattern.format( labelAvailable.text = pattern.format(
FileSize.BYTES.format(root.context, usage.available.bytes), FileSize.BYTES.format(root.context, usage.available.bytes),
getString(R.string.available) getString(R.string.available),
) )
TextViewCompat.setCompoundDrawableTintList(labelStorage, ColorStateList.valueOf(storageSegment.color)) TextViewCompat.setCompoundDrawableTintList(labelStorage, ColorStateList.valueOf(storageSegment.color))
TextViewCompat.setCompoundDrawableTintList(labelPagesCache, ColorStateList.valueOf(pagesSegment.color)) TextViewCompat.setCompoundDrawableTintList(labelPagesCache, ColorStateList.valueOf(pagesSegment.color))

@ -5,12 +5,15 @@ import androidx.lifecycle.liveData
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import org.koitharu.kotatsu.base.ui.BaseViewModel import org.koitharu.kotatsu.base.ui.BaseViewModel
import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.prefs.observeAsLiveData
import org.koitharu.kotatsu.local.data.CacheDir import org.koitharu.kotatsu.local.data.CacheDir
import org.koitharu.kotatsu.local.data.LocalStorageManager import org.koitharu.kotatsu.local.data.LocalStorageManager
import org.koitharu.kotatsu.settings.tools.model.StorageUsage import org.koitharu.kotatsu.settings.tools.model.StorageUsage
class ToolsViewModel( class ToolsViewModel(
private val storageManager: LocalStorageManager, private val storageManager: LocalStorageManager,
private val settings: AppSettings,
) : BaseViewModel() { ) : BaseViewModel() {
val storageUsage: LiveData<StorageUsage> = liveData( val storageUsage: LiveData<StorageUsage> = liveData(
@ -19,6 +22,16 @@ class ToolsViewModel(
emit(collectStorageUsage()) emit(collectStorageUsage())
} }
val isIncognitoModeEnabled = settings.observeAsLiveData(
context = viewModelScope.coroutineContext + Dispatchers.Default,
key = AppSettings.KEY_INCOGNITO_MODE,
valueProducer = { isIncognitoModeEnabled },
)
fun toggleIncognitoMode(isEnabled: Boolean) {
settings.isIncognitoModeEnabled = isEnabled
}
private suspend fun collectStorageUsage(): StorageUsage { private suspend fun collectStorageUsage(): StorageUsage {
val pagesCacheSize = storageManager.computeCacheSize(CacheDir.PAGES) val pagesCacheSize = storageManager.computeCacheSize(CacheDir.PAGES)
val otherCacheSize = storageManager.computeCacheSize() - pagesCacheSize val otherCacheSize = storageManager.computeCacheSize() - pagesCacheSize
@ -29,16 +42,19 @@ class ToolsViewModel(
savedManga = StorageUsage.Item( savedManga = StorageUsage.Item(
bytes = storageSize, bytes = storageSize,
percent = (storageSize.toDouble() / totalBytes).toFloat(), percent = (storageSize.toDouble() / totalBytes).toFloat(),
), pagesCache = StorageUsage.Item( ),
pagesCache = StorageUsage.Item(
bytes = pagesCacheSize, bytes = pagesCacheSize,
percent = (pagesCacheSize.toDouble() / totalBytes).toFloat(), percent = (pagesCacheSize.toDouble() / totalBytes).toFloat(),
), otherCache = StorageUsage.Item( ),
otherCache = StorageUsage.Item(
bytes = otherCacheSize, bytes = otherCacheSize,
percent = (otherCacheSize.toDouble() / totalBytes).toFloat(), percent = (otherCacheSize.toDouble() / totalBytes).toFloat(),
), available = StorageUsage.Item( ),
available = StorageUsage.Item(
bytes = availableSpace, bytes = availableSpace,
percent = (availableSpace.toDouble() / totalBytes).toFloat(), percent = (availableSpace.toDouble() / totalBytes).toFloat(),
) ),
) )
} }
} }

@ -39,16 +39,17 @@
android:layout_marginVertical="@dimen/margin_small" /> android:layout_marginVertical="@dimen/margin_small" />
<com.google.android.material.materialswitch.MaterialSwitch <com.google.android.material.materialswitch.MaterialSwitch
android:id="@+id/incognito" android:id="@+id/switch_incognito"
style="?listItemTextViewStyle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?android:listPreferredItemHeightSmall" android:layout_height="?android:listPreferredItemHeightSmall"
android:drawableStart="@drawable/ic_incognito" android:drawableStart="@drawable/ic_incognito"
android:drawablePadding="?android:listPreferredItemPaddingStart" android:drawablePadding="?android:listPreferredItemPaddingStart"
android:paddingStart="?android:listPreferredItemPaddingStart" android:paddingStart="?android:listPreferredItemPaddingStart"
android:paddingEnd="?android:listPreferredItemPaddingEnd" android:paddingEnd="?android:listPreferredItemPaddingEnd"
android:text="Incognito mode" android:text="@string/incognito_mode"
android:textAppearance="?attr/textAppearanceButton" android:textAppearance="?attr/textAppearanceButton"
android:textColor="?attr/colorControlNormal"/> android:textColor="?attr/colorControlNormal" />
<org.koitharu.kotatsu.base.ui.widgets.ListItemTextView <org.koitharu.kotatsu.base.ui.widgets.ListItemTextView
android:id="@+id/button_downloads" android:id="@+id/button_downloads"

@ -358,4 +358,5 @@
<string name="removed_from_s">Removed from \"%s\"</string> <string name="removed_from_s">Removed from \"%s\"</string>
<string name="options">Options</string> <string name="options">Options</string>
<string name="not_found_404">Content not found or removed</string> <string name="not_found_404">Content not found or removed</string>
<string name="incognito_mode">Incognito mode</string>
</resources> </resources>

Loading…
Cancel
Save