Skip to content

Feature/320 group key maps #1600

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 35 commits into from
Mar 31, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
47054f3
Merge branch 'develop' into feature/320-group-key-maps
sds100 Mar 27, 2025
df00ca5
#320 create GroupEntity and database migration
sds100 Mar 27, 2025
93d7eb3
Merge branch 'develop' into feature/320-group-key-maps
sds100 Mar 27, 2025
ae3ef90
#320 WIP: create data classes for groups
sds100 Mar 28, 2025
68e8f88
#320 build key map group UI state in view model
sds100 Mar 28, 2025
ebceca0
#320 WIP: refactor home screen completely
sds100 Mar 28, 2025
237314d
#320 create previews for key map app bar and list. selection bottom s…
sds100 Mar 28, 2025
9e6e010
#320 create floating layouts app bar
sds100 Mar 28, 2025
be75b82
#320 show new group button
sds100 Mar 28, 2025
4f84e27
#320 WIP: redo app bars
sds100 Mar 28, 2025
4adc5fe
Merge branch 'develop' into feature/320-group-key-maps
sds100 Mar 29, 2025
af2a805
WIP: child group app bar
sds100 Mar 29, 2025
533eabc
#320 WIP: child group app bar
sds100 Mar 29, 2025
2cc2fa0
#320 complete naming groups
sds100 Mar 29, 2025
14db65a
#320 create key maps in groups
sds100 Mar 30, 2025
70df01b
#320 collapse/expand groups with view all button
sds100 Mar 30, 2025
09b9b4f
#320 opening groups works
sds100 Mar 30, 2025
e33d151
#320 open nested children groups
sds100 Mar 30, 2025
f39df4f
#320 add group breadcrumbs
sds100 Mar 30, 2025
57474f7
#320 deleting groups
sds100 Mar 30, 2025
f30e1f3
#320 select all text when renaming
sds100 Mar 30, 2025
d93aeb0
#320 adding/removing group constraints works
sds100 Mar 30, 2025
c0d20e8
#320 tweak groups
sds100 Mar 31, 2025
bec1eb8
add uid to constraints
sds100 Mar 31, 2025
b647af5
#320 more group tweaks
sds100 Mar 31, 2025
3ca7d75
#320 only show view all button if necessary
sds100 Mar 31, 2025
eb8814f
#320 show icons for groups based off the first constraint
sds100 Mar 31, 2025
231dde6
#320 test testing multiple sets of constraints
sds100 Mar 31, 2025
466df3f
#320 test combining key maps with their group constraints
sds100 Mar 31, 2025
389b919
#320 mixing key map and group constraints works
sds100 Mar 31, 2025
c01f0db
fix foss code
sds100 Mar 31, 2025
27215b9
fix: remove bottom padding from FAB if no bottom nav bar showing
sds100 Mar 31, 2025
b1dd809
#320 move key maps to another group
sds100 Mar 31, 2025
c53147a
#320 back up and restore groups
sds100 Mar 31, 2025
6c38254
#320 fix tests and other tweaks
sds100 Mar 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
402 changes: 402 additions & 0 deletions app/schemas/io.github.sds100.keymapper.data.db.AppDatabase/16.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.github.sds100.keymapper.home

import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.navigation.NavHostController
import io.github.sds100.keymapper.floating.ListFloatingLayoutsViewModel

