Implement incognito mode switching
This commit is contained in:
@@ -35,5 +35,5 @@ val settingsModule
|
||||
viewModel { OnboardViewModel(get()) }
|
||||
viewModel { SourcesSettingsViewModel(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.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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
)
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user