{"push_id":3155129539,"size":95,"distinct_size":95,"ref":"refs/heads/develop","head":"59760a02f1c1108f1c0b3be7336d8d5b8b9f18fd","before":"4682ea80b240b5cf489c7720640205a50f80689a","commits":[{"sha":"3e88a213ae8d4cca7064d47c1e7e0653d4046e67","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Add the first iteration of Giphy Picker\n\n![Giphy Picker](https://media.giphy.com/media/3MezaIyuAdXZi0OJDr/giphy.gif)\n\nThis is the first iteration for supporting Giphy (wordpress-mobile/WordPress-Android#8627). Only searching and endless scroll are currently available. For now, the picker can only be launched from the Media Browser.\n\nThe search uses the [Paging Library](https://goo.gl/oNfytZ) from Android Jetpack. The process works like this:\n\n0. `GiphyPickerActivity`: The `RecyclerView` is wired to receive events from `GiphyPickerViewModel.mediaViewModelPagedList` and is updated using `GiphyPickerPagedListAdapter`\n1. `GiphyPickerActivity`: User enters search text and presses _Done_\n2. `GiphyPickerViewModel` notifies `GiphyPickerDataSourceFactory` that there's a new search text\n3. `GiphyPickerDataSourceFactory` invalidates the `GiphyPickerDataSource` and creates a new instance of it\n4. `GiphyPickerDataSource` executes an initial Giphy API request. This initial load sets up the total count of GIFs that we can expect from the API.\n5. `GiphyPickerActivity`: The `RecyclerView` will be notified when the request is done and updates the list\n\nThe endless scroll is also automatically handled by the `GiphyPickerPagedListAdapter`.\n\n### UI\n\nThe layout files from `StockMediaPickerActivity` are reused since they are very similar. These are `stock_media_picker_thumbnail` and `stock_media_picker_activity`.\n\n### Testing\n\n1. Create a [Giphy API key](https://developers.giphy.com/docs/) and paste it in your `gradle.properties` as the value for `wp.giphy.api_key`\n2. Go to the Media Browser\n3. Click on the _Add_ button at the top right. Select the _Choose from Giphy_ option\n4. In the Giphy picker, type what you want to search for\n5. Press Enter on the keyboard to search\n\n### Known Issues\n\n- If you test this long enough, you will eventually hit API rate limits. This will cause empty blocks in the grid.\n- Error handling for network errors will be added later","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/3e88a213ae8d4cca7064d47c1e7e0653d4046e67"},{"sha":"ae80ce249bb71ebbb7cca9654dbd952189fccb41","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Rename `stock_media_picker_*` views to `media_picker_*`\n\nThese views are generic and are used in both the Stock Media Picker and the Giphy Picker.","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/ae80ce249bb71ebbb7cca9654dbd952189fccb41"},{"sha":"5b50ff70dd360364abc974049987f27d4e834f10","author":{"name":"Jayson Basanes","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Merge pull request #1 from shiki/issue/8627-giphy-picker-activity\n\nAdd the first iteration of Giphy Picker","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/5b50ff70dd360364abc974049987f27d4e834f10"},{"sha":"0e3c4da1f23f0439bae4bf0ba37c35f0066c7356","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Merge branch 'develop' into issue/8627-giphy-picker-multi-select","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/0e3c4da1f23f0439bae4bf0ba37c35f0066c7356"},{"sha":"31d7e4d183a0f0476faf64d5b96003b346a284e5","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Split `GiphyMediaViewModel` into an interface (immutable) and a mutable class\n\nThe `MutableGiphyMediaViewModel` will be used by `GiphyPickerViewModel` to modify the new `isSelected` and `selectionNumber` properties. These properties will be observed by the `GiphyMediaViewHolder` but it should never be able to modify them.","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/31d7e4d183a0f0476faf64d5b96003b346a284e5"},{"sha":"fdd7fd0cb14a08e18b5e0081c3bc16df5d261f58","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Save the `GiphyMediaViewHolder` `image_thumbnail` view in a property","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/fdd7fd0cb14a08e18b5e0081c3bc16df5d261f58"},{"sha":"5d1c8bc6cf91aea25fca86f9a0d4e934690f6896","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"GiphyPickerViewModel: Add saving and toggling of selected GiphyMediaViewModels","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/5d1c8bc6cf91aea25fca86f9a0d4e934690f6896"},{"sha":"bacb2c1b3e055979ac20c5debd4a9cee5b6a144a","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"GiphyMediaViewHolder: Scale the thumbnail when an item is selected\n\nTo allow observation of `LiveData` properties (i.e. `isSelected`) within the `ViewHolder`, it is modified to be a `LifecycleOwner`. The `LifecycleOwner` logic is contained in an abstract class named `LifecycleOwnerViewHolder`.","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/bacb2c1b3e055979ac20c5debd4a9cee5b6a144a"},{"sha":"9293275a7ecf47b39bb3efe3e7e7fa7c827a7b78","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Giphy Picker: Show the selection number when selecting an item","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/9293275a7ecf47b39bb3efe3e7e7fa7c827a7b78"},{"sha":"e1174a55c574db7b6baac1106423bf0026d9b1ae","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Giphy Picker: Show/hide the bottom bar when items are selected","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/e1174a55c574db7b6baac1106423bf0026d9b1ae"},{"sha":"567f741313f2e90ae573d993a2fc53c34f53a16f","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Giphy Picker: Clear the selected items when the search query is changed\n\nThis makes sense because the user will not be seeing the currently selected GiphyMediaViewModels if the new search query results are different.","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/567f741313f2e90ae573d993a2fc53c34f53a16f"},{"sha":"342929722f2ad4c0c6267c701945a41ac61ed820","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Giphy Picker: Fix ktlint and checkstyle issues","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/342929722f2ad4c0c6267c701945a41ac61ed820"},{"sha":"2f897de284f670b57114eac729e887d34fcf182c","author":{"name":"Jayson Basanes","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Merge pull request #2 from shiki/issue/8627-giphy-picker-multi-select\n\nAdd item selection to Giphy Picker","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/2f897de284f670b57114eac729e887d34fcf182c"},{"sha":"91875668943a35aeee544d1dafd5f8d5ae206ef4","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Make `GiphyPickerViewModel` a `CoroutineScope` using a new base class – `CoroutineScopedViewModel`","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/91875668943a35aeee544d1dafd5f8d5ae206ef4"},{"sha":"f47e95e2d6223582f6c1c0477f2b27fb247b3cc7","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Make `GiphyPickerViewModel` injectable\n\nWe will need to use `Context` inside this `ViewModel` in order to use `WPMediaUtils.fetchMediaAndDoNext` to download GIFs.","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/f47e95e2d6223582f6c1c0477f2b27fb247b3cc7"},{"sha":"a55070f4ca2c369ce279952ff5352a58ea157555","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Pass SiteModel to GiphyPickerViewModel","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/a55070f4ca2c369ce279952ff5352a58ea157555"},{"sha":"5bfea1124e20f27e3a22130923fac3f752e5d1a3","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Split WPMediaUtils.fetchMediaAndDoNext into 2 reusable methods\n\nThe new one, `fetchMedia` gives more control on when a download failure is propagated to the user. This makes it useful in a multiple download scenario. The old one, `fetchMediaAndDoNext` functions as it did before but is now using the `fetchMedia` internally.","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/5bfea1124e20f27e3a22130923fac3f752e5d1a3"},{"sha":"022bb748130cb0e40e00cfe0f2586f19483d10b8","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Giphy Picker: Download and exit when the Add button is clicked\n\nWhen the _Add_ button is clicked, images are downloaded concurrently in\nthe background. After downloading, we save them as FluxC `MediaModel`\nobjects. If everything is successful, the `Activity` exits returning\nthe `ids` of the `MediaModel` objects.","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/022bb748130cb0e40e00cfe0f2586f19483d10b8"},{"sha":"b102b57bfe74d041b1ff08edfe7afb89b047e46f","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Giphy Picker: Upload media in MediaBrowser\n\n`GiphyPickerActivity` will respond with a list of `MediaModel.id`. The\n`MediaBrowserActivity` will receive the list and queue the `MediaModel`\nobjects for upload.","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/b102b57bfe74d041b1ff08edfe7afb89b047e46f"},{"sha":"20ef8faea7a82b1d2d2fc98b55527bd05bc062dd","author":{"name":"Shiki","email":"2dabbdf340c4c4cf4e576cbc1e59cb49d871a715@basanes.net"},"message":"Add ProgressBar to media_picker_activity\n\nThe `ProgressBar` will be used by Giphy only. The `ProgressBar` will\nreplace the \"Add\" text when downloading. Converting the parent layout to\n`ConstraintLayout` also makes it easy to align both the `ProgressBar`\nand the \"Add\" text.","distinct":true,"url":"https://api.github.com/repos/wordpress-mobile/WordPress-Android/commits/20ef8faea7a82b1d2d2fc98b55527bd05bc062dd"}]}
{"actor":{"display_login":"kwonye"}}