Skip to content

Commit

Permalink
#378 enable all and disable all menu buttons now affect fingerprint g…
Browse files Browse the repository at this point in the history
…estures
  • Loading branch information
sds100 committed Nov 17, 2020
1 parent 2e6af4c commit d3e4e55
Show file tree
Hide file tree
Showing 9 changed files with 84 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ object ServiceLocator {
val fingerprintGestureRepository = fingerprintGestureRepository
?: FingerprintGestureRepository(providePreferenceDataStore(context))

this.fingerprintGestureRepository = fingerprintGestureRepository

return fingerprintGestureRepository
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import io.github.sds100.keymapper.util.str
* Created by sds100 on 20/02/2020.
*/

@Suppress("EXPERIMENTAL_API_USAGE")
class DefaultPreferenceDataStore(ctx: Context) : IPreferenceDataStore {
private val mCtx = ctx.applicationContext

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import io.github.sds100.keymapper.data.db.dao.KeyMapDao
import io.github.sds100.keymapper.data.model.KeyMap
import io.github.sds100.keymapper.data.usecase.BackupRestoreUseCase
import io.github.sds100.keymapper.data.usecase.ConfigKeymapUseCase
import io.github.sds100.keymapper.data.usecase.GlobalKeymapUseCase
import io.github.sds100.keymapper.data.usecase.KeymapListUseCase
import io.github.sds100.keymapper.data.usecase.*
import io.github.sds100.keymapper.util.Event
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
Expand All @@ -16,7 +13,7 @@ import kotlinx.coroutines.withContext
* Created by sds100 on 26/01/2020.
*/
class DefaultKeymapRepository internal constructor(private val mKeymapDao: KeyMapDao
) : GlobalKeymapUseCase, KeymapListUseCase, ConfigKeymapUseCase, BackupRestoreUseCase {
) : GlobalKeymapUseCase, KeymapListUseCase, ConfigKeymapUseCase, BackupRestoreUseCase, MenuKeymapUseCase {

override val requestBackup = MutableLiveData<Event<List<KeyMap>>>()
override val keymapList: LiveData<List<KeyMap>> = mKeymapDao.observeAll()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@ import io.github.sds100.keymapper.util.FingerprintGestureUtils
/**
* Created by sds100 on 17/11/20.
*/
class FingerprintGestureRepository
constructor(iPreferenceDataStore: IPreferenceDataStore) : IPreferenceDataStore by iPreferenceDataStore {
class FingerprintGestureRepository constructor(iPreferenceDataStore: IPreferenceDataStore
) : IPreferenceDataStore by iPreferenceDataStore {

private val mGson = GsonBuilder()
.registerTypeAdapter(Action.DESERIALIZER)
.registerTypeAdapter(Extra.DESERIALIZER).create()

fun editFingerprintMap(
fun edit(
gestureId: String,
block: (old: FingerprintGestureMap) -> FingerprintGestureMap
) {
val fingerprintGestureMap = retrieveFingerprintMap(FingerprintGestureUtils.PREF_KEYS[gestureId]!!)
val fingerprintGestureMap = get(FingerprintGestureUtils.PREF_KEYS[gestureId]!!)
?: FingerprintGestureMap()

fingerprintGestureMap.apply {
Expand All @@ -34,12 +34,12 @@ constructor(iPreferenceDataStore: IPreferenceDataStore) : IPreferenceDataStore b
}
}

fun saveFingerprintMap(@StringRes prefKey: Int, gestureMap: FingerprintGestureMap) {
private fun saveFingerprintMap(@StringRes prefKey: Int, gestureMap: FingerprintGestureMap) {
val json = mGson.toJson(gestureMap)
setStringPref(prefKey, json)
}

fun retrieveFingerprintMap(@StringRes prefKey: Int): FingerprintGestureMap? {
fun get(@StringRes prefKey: Int): FingerprintGestureMap? {
val json = getStringPref(prefKey)
return json?.let { mGson.fromJson(it) }
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.github.sds100.keymapper.data.usecase

/**
* Created by sds100 on 06/11/20.
*/

interface MenuKeymapUseCase {
suspend fun enableAll()
suspend fun disableAll()
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,23 @@ class FingerprintGestureViewModel(private val mRepository: FingerprintGestureRep
}

fun setAction(id: String, action: Action) {
mRepository.editFingerprintMap(id) {
mRepository.edit(id) {
it.clone(action = action)
}

rebuildModels()
}

fun removeAction(id: String) {
mRepository.editFingerprintMap(id) {
mRepository.edit(id) {
it.clone(action = null)
}

rebuildModels()
}

fun setEnabled(id: String, isEnabled: Boolean) {
mRepository.editFingerprintMap(id) {
mRepository.edit(id) {
it.clone(isEnabled = isEnabled)
}

Expand All @@ -56,7 +56,7 @@ class FingerprintGestureViewModel(private val mRepository: FingerprintGestureRep

viewModelScope.launch(Dispatchers.IO) {
val gestureMaps = FingerprintGestureUtils.GESTURES.map {
it to (mRepository.retrieveFingerprintMap(FingerprintGestureUtils.PREF_KEYS[it]!!)
it to (mRepository.get(FingerprintGestureUtils.PREF_KEYS[it]!!)
?: FingerprintGestureMap())
}.toMap()

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package io.github.sds100.keymapper.data.viewmodel

import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import io.github.sds100.keymapper.data.repository.FingerprintGestureRepository
import io.github.sds100.keymapper.data.usecase.MenuKeymapUseCase
import io.github.sds100.keymapper.util.FingerprintGestureUtils
import kotlinx.coroutines.launch

/**
* Created by sds100 on 17/11/20.
*/
class MenuFragmentViewModel(private val mKeymapUseCase: MenuKeymapUseCase,
private val mFingerprintGestureRepository: FingerprintGestureRepository) : ViewModel() {

fun enableAll() {
viewModelScope.launch {
mKeymapUseCase.enableAll()
}

FingerprintGestureUtils.GESTURES.forEach { gestureId ->
mFingerprintGestureRepository.edit(gestureId) {
it.clone(isEnabled = true)
}
}
}

fun disableAll() {
viewModelScope.launch {
mKeymapUseCase.disableAll()
}

FingerprintGestureUtils.GESTURES.forEach { gestureId ->
mFingerprintGestureRepository.edit(gestureId) {
it.clone(isEnabled = false)
}
}
}

@Suppress("UNCHECKED_CAST")
class Factory(
private val mKeymapUseCase: MenuKeymapUseCase,
private val mFingerprintGestureRepository: FingerprintGestureRepository
) : ViewModelProvider.NewInstanceFactory() {

override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return MenuFragmentViewModel(mKeymapUseCase, mFingerprintGestureRepository) as T
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import io.github.sds100.keymapper.R
import io.github.sds100.keymapper.data.AppPreferences
import io.github.sds100.keymapper.data.viewmodel.BackupRestoreViewModel
import io.github.sds100.keymapper.data.viewmodel.KeymapListViewModel
import io.github.sds100.keymapper.data.viewmodel.MenuFragmentViewModel
import io.github.sds100.keymapper.databinding.FragmentMenuBinding
import io.github.sds100.keymapper.service.MyAccessibilityService
import io.github.sds100.keymapper.util.*
import splitties.alertdialog.appcompat.*

class MenuFragment : BottomSheetDialogFragment(), SharedPreferences.OnSharedPreferenceChangeListener {

private val mViewModel: KeymapListViewModel by activityViewModels {
InjectorUtils.provideKeymapListViewModel(requireContext())
private val mViewModel: MenuFragmentViewModel by activityViewModels {
InjectorUtils.provideMenuFragmentViewModel(requireContext())
}

private val mBackupRestoreViewModel: BackupRestoreViewModel by activityViewModels {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,12 @@ object InjectorUtils {
return FingerprintGestureViewModel.Factory(repository)
}

fun provideMenuFragmentViewModel(context: Context): MenuFragmentViewModel.Factory {
val keymapUseCase = (context.applicationContext as MyApplication).keymapRepository
val fingerprintGestureUseCase = (context.applicationContext as MyApplication).fingerprintGestureRepository
return MenuFragmentViewModel.Factory(keymapUseCase, fingerprintGestureUseCase)
}

fun provideConfigKeymapViewModel(
context: Context,
id: Long
Expand Down

0 comments on commit d3e4e55

Please sign in to comment.