@Composable
fun HomeFloatingLayoutsScreen(
modifier: Modifier = Modifier,
viewModel: ListFloatingLayoutsViewModel,
navController: NavHostController,
snackbarState: SnackbarHostState,
fabBottomPadding: Dp,
) {
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import io.github.sds100.keymapper.actions.PerformActionsUseCase
import io.github.sds100.keymapper.constraints.DetectConstraintsUseCase
import io.github.sds100.keymapper.data.repositories.PreferenceRepository
import io.github.sds100.keymapper.mappings.FingerprintGesturesSupportedUseCase
import io.github.sds100.keymapper.mappings.PauseMappingsUseCase
import io.github.sds100.keymapper.mappings.PauseKeyMapsUseCase
import io.github.sds100.keymapper.mappings.keymaps.detection.DetectKeyMapsUseCase
import io.github.sds100.keymapper.reroutekeyevents.RerouteKeyEventsUseCase
import io.github.sds100.keymapper.system.devices.DevicesAdapter
Expand All @@ -25,7 +25,7 @@ class AccessibilityServiceController(
detectKeyMapsUseCase: DetectKeyMapsUseCase,
fingerprintGesturesSupportedUseCase: FingerprintGesturesSupportedUseCase,
rerouteKeyEventsUseCase: RerouteKeyEventsUseCase,
pauseMappingsUseCase: PauseMappingsUseCase,
pauseKeyMapsUseCase: PauseKeyMapsUseCase,
devicesAdapter: DevicesAdapter,
suAdapter: SuAdapter,
inputMethodAdapter: InputMethodAdapter,
Expand All @@ -40,7 +40,7 @@ class AccessibilityServiceController(
detectKeyMapsUseCase,
fingerprintGesturesSupportedUseCase,
rerouteKeyEventsUseCase,
pauseMappingsUseCase,
pauseKeyMapsUseCase,
devicesAdapter,
suAdapter,
inputMethodAdapter,
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/io/github/sds100/keymapper/KeyMapperApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ class KeyMapperApp : MultiDexApplication() {
suAdapter,
permissionAdapter,
),
UseCases.pauseMappings(this),
UseCases.pauseKeyMaps(this),
UseCases.showImePicker(this),
UseCases.controlAccessibilityService(this),
UseCases.toggleCompatibleIme(this),
Expand All @@ -231,7 +231,7 @@ class KeyMapperApp : MultiDexApplication() {
appCoroutineScope,
ServiceLocator.settingsRepository(this),
ServiceLocator.inputMethodAdapter(this),
UseCases.pauseMappings(this),
UseCases.pauseKeyMaps(this),
devicesAdapter,
popupMessageAdapter,
resourceProvider,
Expand Down
17 changes: 17 additions & 0 deletions app/src/main/java/io/github/sds100/keymapper/ServiceLocator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ import io.github.sds100.keymapper.backup.BackupManagerImpl
import io.github.sds100.keymapper.data.db.AppDatabase
import io.github.sds100.keymapper.data.repositories.FloatingButtonRepository
import io.github.sds100.keymapper.data.repositories.FloatingLayoutRepository
import io.github.sds100.keymapper.data.repositories.GroupRepository
import io.github.sds100.keymapper.data.repositories.PreferenceRepository
import io.github.sds100.keymapper.data.repositories.RoomFloatingButtonRepository
import io.github.sds100.keymapper.data.repositories.RoomFloatingLayoutRepository
import io.github.sds100.keymapper.data.repositories.RoomGroupRepository
import io.github.sds100.keymapper.data.repositories.RoomKeyMapRepository
import io.github.sds100.keymapper.data.repositories.RoomLogRepository
import io.github.sds100.keymapper.data.repositories.SettingsPreferenceRepository
Expand Down Expand Up @@ -138,6 +140,20 @@ object ServiceLocator {
}
}

@Volatile
private var groupRepository: GroupRepository? = null

fun groupRepository(context: Context): GroupRepository {
synchronized(this) {
return groupRepository ?: RoomGroupRepository(
database(context).groupDao(),
(context.applicationContext as KeyMapperApp).appCoroutineScope,
).also {
this.groupRepository = it
}
}
}

@Volatile
private var backupManager: BackupManager? = null

Expand All @@ -156,6 +172,7 @@ object ServiceLocator {
settingsRepository(context),
floatingLayoutRepository(context),
floatingButtonRepository(context),
groupRepository(context),
soundsManager(context),
)

Expand Down
5 changes: 3 additions & 2 deletions app/src/main/java/io/github/sds100/keymapper/UseCases.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import io.github.sds100.keymapper.constraints.GetConstraintErrorUseCaseImpl
import io.github.sds100.keymapper.floating.ListFloatingLayoutsUseCase
import io.github.sds100.keymapper.floating.ListFloatingLayoutsUseCaseImpl
import io.github.sds100.keymapper.mappings.FingerprintGesturesSupportedUseCaseImpl
import io.github.sds100.keymapper.mappings.PauseMappingsUseCaseImpl
import io.github.sds100.keymapper.mappings.PauseKeyMapsUseCaseImpl
import io.github.sds100.keymapper.mappings.keymaps.ConfigKeyMapUseCase
import io.github.sds100.keymapper.mappings.keymaps.CreateKeyMapShortcutUseCaseImpl
import io.github.sds100.keymapper.mappings.keymaps.DisplayKeyMapUseCase
Expand Down Expand Up @@ -97,7 +97,7 @@ object UseCases {

fun fingerprintGesturesSupported(ctx: Context) = FingerprintGesturesSupportedUseCaseImpl(ServiceLocator.settingsRepository(ctx))

fun pauseMappings(ctx: Context) = PauseMappingsUseCaseImpl(
fun pauseKeyMaps(ctx: Context) = PauseKeyMapsUseCaseImpl(
ServiceLocator.settingsRepository(ctx),
ServiceLocator.mediaAdapter(ctx),
)
Expand Down Expand Up @@ -172,6 +172,7 @@ object UseCases {
) = DetectKeyMapsUseCaseImpl(
ServiceLocator.roomKeyMapRepository(ctx),
ServiceLocator.floatingButtonRepository(ctx),
ServiceLocator.groupRepository(ctx),
ServiceLocator.settingsRepository(ctx),
ServiceLocator.suAdapter(ctx),
ServiceLocator.displayAdapter(ctx),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ data class Action(
}
}

object KeymapActionEntityMapper {
object ActionEntityMapper {
fun fromEntity(entity: ActionEntity): Action? {
val data = ActionDataEntityMapper.fromEntity(entity) ?: return null

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.github.sds100.keymapper.actions

import io.github.sds100.keymapper.R
import io.github.sds100.keymapper.home.ChooseAppStoreModel
import io.github.sds100.keymapper.mappings.keymaps.ConfigKeyMapUseCase
import io.github.sds100.keymapper.mappings.keymaps.KeyMap
import io.github.sds100.keymapper.mappings.keymaps.ShortcutModel
Expand All @@ -14,6 +13,7 @@ import io.github.sds100.keymapper.util.getFullMessage
import io.github.sds100.keymapper.util.isFixable
import io.github.sds100.keymapper.util.mapData
import io.github.sds100.keymapper.util.onFailure
import io.github.sds100.keymapper.util.ui.ChooseAppStoreModel
import io.github.sds100.keymapper.util.ui.DialogResponse
import io.github.sds100.keymapper.util.ui.LinkType
import io.github.sds100.keymapper.util.ui.NavDestination
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class PauseMappingsBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
context ?: return

val useCase = UseCases.pauseMappings(context)
val useCase = UseCases.pauseKeyMaps(context)

when (intent?.action) {
Api.ACTION_PAUSE_MAPPINGS -> useCase.pause()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ package io.github.sds100.keymapper.backup
import com.google.gson.annotations.SerializedName
import io.github.sds100.keymapper.data.entities.FloatingButtonEntity
import io.github.sds100.keymapper.data.entities.FloatingLayoutEntity
import io.github.sds100.keymapper.data.entities.GroupEntity
import io.github.sds100.keymapper.data.entities.KeyMapEntity

// TODO back up groups that are referenced by key maps - back up all the children as well. If the parent is not included in the back up then set the parent uid to null
data class BackupContent(
@SerializedName(NAME_DB_VERSION)
val dbVersion: Int,
Expand Down Expand Up @@ -38,6 +40,9 @@ data class BackupContent(

@SerializedName(NAME_FLOATING_BUTTONS)
val floatingButtons: List<FloatingButtonEntity>? = null,

@SerializedName(NAME_GROUPS)
val groups: List<GroupEntity>? = null,
) {
companion object {
const val NAME_DB_VERSION = "keymap_db_version"
Expand All @@ -51,6 +56,7 @@ data class BackupContent(
const val NAME_DEFAULT_SEQUENCE_TRIGGER_TIMEOUT = "default_sequence_trigger_timeout"
const val NAME_FLOATING_LAYOUTS = "floating_layouts"
const val NAME_FLOATING_BUTTONS = "floating_buttons"
const val NAME_GROUPS = "groups"

@Deprecated("Device info used to be stored in a database table but they are now stored inside the triggers and actions.")
const val NAME_DEVICE_INFO = "device_info"
Expand Down
Loading