Skip to content

Commit 1667fa6

Browse files
authored
Merge pull request #541 from code-payments/feat/invert-drag-zoom-beta
chore(camera): reverse drag-to-zoom direction
2 parents a108abe + c7bc2dc commit 1667fa6

9 files changed

Lines changed: 43 additions & 4 deletions

File tree

api/src/main/java/com/getcode/model/Feature.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ data class CameraGesturesFeature(
4848
override val available: Boolean = true, // always available
4949
): Feature
5050

51+
data class InvertedDragZoomFeature(
52+
override val enabled: Boolean = BetaOptions.Defaults.invertedDragZoom,
53+
override val available: Boolean = true, // always available
54+
): Feature
55+
5156
data class FlippableTipCardFeature(
5257
override val enabled: Boolean = BetaOptions.Defaults.canFlipTipCard,
5358
override val available: Boolean = true, // always available

api/src/main/java/com/getcode/model/PrefBool.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package com.getcode.model
44

55
import androidx.room.Entity
66
import androidx.room.PrimaryKey
7+
import dagger.internal.Beta
78

89
@Entity
910
data class PrefBool(
@@ -61,7 +62,8 @@ sealed class PrefsBool(val value: String) {
6162
data object SHARE_TWEET_TO_TIP : PrefsBool("share_tweet_to_tip"), BetaFlag, Immutable
6263
data object TIP_CARD_ON_HOMESCREEN: PrefsBool("tip_card_on_home_screen"), BetaFlag, Immutable
6364
data object TIP_CARD_FLIPPABLE: PrefsBool("tipcard_flippable"), BetaFlag
64-
data object CAMERA_GESTURES_ENABLED: PrefsBool("camera_gestures_enabled"), BetaFlag
65+
data object CAMERA_GESTURES_ENABLED: PrefsBool("camera_gestures_enabled"), BetaFlag, Immutable
66+
data object CAMERA_DRAG_INVERTED: PrefsBool("camera_drag_inverted"), BetaFlag
6567
}
6668

6769
val APP_SETTINGS: List<AppSetting> = listOf(PrefsBool.CAMERA_START_BY_DEFAULT, PrefsBool.REQUIRE_BIOMETRICS)

api/src/main/java/com/getcode/network/repository/BetaFlagsRepository.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ data class BetaOptions(
2222
val shareTweetToTip: Boolean,
2323
val tipCardOnHomeScreen: Boolean,
2424
val cameraGesturesEnabled: Boolean,
25+
val invertedDragZoom: Boolean,
2526
val canFlipTipCard: Boolean,
2627
) {
2728
companion object {
@@ -43,6 +44,7 @@ data class BetaOptions(
4344
shareTweetToTip = true,
4445
tipCardOnHomeScreen = true,
4546
cameraGesturesEnabled = true,
47+
invertedDragZoom = false,
4648
canFlipTipCard = false
4749
)
4850
}
@@ -82,6 +84,7 @@ class BetaFlagsRepository @Inject constructor(
8284
observeBetaFlag(PrefsBool.SHARE_TWEET_TO_TIP, default = defaults.shareTweetToTip),
8385
observeBetaFlag(PrefsBool.TIP_CARD_ON_HOMESCREEN, defaults.tipCardOnHomeScreen),
8486
observeBetaFlag(PrefsBool.CAMERA_GESTURES_ENABLED, defaults.cameraGesturesEnabled),
87+
observeBetaFlag(PrefsBool.CAMERA_DRAG_INVERTED, defaults.invertedDragZoom),
8588
observeBetaFlag(PrefsBool.TIP_CARD_FLIPPABLE, defaults.canFlipTipCard)
8689
) {
8790
BetaOptions(
@@ -101,7 +104,8 @@ class BetaFlagsRepository @Inject constructor(
101104
shareTweetToTip = it[13],
102105
tipCardOnHomeScreen = it[14],
103106
cameraGesturesEnabled = it[15],
104-
canFlipTipCard = it[16],
107+
invertedDragZoom = it[16],
108+
canFlipTipCard = it[17],
105109
)
106110
}
107111
}

api/src/main/java/com/getcode/network/repository/FeatureRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.getcode.model.TipCardOnHomeScreenFeature
1010
import com.getcode.model.ConversationCashFeature
1111
import com.getcode.model.ConversationsFeature
1212
import com.getcode.model.FlippableTipCardFeature
13+
import com.getcode.model.InvertedDragZoomFeature
1314
import kotlinx.coroutines.flow.combine
1415
import kotlinx.coroutines.flow.map
1516
import javax.inject.Inject
@@ -33,6 +34,7 @@ class FeatureRepository @Inject constructor(
3334
val conversationsCash = betaFlags.observe().map { ConversationCashFeature(it.conversationCashEnabled) }
3435

3536
val cameraGestures = betaFlags.observe().map { CameraGesturesFeature(it.cameraGesturesEnabled) }
37+
val invertedDragZoom = betaFlags.observe().map { InvertedDragZoomFeature(it.invertedDragZoom) }
3638

3739
val requestKin = betaFlags.observe().map { RequestKinFeature(it.giveRequestsEnabled) }
3840

app/src/main/java/com/getcode/view/main/account/BetaFlagsScreen.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ fun BetaFlagsScreen(
6060
stringResource(id = R.string.beta_camera_gestures_description),
6161
state.cameraGesturesEnabled,
6262
),
63+
BetaFeature(
64+
PrefsBool.CAMERA_DRAG_INVERTED,
65+
R.string.beta_camera_invert_drag,
66+
stringResource(id = R.string.beta_camera_invert_drag_description),
67+
state.invertedDragZoom,
68+
),
6369
BetaFeature(
6470
PrefsBool.TIP_CARD_FLIPPABLE,
6571
R.string.beta_tipcard_can_flip,

app/src/main/java/com/getcode/view/main/camera/CodeScanner.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import java.util.concurrent.TimeUnit
6060
fun CodeScanner(
6161
scanningEnabled: Boolean,
6262
cameraGesturesEnabled: Boolean,
63+
invertedDragZoomEnabled: Boolean,
6364
onPreviewStateChanged: (Boolean) -> Unit,
6465
onCodeScanned: (ScannableKikCode) -> Unit
6566
) {
@@ -154,6 +155,7 @@ fun CodeScanner(
154155
cameraControl,
155156
cameraInfo,
156157
cameraGesturesEnabled,
158+
invertedDragZoomEnabled,
157159
) { point ->
158160
autoFocusPoint = point
159161
}
@@ -220,6 +222,7 @@ private fun setupInteractionControls(
220222
cameraControl: CameraControl,
221223
cameraInfo: CameraInfo,
222224
cameraGesturesEnabled: Boolean,
225+
invertedDragZoomEnabled: Boolean,
223226
onTap: (Offset) -> Unit,
224227
) {
225228
var shouldIgnoreScroll = false
@@ -291,7 +294,11 @@ private fun setupInteractionControls(
291294
distanceY: Float
292295
): Boolean {
293296
if (!shouldIgnoreScroll) {
294-
accumulatedDelta += distanceY
297+
accumulatedDelta = if (invertedDragZoomEnabled) {
298+
accumulatedDelta + distanceY
299+
} else {
300+
accumulatedDelta - distanceY
301+
}
295302

296303
val deltaZoom = accumulatedDelta / 1000f
297304
val maxZoom = cameraInfo.zoomState.value?.maxZoomRatio ?: 1f
@@ -351,4 +358,4 @@ private fun animateZoomReset(cameraInfo: CameraInfo, cameraControl: CameraContro
351358
}
352359
}
353360
})
354-
}
361+
}

app/src/main/java/com/getcode/view/main/home/HomeScan.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ private fun HomeScan(
227227
CodeScanner(
228228
scanningEnabled = previewing,
229229
cameraGesturesEnabled = dataState.cameraGestures.enabled,
230+
invertedDragZoomEnabled = dataState.invertedDragZoom.enabled,
230231
onPreviewStateChanged = { previewing = it },
231232
onCodeScanned = {
232233
if (previewing) {

app/src/main/java/com/getcode/view/main/home/HomeViewModel.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.getcode.model.Feature
3232
import com.getcode.model.Fiat
3333
import com.getcode.model.FlippableTipCardFeature
3434
import com.getcode.model.IntentMetadata
35+
import com.getcode.model.InvertedDragZoomFeature
3536
import com.getcode.model.Kin
3637
import com.getcode.model.KinAmount
3738
import com.getcode.model.Kind
@@ -160,6 +161,7 @@ data class HomeUiModel(
160161
val buyModule: Feature = BuyModuleFeature(),
161162
val requestKin: Feature = RequestKinFeature(),
162163
val cameraGestures: Feature = CameraGesturesFeature(),
164+
val invertedDragZoom: Feature = InvertedDragZoomFeature(),
163165
val flippableTipCard: Feature = FlippableTipCardFeature(),
164166
val actions: List<HomeAction> = listOf(HomeAction.GIVE_KIN, HomeAction.TIP_CARD, HomeAction.BALANCE),
165167
val tipCardConnected: Boolean = false,
@@ -246,6 +248,14 @@ class HomeViewModel @Inject constructor(
246248
}
247249
}.launchIn(viewModelScope)
248250

251+
features.invertedDragZoom
252+
.distinctUntilChanged()
253+
.onEach { module ->
254+
uiFlow.update {
255+
it.copy(invertedDragZoom = module)
256+
}
257+
}.launchIn(viewModelScope)
258+
249259
features.tipCardFlippable
250260
.distinctUntilChanged()
251261
.onEach { module ->

app/src/main/res/values/strings-universal.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<string translatable="false" name="beta_kado_webview">Buy Kin Internally</string>
2828
<string translatable="false" name="beta_share_tweet_tip">Share Tweets to Tip</string>
2929
<string translatable="false" name="beta_camera_gestures">Camera Gestures</string>
30+
<string translatable="false" name="beta_camera_invert_drag">Invert Camera Drag-to-Zoom</string>
3031
<string translatable="false" name="beta_tipcard_can_flip">Tap Tip Card to See Back</string>
3132
<string translatable="false" name="beta_display_errors">Show Errors</string>
3233
<string name="beta_bucket_debugger_description" translatable="false">If enabled, you\'ll gain the ability to tap the balance on the Balance screen to inspect individual bucket balances.</string>
@@ -44,6 +45,7 @@
4445
<string name="beta_kado_webview_description" translatable="false">If enabled, the Buy Kin flow will open in an internal WebView.</string>
4546
<string name="beta_share_tweet_tip_description" translatable="false">If enabled, you\'ll gain the ability to share tweets directly from Twitter to Code to tip the author.</string>
4647
<string name="beta_camera_gestures_description" translatable="false">If enabled, you\'ll gain the ability to pinch-to-zoom, drag-to-zoom, and tap to auto focus on the camera screen.</string>
48+
<string name="beta_camera_invert_drag_description" translatable="false">If enabled, drag-to-zoom will operate in reverse (drag up to zoom instead of down).</string>
4749
<string name="beta_tipcard_can_flip_description" translatable="false">If enabled, you\'ll gain the ability to tap your own Tip Card to see the back.</string>
4850
<string name="subtitle_remoteSendText" translatable="false">%1$s %2$s</string>
4951
<string name="beta_resetTooltips" translatable="false">Reset Tooltips</string>

0 commit comments

Comments
 (0)