Implement incognito mode switching

This commit is contained in:
Koitharu
2022-07-21 17:26:58 +03:00
parent 300d365d8b
commit c158c4e18e
5 changed files with 43 additions and 20 deletions

View File

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

View File

@@ -13,6 +13,7 @@ import androidx.core.graphics.Insets
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.core.widget.TextViewCompat
import com.google.android.material.R as materialR
import com.google.android.material.color.MaterialColors
import org.koin.androidx.viewmodel.ext.android.viewModel
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.utils.FileSize
import org.koitharu.kotatsu.utils.ext.getThemeColor
import com.google.android.material.R as materialR
class ToolsFragment : BaseFragment<FragmentToolsBinding>(), CompoundButton.OnCheckedChangeListener, View.OnClickListener {
class ToolsFragment :
BaseFragment<FragmentToolsBinding>(),
CompoundButton.OnCheckedChangeListener,
View.OnClickListener {
private var updateChecker: AppUpdateChecker? = null
private val viewModel by viewModel<ToolsViewModel>()
@@ -43,8 +45,11 @@ class ToolsFragment : BaseFragment<FragmentToolsBinding>(), CompoundButton.OnChe
binding.buttonDownloads.setOnClickListener(this)
binding.cardUpdate.root.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)
}
@@ -56,7 +61,7 @@ class ToolsFragment : BaseFragment<FragmentToolsBinding>(), CompoundButton.OnChe
}
override fun onCheckedChanged(button: CompoundButton?, isChecked: Boolean) {
// TODO Incognito enabling logic
viewModel.toggleIncognitoMode(isChecked)
}
override fun onWindowInsetsChanged(insets: Insets) {
@@ -77,19 +82,19 @@ class ToolsFragment : BaseFragment<FragmentToolsBinding>(), CompoundButton.OnChe
val pattern = getString(R.string.memory_usage_pattern)
labelStorage.text = pattern.format(
FileSize.BYTES.format(root.context, usage.savedManga.bytes),
getString(R.string.saved_manga)
getString(R.string.saved_manga),
)
labelPagesCache.text = pattern.format(
FileSize.BYTES.format(root.context, usage.pagesCache.bytes),
getString(R.string.pages_cache)
getString(R.string.pages_cache),
)
labelOtherCache.text = pattern.format(
FileSize.BYTES.format(root.context, usage.otherCache.bytes),
getString(R.string.other_cache)
getString(R.string.other_cache),
)
labelAvailable.text = pattern.format(
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(labelPagesCache, ColorStateList.valueOf(pagesSegment.color))
@@ -115,4 +120,4 @@ class ToolsFragment : BaseFragment<FragmentToolsBinding>(), CompoundButton.OnChe
fun newInstance() = ToolsFragment()
}
}
}

View File

@@ -5,12 +5,15 @@ import androidx.lifecycle.liveData
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.Dispatchers
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.LocalStorageManager
import org.koitharu.kotatsu.settings.tools.model.StorageUsage
class ToolsViewModel(
private val storageManager: LocalStorageManager,
private val settings: AppSettings,
) : BaseViewModel() {
val storageUsage: LiveData<StorageUsage> = liveData(
@@ -19,6 +22,16 @@ class ToolsViewModel(
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 {
val pagesCacheSize = storageManager.computeCacheSize(CacheDir.PAGES)
val otherCacheSize = storageManager.computeCacheSize() - pagesCacheSize
@@ -29,16 +42,19 @@ class ToolsViewModel(
savedManga = StorageUsage.Item(
bytes = storageSize,
percent = (storageSize.toDouble() / totalBytes).toFloat(),
), pagesCache = StorageUsage.Item(
),
pagesCache = StorageUsage.Item(
bytes = pagesCacheSize,
percent = (pagesCacheSize.toDouble() / totalBytes).toFloat(),
), otherCache = StorageUsage.Item(
),
otherCache = StorageUsage.Item(
bytes = otherCacheSize,
percent = (otherCacheSize.toDouble() / totalBytes).toFloat(),
), available = StorageUsage.Item(
),
available = StorageUsage.Item(
bytes = availableSpace,
percent = (availableSpace.toDouble() / totalBytes).toFloat(),
)
),
)
}
}
}

View File

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

View File

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