Skip to content

Commit

Permalink
Merge pull request #438 from enaboapps/version-1.24.0
Browse files Browse the repository at this point in the history
Version 1.24.0
  • Loading branch information
OwenMcGirr committed Aug 31, 2024
2 parents 940c1c3 + 95c37b3 commit ed1ce16
Show file tree
Hide file tree
Showing 16 changed files with 497 additions and 270 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ android {
minSdk = 31
targetSdk = 34
versionCode = gitVersionCode()
versionName = "1.23.1"
versionName = "1.24.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.enaboapps.switchify.service.utils.ScreenUtils

/**
* This class represents a menu item
* @property id The id of the menu item
* @property text The text of the menu item
* @property drawableId The drawable resource id of the menu item
* @property drawableDescription The description of the drawable
Expand All @@ -22,13 +23,14 @@ import com.enaboapps.switchify.service.utils.ScreenUtils
* @property action The action to perform when the item is selected
*/
class MenuItem(
val id: String,
private val text: String = "",
private val drawableId: Int = 0,
private val drawableDescription: String = "",
val closeOnSelect: Boolean = true,
var isLinkToMenu: Boolean = false,
var isMenuHierarchyManipulator: Boolean = false,
var page: Int = 0,
private var page: Int = 0,
private val action: () -> Unit
) {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ class MenuPage(

if (maxPageIndex > 0) {
menuChangeBtn = MenuItem(
id = "change_page",
drawableId = R.drawable.ic_change_menu_page,
drawableDescription = "Change page",
closeOnSelect = false,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.enaboapps.switchify.service.menu.menus

import android.accessibilityservice.AccessibilityService
import com.enaboapps.switchify.R
import com.enaboapps.switchify.service.SwitchifyAccessibilityService
import com.enaboapps.switchify.service.menu.MenuItem
import com.enaboapps.switchify.service.menu.MenuManager
import com.enaboapps.switchify.service.menu.MenuView
import com.enaboapps.switchify.service.menu.store.MenuItemStore

/**
* This class represents a base menu
Expand All @@ -29,45 +27,15 @@ open class BaseMenu(
* @return The system navigation items
*/
fun buildSystemNavItems(): List<MenuItem> {
return listOfNotNull(
MenuItem(
drawableId = R.drawable.ic_sys_back,
drawableDescription = "Back",
action = { accessibilityService.performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK) }
),
MenuItem(
drawableId = R.drawable.ic_sys_home,
drawableDescription = "Home",
action = { accessibilityService.performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME) }
)
)
return MenuItemStore(accessibilityService).systemNavItems
}

/**
* Build the navigation menu items
* @return The navigation menu items
*/
fun buildNavMenuItems(): List<MenuItem> {
val navMenuItems = mutableListOf<MenuItem>()
if (MenuManager.getInstance().menuHierarchy?.getTopMenu() != null) {
navMenuItems.add(
MenuItem(
drawableId = R.drawable.ic_previous_menu,
drawableDescription = "Previous menu",
isMenuHierarchyManipulator = true,
action = { MenuManager.getInstance().menuHierarchy?.popMenu() }
)
)
}
navMenuItems.add(
MenuItem(
drawableId = R.drawable.ic_close_menu,
drawableDescription = "Close menu",
isMenuHierarchyManipulator = true,
action = { MenuManager.getInstance().menuHierarchy?.removeAllMenus() }
)
)
return navMenuItems
return MenuItemStore(accessibilityService).menuManipulatorItems
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,38 +1,15 @@
package com.enaboapps.switchify.service.menu.menus.edit

import android.view.accessibility.AccessibilityNodeInfo
import com.enaboapps.switchify.service.SwitchifyAccessibilityService
import com.enaboapps.switchify.service.gestures.GesturePoint
import com.enaboapps.switchify.service.menu.MenuItem
import com.enaboapps.switchify.service.menu.menus.BaseMenu
import com.enaboapps.switchify.service.nodes.Node
import com.enaboapps.switchify.service.nodes.NodeExaminer
import com.enaboapps.switchify.service.menu.store.MenuItemStore

class EditMenu(accessibilityService: SwitchifyAccessibilityService) :
BaseMenu(accessibilityService, buildEditMenuItems(accessibilityService)) {
companion object {
private fun buildEditMenuItems(accessibilityService: SwitchifyAccessibilityService): List<MenuItem> {
val currentPoint = GesturePoint.getPoint()
val cutNode = NodeExaminer.findNodeForAction(currentPoint, Node.ActionType.CUT)
val copyNode = NodeExaminer.findNodeForAction(currentPoint, Node.ActionType.COPY)
val pasteNode = NodeExaminer.findNodeForAction(currentPoint, Node.ActionType.PASTE)
return listOfNotNull(
if (cutNode != null) {
MenuItem("Cut") {
cutNode.performAction(AccessibilityNodeInfo.ACTION_CUT)
}
} else null,
if (copyNode != null) {
MenuItem("Copy") {
copyNode.performAction(AccessibilityNodeInfo.ACTION_COPY)
}
} else null,
if (pasteNode != null) {
MenuItem("Paste") {
pasteNode.performAction(AccessibilityNodeInfo.ACTION_PASTE)
}
} else null
)
return MenuItemStore(accessibilityService).buildEditMenuObject().getMenuItems()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,33 +1,16 @@
package com.enaboapps.switchify.service.menu.menus.gestures

import com.enaboapps.switchify.service.SwitchifyAccessibilityService
import com.enaboapps.switchify.service.gestures.GestureManager
import com.enaboapps.switchify.service.menu.MenuItem
import com.enaboapps.switchify.service.menu.MenuManager
import com.enaboapps.switchify.service.menu.menus.BaseMenu
import com.enaboapps.switchify.service.menu.store.MenuItemStore

class GesturesMenu(accessibilityService: SwitchifyAccessibilityService) :
BaseMenu(accessibilityService, buildGesturesMenuItems(accessibilityService)) {

companion object {
private fun buildGesturesMenuItems(accessibilityService: SwitchifyAccessibilityService): List<MenuItem> {
return listOf(
MenuItem("Tap Gestures", isLinkToMenu = true) {
MenuManager.getInstance().openTapMenu()
},
MenuItem("Swipe Gestures", isLinkToMenu = true) {
MenuManager.getInstance().openSwipeMenu()
},
MenuItem("Drag") {
GestureManager.getInstance().startDragGesture()
},
MenuItem("Zoom Gestures", isLinkToMenu = true) {
MenuManager.getInstance().openZoomGesturesMenu()
},
MenuItem("Toggle Gesture Lock", closeOnSelect = false) {
GestureManager.getInstance().toggleGestureLock()
}
)
return MenuItemStore(accessibilityService).gesturesMenuObject.getMenuItems()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,30 +1,16 @@
package com.enaboapps.switchify.service.menu.menus.gestures

import com.enaboapps.switchify.service.SwitchifyAccessibilityService
import com.enaboapps.switchify.service.gestures.GestureManager
import com.enaboapps.switchify.service.gestures.SwipeDirection
import com.enaboapps.switchify.service.menu.MenuItem
import com.enaboapps.switchify.service.menu.menus.BaseMenu
import com.enaboapps.switchify.service.menu.store.MenuItemStore

class SwipeGesturesMenu(accessibilityService: SwitchifyAccessibilityService) :
BaseMenu(accessibilityService, buildSwipeGesturesMenuItems(accessibilityService)) {

companion object {
private fun buildSwipeGesturesMenuItems(accessibilityService: SwitchifyAccessibilityService): List<MenuItem> {
return listOf(
MenuItem("Swipe Up") {
GestureManager.getInstance().performSwipe(SwipeDirection.UP)
},
MenuItem("Swipe Down") {
GestureManager.getInstance().performSwipe(SwipeDirection.DOWN)
},
MenuItem("Swipe Left") {
GestureManager.getInstance().performSwipe(SwipeDirection.LEFT)
},
MenuItem("Swipe Right") {
GestureManager.getInstance().performSwipe(SwipeDirection.RIGHT)
}
)
return MenuItemStore(accessibilityService).swipeGesturesMenuObject.getMenuItems()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,16 @@
package com.enaboapps.switchify.service.menu.menus.gestures

import com.enaboapps.switchify.service.SwitchifyAccessibilityService
import com.enaboapps.switchify.service.gestures.GestureManager
import com.enaboapps.switchify.service.menu.MenuItem
import com.enaboapps.switchify.service.menu.menus.BaseMenu
import com.enaboapps.switchify.service.menu.store.MenuItemStore

class TapGesturesMenu(accessibilityService: SwitchifyAccessibilityService) :
BaseMenu(accessibilityService, buildTapGesturesMenuItems(accessibilityService)) {

companion object {
private fun buildTapGesturesMenuItems(accessibilityService: SwitchifyAccessibilityService): List<MenuItem> {
return listOf(
MenuItem("Tap") {
GestureManager.getInstance().performTap()
},
MenuItem("Double Tap") {
GestureManager.getInstance().performDoubleTap()
},
MenuItem("Tap and Hold") {
GestureManager.getInstance().performTapAndHold()
}
)
return MenuItemStore(accessibilityService).tapGesturesMenuObject.getMenuItems()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,15 @@
package com.enaboapps.switchify.service.menu.menus.gestures

import com.enaboapps.switchify.service.SwitchifyAccessibilityService
import com.enaboapps.switchify.service.gestures.GestureManager
import com.enaboapps.switchify.service.gestures.ZoomGesturePerformer
import com.enaboapps.switchify.service.menu.MenuItem
import com.enaboapps.switchify.service.menu.menus.BaseMenu
import com.enaboapps.switchify.service.menu.store.MenuItemStore

class ZoomGesturesMenu(accessibilityService: SwitchifyAccessibilityService) :
BaseMenu(accessibilityService, buildZoomGesturesMenuItems(accessibilityService)) {
companion object {
private fun buildZoomGesturesMenuItems(accessibilityService: SwitchifyAccessibilityService): List<MenuItem> {
return listOf(
MenuItem("Zoom In") {
GestureManager.getInstance()
.performZoomAction(ZoomGesturePerformer.ZoomAction.ZOOM_IN)
},
MenuItem("Zoom Out") {
GestureManager.getInstance()
.performZoomAction(ZoomGesturePerformer.ZoomAction.ZOOM_OUT)
}
)
return MenuItemStore(accessibilityService).zoomGesturesMenuObject.getMenuItems()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,64 +1,16 @@
package com.enaboapps.switchify.service.menu.menus.main

import com.enaboapps.switchify.service.SwitchifyAccessibilityService
import com.enaboapps.switchify.service.gestures.GestureManager
import com.enaboapps.switchify.service.gestures.GesturePoint
import com.enaboapps.switchify.service.menu.MenuItem
import com.enaboapps.switchify.service.menu.MenuManager
import com.enaboapps.switchify.service.menu.menus.BaseMenu
import com.enaboapps.switchify.service.nodes.NodeExaminer
import com.enaboapps.switchify.service.scanning.ScanMethod
import com.enaboapps.switchify.service.menu.store.MenuItemStore

class MainMenu(accessibilityService: SwitchifyAccessibilityService) :
BaseMenu(accessibilityService, buildMainMenuItems(accessibilityService)) {

companion object {
private fun buildMainMenuItems(accessibilityService: SwitchifyAccessibilityService): List<MenuItem> {
val point = GesturePoint.getPoint()

val menuItems = mutableListOf<MenuItem>()

menuItems.add(MenuItem("Tap") {
GestureManager.getInstance().performTap()
})

menuItems.add(MenuItem("Gestures", isLinkToMenu = true) {
MenuManager.getInstance().openGesturesMenu()
})

if (NodeExaminer.canPerformScrollActions(point)) {
menuItems.add(MenuItem("Scroll", isLinkToMenu = true) {
MenuManager.getInstance().openScrollMenu()
})
}

// Only add "Refine Selection" if the current scan method is not item scan
if (ScanMethod.getType() != ScanMethod.MethodType.ITEM_SCAN) {
menuItems.add(MenuItem("Refine Selection") {
GesturePoint.setReselect(true)
})
}

menuItems.add(MenuItem("Device", isLinkToMenu = true) {
MenuManager.getInstance().openDeviceMenu()
})

menuItems.add(MenuItem("Media Control", isLinkToMenu = true) {
MenuManager.getInstance().openMediaControlMenu()
})

val canEdit = NodeExaminer.canPerformEditActions(GesturePoint.getPoint())
if (canEdit) {
menuItems.add(MenuItem("Edit", isLinkToMenu = true) {
MenuManager.getInstance().openEditMenu()
})
}

menuItems.add(MenuItem(MenuManager.getInstance().getTypeToSwitchTo()) {
MenuManager.getInstance().changeBetweenCursorAndItemScan()
})

return menuItems
return MenuItemStore(accessibilityService).mainMenuObject.getMenuItems()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
package com.enaboapps.switchify.service.menu.menus.media

import android.accessibilityservice.AccessibilityService
import com.enaboapps.switchify.service.SwitchifyAccessibilityService
import com.enaboapps.switchify.service.menu.MenuItem
import com.enaboapps.switchify.service.menu.menus.BaseMenu
import com.enaboapps.switchify.service.menu.store.MenuItemStore

class MediaControlMenu(accessibilityService: SwitchifyAccessibilityService) :
BaseMenu(accessibilityService, buildMediaControlMenuItems(accessibilityService)) {

companion object {
private fun buildMediaControlMenuItems(accessibilityService: SwitchifyAccessibilityService): List<MenuItem> {
return listOf(
// Play/Pause using headset
MenuItem("Play/Pause") {
accessibilityService.performGlobalAction(AccessibilityService.GLOBAL_ACTION_KEYCODE_HEADSETHOOK)
}
)
return MenuItemStore(accessibilityService).mediaControlMenuObject.getMenuItems()
}
}
}
Loading

0 comments on commit ed1ce16

Please sign in to comment.