Skip to content

Commit c40e2c5

Browse files
authored
Merge pull request #4 from shiki/issue/8627-giphy-picker-preview
Preview in Giphy Picker
2 parents 316fb59 + 6576d83 commit c40e2c5

File tree

6 files changed

+57
-3
lines changed

6 files changed

+57
-3
lines changed

WordPress/src/main/java/org/wordpress/android/ui/giphy/GiphyMediaViewHolder.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ class GiphyMediaViewHolder(
3434
* A function that is called when the thumbnail is clicked.
3535
*/
3636
private val onClickListener: (GiphyMediaViewModel) -> Unit,
37+
/**
38+
* A function that is called when the user performs a long press on the thumbnail
39+
*/
40+
private val onLongClickListener: (GiphyMediaViewModel) -> Unit,
41+
/**
42+
* The view used for this `ViewHolder`.
43+
*/
3744
itemView: View,
3845
/**
3946
* The dimensions used for the ImageView
@@ -53,14 +60,20 @@ class GiphyMediaViewHolder(
5360
layoutParams.height = thumbnailViewDimensions.height
5461

5562
setOnClickListener { mediaViewModel?.let(onClickListener) }
63+
setOnLongClickListener {
64+
val mediaViewModel = mediaViewModel ?: return@setOnLongClickListener false
65+
onLongClickListener(mediaViewModel)
66+
true
67+
}
5668
}
5769
}
5870

5971
/**
6072
* Update the views to use the given [GiphyMediaViewModel]
6173
*
6274
* The [mediaViewModel] is optional because we enable placeholders in the paged list created by
63-
* [GiphyPickerViewModel]. This causes null values to be bound to [GiphyMediaViewHolder] instances.
75+
* [org.wordpress.android.viewmodel.giphy.GiphyPickerViewModel]. This causes null values to be bound to
76+
* [GiphyMediaViewHolder] instances.
6477
*/
6578
override fun bind(item: GiphyMediaViewModel?) {
6679
super.bind(item)
@@ -126,6 +139,7 @@ class GiphyMediaViewHolder(
126139
fun create(
127140
imageManager: ImageManager,
128141
onClickListener: (GiphyMediaViewModel) -> Unit,
142+
onLongClickListener: (GiphyMediaViewModel) -> Unit,
129143
parent: ViewGroup,
130144
thumbnailViewDimensions: ThumbnailViewDimensions
131145
): GiphyMediaViewHolder {
@@ -135,6 +149,7 @@ class GiphyMediaViewHolder(
135149
return GiphyMediaViewHolder(
136150
imageManager = imageManager,
137151
onClickListener = onClickListener,
152+
onLongClickListener = onLongClickListener,
138153
itemView = view,
139154
thumbnailViewDimensions = thumbnailViewDimensions
140155
)

WordPress/src/main/java/org/wordpress/android/ui/giphy/GiphyPickerActivity.kt

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ import org.wordpress.android.WordPress
2020
import org.wordpress.android.analytics.AnalyticsTracker
2121
import org.wordpress.android.fluxc.model.SiteModel
2222
import org.wordpress.android.ui.giphy.GiphyMediaViewHolder.ThumbnailViewDimensions
23+
import org.wordpress.android.ui.media.MediaPreviewActivity
2324
import org.wordpress.android.util.AniUtils
2425
import org.wordpress.android.util.DisplayUtils
2526
import org.wordpress.android.util.ToastUtils
2627
import org.wordpress.android.util.image.ImageManager
2728
import org.wordpress.android.viewmodel.ViewModelFactory
29+
import org.wordpress.android.viewmodel.giphy.GiphyMediaViewModel
2830
import org.wordpress.android.viewmodel.giphy.GiphyPickerViewModel
2931
import org.wordpress.android.viewmodel.giphy.GiphyPickerViewModel.State
3032
import javax.inject.Inject
@@ -67,6 +69,7 @@ class GiphyPickerActivity : AppCompatActivity() {
6769
initializeRecyclerView()
6870
initializeSearchView()
6971
initializeSelectionBar()
72+
initializePreviewHandlers()
7073
initializeDownloadHandlers()
7174
initializeStateChangeHandlers()
7275
}
@@ -86,7 +89,8 @@ class GiphyPickerActivity : AppCompatActivity() {
8689
val pagedListAdapter = GiphyPickerPagedListAdapter(
8790
imageManager = imageManager,
8891
thumbnailViewDimensions = thumbnailViewDimensions,
89-
onMediaViewClickListener = viewModel::toggleSelected
92+
onMediaViewClickListener = viewModel::toggleSelected,
93+
onMediaViewLongClickListener = { showPreview(listOf(it)) }
9094
)
9195

9296
recycler.apply {
@@ -163,6 +167,30 @@ class GiphyPickerActivity : AppCompatActivity() {
163167
})
164168
}
165169

170+
/**
171+
* Set up listener for the Preview button
172+
*/
173+
private fun initializePreviewHandlers() {
174+
text_preview.setOnClickListener {
175+
val mediaViewModels = viewModel.selectedMediaViewModelList.value?.values?.toList()
176+
if (mediaViewModels != null && mediaViewModels.isNotEmpty()) {
177+
showPreview(mediaViewModels)
178+
}
179+
}
180+
}
181+
182+
/**
183+
* Show the images of the given [mediaViewModels] in [MediaPreviewActivity]
184+
*
185+
* @param mediaViewModels A non-empty list
186+
*/
187+
private fun showPreview(mediaViewModels: List<GiphyMediaViewModel>) {
188+
check(mediaViewModels.isNotEmpty())
189+
190+
val uris = mediaViewModels.map { it.previewImageUri.toString() }
191+
MediaPreviewActivity.showPreview(this, null, ArrayList(uris), uris.first())
192+
}
193+
166194
/**
167195
* Set up reacting to "Add" button presses and processing the result
168196
*/

WordPress/src/main/java/org/wordpress/android/ui/giphy/GiphyPickerPagedListAdapter.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ import org.wordpress.android.viewmodel.giphy.GiphyMediaViewModel
1313
class GiphyPickerPagedListAdapter(
1414
private val imageManager: ImageManager,
1515
private val thumbnailViewDimensions: ThumbnailViewDimensions,
16-
private val onMediaViewClickListener: (GiphyMediaViewModel) -> Unit
16+
private val onMediaViewClickListener: (GiphyMediaViewModel) -> Unit,
17+
private val onMediaViewLongClickListener: (GiphyMediaViewModel) -> Unit
1718
) : PagedListAdapter<GiphyMediaViewModel, GiphyMediaViewHolder>(DIFF_CALLBACK) {
1819
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GiphyMediaViewHolder {
1920
return GiphyMediaViewHolder.create(
2021
imageManager = imageManager,
2122
onClickListener = onMediaViewClickListener,
23+
onLongClickListener = onMediaViewLongClickListener,
2224
parent = parent,
2325
thumbnailViewDimensions = thumbnailViewDimensions
2426
)

WordPress/src/main/java/org/wordpress/android/viewmodel/giphy/GiphyMediaViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ interface GiphyMediaViewModel {
2525
* The thumbnail to show in a list. This is an animated GIF.
2626
*/
2727
val thumbnailUri: Uri
28+
/**
29+
* The image to use for previews in the picker
30+
*
31+
* This should be the `downsized` image which is downsized to be under 2mb.
32+
*/
33+
val previewImageUri: Uri
2834
/**
2935
* The large image to download.
3036
*

WordPress/src/main/java/org/wordpress/android/viewmodel/giphy/MutableGiphyMediaViewModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import org.wordpress.android.viewmodel.SingleLiveEvent
1818
class MutableGiphyMediaViewModel(
1919
override val id: String,
2020
override val thumbnailUri: Uri,
21+
override val previewImageUri: Uri,
2122
override val largeImageUri: Uri,
2223
override val title: String
2324
) : GiphyMediaViewModel {
@@ -44,6 +45,7 @@ class MutableGiphyMediaViewModel(
4445
constructor(media: Media) : this(
4546
id = media.id,
4647
thumbnailUri = Uri.parse(media.images.fixedHeightDownsampled.gifUrl),
48+
previewImageUri = Uri.parse(media.images.downsized.gifUrl),
4749
largeImageUri = Uri.parse(media.images.downsizedLarge.gifUrl),
4850
title = media.title
4951
)

WordPress/src/test/java/org/wordpress/android/viewmodel/giphy/GiphyPickerViewModelTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ class GiphyPickerViewModelTest {
218218
id = UUID.randomUUID().toString(),
219219
thumbnailUri = mock(),
220220
largeImageUri = mock(),
221+
previewImageUri = mock(),
221222
title = UUID.randomUUID().toString()
222223
)
223224
}

0 commit comments

Comments
 (0)