Skip to content

Commit f3fc3e6

Browse files
committed
#727 feat: complete action for sending an SMS message
1 parent d606a79 commit f3fc3e6

File tree

16 files changed

+538
-162
lines changed

16 files changed

+538
-162
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
- #1773 Option to show floating buttons on top of keyboard or notification panel.
1515
- #1335 Intent API to enable/disable/toggle a key map.
1616
- #114 action to force stop app, and an action to clear an app from recents
17-
- Actions to send SMS messages: "Send SMS" and "Compose SMS"
17+
- #727 Actions to send SMS messages: "Send SMS" and "Compose SMS"
1818

1919
## Removed
2020

base/src/main/assets/whats-new.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
Action to force stop an app or clear it from recents.
44

5+
Action to send SMS message.
6+
57
Enable/disable all the key maps in a group. Intent API to enable/disable/toggle a key map.
68

79
Option to show floating buttons on top of keyboard or notification panel.

base/src/main/java/io/github/sds100/keymapper/base/BaseMainActivity.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,6 @@ abstract class BaseMainActivity : AppCompatActivity() {
155155
)
156156
super.onCreate(savedInstanceState)
157157

158-
if (viewModel.previousNightMode != currentNightMode) {
159-
resourceProvider.onThemeChange()
160-
}
161-
162158
requestPermissionDelegate = RequestPermissionDelegate(
163159
this,
164160
showDialogs = true,

base/src/main/java/io/github/sds100/keymapper/base/actions/ActionUiHelper.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,15 @@ class ActionUiHelper(
576576

577577
ActionData.ClearRecentApp -> getString(R.string.action_clear_recent_app)
578578
ActionData.ForceStopApp -> getString(R.string.action_force_stop_app)
579+
is ActionData.ComposeSms -> getString(
580+
R.string.action_compose_sms_description,
581+
arrayOf(action.message, action.number)
582+
)
583+
584+
is ActionData.SendSms -> getString(
585+
R.string.action_send_sms_description,
586+
arrayOf(action.message, action.number)
587+
)
579588
}
580589

581590
fun getIcon(action: ActionData): ComposeIconInfo = when (action) {

base/src/main/java/io/github/sds100/keymapper/base/actions/ActionUtils.kt

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -507,26 +507,26 @@ object ActionUtils {
507507
ActionId.TOGGLE_DND_MODE,
508508
ActionId.ENABLE_DND_MODE,
509509
ActionId.DISABLE_DND_MODE,
510-
-> Build.VERSION_CODES.M
510+
-> Build.VERSION_CODES.M
511511

512512
ActionId.DISABLE_FLASHLIGHT,
513513
ActionId.ENABLE_FLASHLIGHT,
514514
ActionId.TOGGLE_FLASHLIGHT,
515-
-> Build.VERSION_CODES.M
515+
-> Build.VERSION_CODES.M
516516

517517
ActionId.CHANGE_FLASHLIGHT_STRENGTH,
518-
-> Build.VERSION_CODES.TIRAMISU
518+
-> Build.VERSION_CODES.TIRAMISU
519519

520520
ActionId.TOGGLE_KEYBOARD,
521521
ActionId.SHOW_KEYBOARD,
522522
ActionId.HIDE_KEYBOARD,
523-
-> Build.VERSION_CODES.N
523+
-> Build.VERSION_CODES.N
524524

525525
ActionId.TEXT_CUT,
526526
ActionId.TEXT_COPY,
527527
ActionId.TEXT_PASTE,
528528
ActionId.SELECT_WORD_AT_CURSOR,
529-
-> Build.VERSION_CODES.JELLY_BEAN_MR2
529+
-> Build.VERSION_CODES.JELLY_BEAN_MR2
530530

531531
ActionId.SHOW_POWER_MENU -> Build.VERSION_CODES.LOLLIPOP
532532
ActionId.DEVICE_CONTROLS -> Build.VERSION_CODES.S
@@ -551,22 +551,28 @@ object ActionUtils {
551551
ActionId.END_PHONE_CALL,
552552
ActionId.ANSWER_PHONE_CALL,
553553
ActionId.PHONE_CALL,
554+
-> listOf(PackageManager.FEATURE_TELEPHONY)
555+
554556
ActionId.SEND_SMS,
555557
ActionId.COMPOSE_SMS,
556-
-> listOf(PackageManager.FEATURE_TELEPHONY)
558+
-> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
559+
listOf(PackageManager.FEATURE_TELEPHONY_MESSAGING)
560+
} else {
561+
listOf(PackageManager.FEATURE_TELEPHONY)
562+
}
557563

558564
ActionId.SECURE_LOCK_DEVICE,
559-
-> listOf(PackageManager.FEATURE_DEVICE_ADMIN)
565+
-> listOf(PackageManager.FEATURE_DEVICE_ADMIN)
560566

561567
ActionId.TOGGLE_WIFI,
562568
ActionId.ENABLE_WIFI,
563569
ActionId.DISABLE_WIFI,
564-
-> listOf(PackageManager.FEATURE_WIFI)
570+
-> listOf(PackageManager.FEATURE_WIFI)
565571

566572
ActionId.TOGGLE_MOBILE_DATA,
567573
ActionId.ENABLE_MOBILE_DATA,
568574
ActionId.DISABLE_MOBILE_DATA,
569-
-> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
575+
-> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
570576
listOf(PackageManager.FEATURE_TELEPHONY_DATA)
571577
} else {
572578
listOf(PackageManager.FEATURE_TELEPHONY)
@@ -575,18 +581,18 @@ object ActionUtils {
575581
ActionId.TOGGLE_NFC,
576582
ActionId.ENABLE_NFC,
577583
ActionId.DISABLE_NFC,
578-
-> listOf(PackageManager.FEATURE_NFC)
584+
-> listOf(PackageManager.FEATURE_NFC)
579585

580586
ActionId.TOGGLE_BLUETOOTH,
581587
ActionId.ENABLE_BLUETOOTH,
582588
ActionId.DISABLE_BLUETOOTH,
583-
-> listOf(PackageManager.FEATURE_BLUETOOTH)
589+
-> listOf(PackageManager.FEATURE_BLUETOOTH)
584590

585591
ActionId.TOGGLE_FLASHLIGHT,
586592
ActionId.ENABLE_FLASHLIGHT,
587593
ActionId.DISABLE_FLASHLIGHT,
588594
ActionId.CHANGE_FLASHLIGHT_STRENGTH,
589-
-> listOf(PackageManager.FEATURE_CAMERA_FLASH)
595+
-> listOf(PackageManager.FEATURE_CAMERA_FLASH)
590596

591597
else -> emptyList()
592598
}
@@ -597,27 +603,27 @@ object ActionUtils {
597603
ActionId.ENABLE_WIFI,
598604
ActionId.DISABLE_WIFI,
599605
ActionId.TOGGLE_WIFI,
600-
-> true
606+
-> true
601607

602608
ActionId.TOGGLE_MOBILE_DATA,
603609
ActionId.ENABLE_MOBILE_DATA,
604610
ActionId.DISABLE_MOBILE_DATA,
605-
-> true
611+
-> true
606612

607613
ActionId.ENABLE_NFC,
608614
ActionId.DISABLE_NFC,
609615
ActionId.TOGGLE_NFC,
610-
-> true
616+
-> true
611617

612618
ActionId.TOGGLE_AIRPLANE_MODE,
613619
ActionId.ENABLE_AIRPLANE_MODE,
614620
ActionId.DISABLE_AIRPLANE_MODE,
615-
-> true
621+
-> true
616622

617623
ActionId.TOGGLE_BLUETOOTH,
618624
ActionId.ENABLE_BLUETOOTH,
619625
ActionId.DISABLE_BLUETOOTH,
620-
-> Build.VERSION.SDK_INT >= Build.VERSION_CODES.S_V2
626+
-> Build.VERSION.SDK_INT >= Build.VERSION_CODES.S_V2
621627

622628
ActionId.POWER_ON_OFF_DEVICE -> true
623629

@@ -632,7 +638,7 @@ object ActionUtils {
632638
ActionId.TOGGLE_MOBILE_DATA,
633639
ActionId.ENABLE_MOBILE_DATA,
634640
ActionId.DISABLE_MOBILE_DATA,
635-
-> return if (isSystemBridgeSupported) {
641+
-> return if (isSystemBridgeSupported) {
636642
emptyList()
637643
} else {
638644
listOf(Permission.ROOT)
@@ -645,7 +651,7 @@ object ActionUtils {
645651
ActionId.PREVIOUS_TRACK_PACKAGE,
646652
ActionId.FAST_FORWARD_PACKAGE,
647653
ActionId.REWIND_PACKAGE,
648-
-> return listOf(Permission.NOTIFICATION_LISTENER)
654+
-> return listOf(Permission.NOTIFICATION_LISTENER)
649655

650656
ActionId.VOLUME_UP,
651657
ActionId.VOLUME_DOWN,
@@ -661,7 +667,7 @@ object ActionUtils {
661667
ActionId.TOGGLE_DND_MODE,
662668
ActionId.DISABLE_DND_MODE,
663669
ActionId.ENABLE_DND_MODE,
664-
-> return listOf(Permission.ACCESS_NOTIFICATION_POLICY)
670+
-> return listOf(Permission.ACCESS_NOTIFICATION_POLICY)
665671

666672
ActionId.TOGGLE_AUTO_ROTATE,
667673
ActionId.ENABLE_AUTO_ROTATE,
@@ -670,25 +676,25 @@ object ActionUtils {
670676
ActionId.LANDSCAPE_MODE,
671677
ActionId.SWITCH_ORIENTATION,
672678
ActionId.CYCLE_ROTATIONS,
673-
-> return listOf(Permission.WRITE_SETTINGS)
679+
-> return listOf(Permission.WRITE_SETTINGS)
674680

675681
ActionId.TOGGLE_AUTO_BRIGHTNESS,
676682
ActionId.ENABLE_AUTO_BRIGHTNESS,
677683
ActionId.DISABLE_AUTO_BRIGHTNESS,
678684
ActionId.INCREASE_BRIGHTNESS,
679685
ActionId.DECREASE_BRIGHTNESS,
680-
-> return listOf(Permission.WRITE_SETTINGS)
686+
-> return listOf(Permission.WRITE_SETTINGS)
681687

682688
ActionId.TOGGLE_FLASHLIGHT,
683689
ActionId.ENABLE_FLASHLIGHT,
684690
ActionId.DISABLE_FLASHLIGHT,
685691
ActionId.CHANGE_FLASHLIGHT_STRENGTH,
686-
-> return listOf(Permission.CAMERA)
692+
-> return listOf(Permission.CAMERA)
687693

688694
ActionId.ENABLE_NFC,
689695
ActionId.DISABLE_NFC,
690696
ActionId.TOGGLE_NFC,
691-
-> return if (isSystemBridgeSupported) {
697+
-> return if (isSystemBridgeSupported) {
692698
emptyList()
693699
} else {
694700
listOf(Permission.ROOT)
@@ -706,7 +712,7 @@ object ActionUtils {
706712
ActionId.TOGGLE_AIRPLANE_MODE,
707713
ActionId.ENABLE_AIRPLANE_MODE,
708714
ActionId.DISABLE_AIRPLANE_MODE,
709-
-> return if (isSystemBridgeSupported) {
715+
-> return if (isSystemBridgeSupported) {
710716
emptyList()
711717
} else {
712718
listOf(Permission.ROOT)
@@ -729,17 +735,17 @@ object ActionUtils {
729735

730736
ActionId.DISMISS_ALL_NOTIFICATIONS,
731737
ActionId.DISMISS_MOST_RECENT_NOTIFICATION,
732-
-> return listOf(Permission.NOTIFICATION_LISTENER)
738+
-> return listOf(Permission.NOTIFICATION_LISTENER)
733739

734740
ActionId.ANSWER_PHONE_CALL,
735741
ActionId.END_PHONE_CALL,
736-
-> return listOf(Permission.ANSWER_PHONE_CALL)
742+
-> return listOf(Permission.ANSWER_PHONE_CALL)
737743

738744
ActionId.PHONE_CALL -> return listOf(Permission.CALL_PHONE)
739745

740746
ActionId.SEND_SMS,
741747
ActionId.COMPOSE_SMS,
742-
-> return listOf(Permission.SEND_SMS)
748+
-> return listOf(Permission.SEND_SMS)
743749

744750
ActionId.ENABLE_BLUETOOTH, ActionId.DISABLE_BLUETOOTH, ActionId.TOGGLE_BLUETOOTH ->
745751
// On S_V2 and newer, the system bridge is used which means no permissions are required
@@ -920,7 +926,7 @@ fun ActionData.isEditable(): Boolean = when (this) {
920926
is ActionData.HttpRequest,
921927
is ActionData.InteractUiElement,
922928
is ActionData.MoveCursor,
923-
-> true
929+
-> true
924930

925931
else -> false
926932
}

base/src/main/java/io/github/sds100/keymapper/base/actions/ActionsScreen.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,7 @@ fun ActionsScreen(modifier: Modifier = Modifier, viewModel: ConfigActionsViewMod
8686
)
8787
}
8888

89-
EnableFlashlightActionBottomSheet(viewModel.createActionDelegate)
90-
ChangeFlashlightStrengthActionBottomSheet(viewModel.createActionDelegate)
91-
HttpRequestBottomSheet(viewModel.createActionDelegate)
89+
HandleActionBottomSheets(viewModel.createActionDelegate)
9290

9391
ActionsScreen(
9492
modifier = modifier,

base/src/main/java/io/github/sds100/keymapper/base/actions/ChooseActionScreen.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ import io.github.sds100.keymapper.base.utils.ui.compose.SimpleListItemModel
4949
import io.github.sds100.keymapper.common.utils.State
5050
import kotlinx.coroutines.flow.update
5151

52+
@Composable
53+
fun HandleActionBottomSheets(delegate: CreateActionDelegate) {
54+
EnableFlashlightActionBottomSheet(delegate)
55+
ChangeFlashlightStrengthActionBottomSheet(delegate)
56+
HttpRequestBottomSheet(delegate)
57+
SmsActionBottomSheet(delegate)
58+
}
59+
5260
@Composable
5361
fun ChooseActionScreen(
5462
modifier: Modifier = Modifier,
@@ -57,10 +65,7 @@ fun ChooseActionScreen(
5765
val state by viewModel.groups.collectAsStateWithLifecycle()
5866
val query by viewModel.searchQuery.collectAsStateWithLifecycle()
5967

60-
EnableFlashlightActionBottomSheet(viewModel.createActionDelegate)
61-
ChangeFlashlightStrengthActionBottomSheet(viewModel.createActionDelegate)
62-
HttpRequestBottomSheet(viewModel.createActionDelegate)
63-
SmsActionBottomSheet(viewModel.createActionDelegate)
68+
HandleActionBottomSheets(viewModel.createActionDelegate)
6469

6570
ChooseActionScreen(
6671
modifier = modifier,
@@ -120,7 +125,7 @@ private fun ChooseActionScreen(
120125
end = endPadding,
121126
),
122127

123-
) {
128+
) {
124129
when (state) {
125130
State.Loading -> LoadingScreen(modifier = Modifier.fillMaxSize())
126131

@@ -225,7 +230,7 @@ private fun PreviewList() {
225230
icon = ComposeIconInfo.Vector(Icons.Rounded.Android),
226231
),
227232

228-
),
233+
),
229234
),
230235
SimpleListItemGroup(
231236
header = "Connectivity",
@@ -246,7 +251,7 @@ private fun PreviewList() {
246251
isEnabled = false,
247252
),
248253

249-
),
254+
),
250255
),
251256
),
252257
),
@@ -275,7 +280,7 @@ private fun PreviewGrid() {
275280
icon = ComposeIconInfo.Vector(Icons.Rounded.Android),
276281
),
277282

278-
),
283+
),
279284
),
280285
SimpleListItemGroup(
281286
header = "Connectivity",
@@ -305,10 +310,10 @@ private fun PreviewGrid() {
305310
isEnabled = false,
306311
),
307312

308-
),
313+
),
309314
),
310315

311-
),
316+
),
312317
),
313318
)
314319
}

0 commit comments

Comments
 (0)