Skip to content

Commit a7a616b

Browse files
authored
SES-5239 : Media folder missing qa-tags (#1963)
* added QA tags for mediapicker folder and item * Imports cleanup
1 parent 97465f9 commit a7a616b

File tree

4 files changed

+49
-38
lines changed

4 files changed

+49
-38
lines changed

app/src/main/java/org/thoughtcrime/securesms/mediasend/compose/Components.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
package org.thoughtcrime.securesms.mediasend.compose
22

33
import android.net.Uri
4-
import androidx.compose.animation.AnimatedContent
54
import androidx.compose.animation.Crossfade
6-
import androidx.compose.animation.SizeTransform
7-
import androidx.compose.animation.core.tween
8-
import androidx.compose.animation.fadeIn
9-
import androidx.compose.animation.fadeOut
10-
import androidx.compose.animation.togetherWith
115
import androidx.compose.foundation.Image
126
import androidx.compose.foundation.background
137
import androidx.compose.foundation.border
@@ -50,6 +44,7 @@ import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi
5044
import network.loki.messenger.R
5145
import org.thoughtcrime.securesms.mediasend.Media
5246
import org.thoughtcrime.securesms.ui.AnimateFade
47+
import org.thoughtcrime.securesms.ui.qaTag
5348
import org.thoughtcrime.securesms.ui.theme.LocalColors
5449
import org.thoughtcrime.securesms.ui.theme.LocalDimensions
5550
import org.thoughtcrime.securesms.ui.theme.LocalType
@@ -60,12 +55,14 @@ fun MediaFolderCell(
6055
title: String,
6156
count: Int,
6257
thumbnailUri: Uri?,
58+
qaTag : String,
6359
onClick: () -> Unit
6460
) {
6561
Box(
6662
modifier = Modifier
6763
.fillMaxWidth()
6864
.aspectRatio(1f)
65+
.qaTag(qaTag)
6966
.clickable(onClick = onClick)
7067
) {
7168
AsyncImage(
@@ -137,6 +134,7 @@ fun MediaPickerItemCell(
137134
isSelected: Boolean = false,
138135
selectedIndex: Int = 1,
139136
isMultiSelect: Boolean,
137+
qaTag : String,
140138
onMediaChosen: (Media) -> Unit,
141139
onSelectionStarted: () -> Unit,
142140
onSelectionChanged: (selectedMedia: Media) -> Unit,
@@ -147,6 +145,7 @@ fun MediaPickerItemCell(
147145
Box(
148146
modifier = modifier
149147
.aspectRatio(1f)
148+
.qaTag(qaTag)
150149
.combinedClickable(
151150
onClick = {
152151
if (!isMultiSelect) {
@@ -272,7 +271,8 @@ private fun PreviewMediaFolderCell() {
272271
MediaFolderCell(
273272
title = "Test Title",
274273
count = 100,
275-
thumbnailUri = null
274+
thumbnailUri = null,
275+
qaTag = ""
276276
) { }
277277
}
278278

@@ -288,6 +288,7 @@ private fun Preview_MediaPickerItemCell_NotSelected() {
288288
onMediaChosen = {},
289289
onSelectionStarted = {},
290290
onSelectionChanged = {},
291+
qaTag = ""
291292
)
292293
}
293294

@@ -303,6 +304,7 @@ private fun Preview_MediaPickerItemCell_Selected() {
303304
onMediaChosen = {},
304305
onSelectionStarted = {},
305306
onSelectionChanged = {},
307+
qaTag = ""
306308
)
307309
}
308310

app/src/main/java/org/thoughtcrime/securesms/mediasend/compose/MediaPickerFolderScreen.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import androidx.compose.foundation.layout.padding
1212
import androidx.compose.foundation.layout.systemBars
1313
import androidx.compose.foundation.lazy.grid.GridCells
1414
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
15-
import androidx.compose.foundation.lazy.grid.items
15+
import androidx.compose.foundation.lazy.grid.itemsIndexed
1616
import androidx.compose.material3.ExperimentalMaterial3Api
1717
import androidx.compose.material3.Icon
1818
import androidx.compose.material3.IconButton
@@ -24,6 +24,7 @@ import androidx.compose.runtime.getValue
2424
import androidx.compose.ui.Modifier
2525
import androidx.compose.ui.platform.LocalConfiguration
2626
import androidx.compose.ui.res.painterResource
27+
import androidx.compose.ui.res.stringResource
2728
import androidx.compose.ui.tooling.preview.Preview
2829
import androidx.compose.ui.unit.dp
2930
import network.loki.messenger.R
@@ -67,7 +68,7 @@ private fun MediaPickerFolder(
6768
title: String,
6869
handleBack: () -> Unit,
6970
showManageMediaAccess: Boolean,
70-
manageMediaAccess : () -> Unit
71+
manageMediaAccess: () -> Unit
7172
) {
7273

7374
// span logic: screenWidth / media_picker_folder_width
@@ -107,15 +108,16 @@ private fun MediaPickerFolder(
107108
horizontalArrangement = Arrangement.spacedBy(LocalDimensions.current.tinySpacing),
108109
verticalArrangement = Arrangement.spacedBy(LocalDimensions.current.tinySpacing)
109110
) {
110-
items(
111+
itemsIndexed(
111112
items = folders,
112-
key = { folder -> folder.bucketId }
113-
) { folder ->
113+
key = { index, folder -> folder.bucketId }
114+
) { index, folder ->
114115
MediaFolderCell(
115116
title = folder.title,
116117
count = folder.itemCount,
117118
thumbnailUri = folder.thumbnailUri,
118119
onClick = { onFolderClick(folder) },
120+
qaTag = stringResource( R.string.qa_mediapicker_folder_item) +"-$index"
119121
)
120122
}
121123
}

app/src/main/java/org/thoughtcrime/securesms/mediasend/compose/MediaPickerItemScreen.kt

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ package org.thoughtcrime.securesms.mediasend.compose
22

33
import androidx.compose.foundation.background
44
import androidx.compose.foundation.layout.Arrangement
5-
import androidx.compose.foundation.layout.Box
65
import androidx.compose.foundation.layout.fillMaxSize
76
import androidx.compose.foundation.layout.padding
87
import androidx.compose.foundation.lazy.grid.GridCells
98
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
10-
import androidx.compose.foundation.lazy.grid.items
9+
import androidx.compose.foundation.lazy.grid.itemsIndexed
1110
import androidx.compose.material3.ExperimentalMaterial3Api
1211
import androidx.compose.material3.Icon
1312
import androidx.compose.material3.IconButton
@@ -18,6 +17,7 @@ import androidx.compose.runtime.collectAsState
1817
import androidx.compose.ui.Modifier
1918
import androidx.compose.ui.platform.LocalConfiguration
2019
import androidx.compose.ui.res.painterResource
20+
import androidx.compose.ui.res.stringResource
2121
import androidx.compose.ui.tooling.preview.Preview
2222
import androidx.compose.ui.unit.dp
2323
import androidx.core.net.toUri
@@ -108,31 +108,35 @@ private fun MediaPickerItem(
108108
)
109109
},
110110
) { padding ->
111-
LazyVerticalGrid(
112-
columns = GridCells.Fixed(columns),
113-
modifier = Modifier
114-
.padding(padding)
115-
.padding(LocalDimensions.current.tinySpacing)
116-
.fillMaxSize()
117-
.background(LocalColors.current.background),
118-
horizontalArrangement = Arrangement.spacedBy(LocalDimensions.current.tinySpacing),
119-
verticalArrangement = Arrangement.spacedBy(LocalDimensions.current.tinySpacing)
120-
) {
121-
items(media, key = { it.uri }) { item ->
122-
val isSelected = selectedMedia.any { it.uri == item.uri }
123-
MediaPickerItemCell(
124-
media = item,
125-
isSelected = isSelected,
126-
selectedIndex = selectedMedia.indexOfFirst { it.uri == item.uri },
127-
isMultiSelect = isMultiSelect,
128-
canLongPress = canLongPress,
129-
showSelectionOn = isSelected,
130-
onMediaChosen = { onSinglePick(it) },
131-
onSelectionStarted = onStartMultiSelect,
132-
onSelectionChanged = onToggleSelection,
133-
)
134-
}
111+
LazyVerticalGrid(
112+
columns = GridCells.Fixed(columns),
113+
modifier = Modifier
114+
.padding(padding)
115+
.padding(LocalDimensions.current.tinySpacing)
116+
.fillMaxSize()
117+
.background(LocalColors.current.background),
118+
horizontalArrangement = Arrangement.spacedBy(LocalDimensions.current.tinySpacing),
119+
verticalArrangement = Arrangement.spacedBy(LocalDimensions.current.tinySpacing)
120+
) {
121+
itemsIndexed(
122+
items = media,
123+
key = { _, item -> item.uri } // ignore index for stable key
124+
) { index, item ->
125+
val isSelected = selectedMedia.any { it.uri == item.uri }
126+
MediaPickerItemCell(
127+
media = item,
128+
isSelected = isSelected,
129+
selectedIndex = selectedMedia.indexOfFirst { it.uri == item.uri },
130+
isMultiSelect = isMultiSelect,
131+
canLongPress = canLongPress,
132+
showSelectionOn = isSelected,
133+
onMediaChosen = { onSinglePick(it) },
134+
onSelectionStarted = onStartMultiSelect,
135+
onSelectionChanged = onToggleSelection,
136+
qaTag = stringResource(R.string.qa_mediapicker_image_item) + "-${index}"
137+
)
135138
}
139+
}
136140
}
137141
}
138142

content-descriptions/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,9 @@
330330
<string name="qa_help_settings_support">preferences-option-help</string>
331331
<string name="qa_help_settings_faq">preferences-option-faq</string>
332332

333+
<!-- Media send -->
334+
<string name="qa_mediapicker_folder_item">mediapicker-folder-item-thumbnail</string>
335+
<string name="qa_mediapicker_image_item">mediapicker-image-item-thumbnail</string>
333336

334337
<!-- Misc. -->
335338
<string name="AccessibilityId_navigateBack">Navigate back</string>

0 commit comments

Comments
 (0)