show *most recent* thumbnail in album picker

pull/1/head
Michael Kirk 7 years ago
parent 87d1338412
commit 58eda67a79

@ -159,7 +159,7 @@ class ImagePickerGridController: UICollectionViewController, PhotoLibraryDelegat
collectionView.reloadData() collectionView.reloadData()
collectionView.layoutIfNeeded() collectionView.layoutIfNeeded()
let count = photoCollectionContents.count let count = photoCollectionContents.assetCount
for index in 0..<count { for index in 0..<count {
let asset = photoCollectionContents.asset(at: index) let asset = photoCollectionContents.asset(at: index)
let assetId = asset.localIdentifier let assetId = asset.localIdentifier
@ -401,7 +401,7 @@ class ImagePickerGridController: UICollectionViewController, PhotoLibraryDelegat
} }
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return photoCollectionContents.count return photoCollectionContents.assetCount
} }
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

@ -112,14 +112,15 @@ class PhotoCollectionPickerController: OWSTableViewController, PhotoLibraryDeleg
imageView.autoSetDimensions(to: CGSize(width: kImageSize, height: kImageSize)) imageView.autoSetDimensions(to: CGSize(width: kImageSize, height: kImageSize))
let contents = collection.contents() let contents = collection.contents()
if contents.count > 0 {
let photoMediaSize = PhotoMediaSize(thumbnailSize: CGSize(width: kImageSize, height: kImageSize)) let photoMediaSize = PhotoMediaSize(thumbnailSize: CGSize(width: kImageSize, height: kImageSize))
let assetItem = contents.assetItem(at: 0, photoMediaSize: photoMediaSize) if let assetItem = contents.lastAssetItem(photoMediaSize: photoMediaSize) {
imageView.image = assetItem.asyncThumbnail { [weak imageView] image in imageView.image = assetItem.asyncThumbnail { [weak imageView] image in
guard let strongImageView = imageView else { guard let strongImageView = imageView else {
return return
} }
guard let image = image else { guard let image = image else {
owsFailDebug("image was unexpectedly nil")
return return
} }
strongImageView.image = image strongImageView.image = image

@ -25,12 +25,12 @@ class PhotoMediaSize {
class PhotoPickerAssetItem: PhotoGridItem { class PhotoPickerAssetItem: PhotoGridItem {
let asset: PHAsset let asset: PHAsset
let album: PhotoCollectionContents let photoCollectionContents: PhotoCollectionContents
let photoMediaSize: PhotoMediaSize let photoMediaSize: PhotoMediaSize
init(asset: PHAsset, album: PhotoCollectionContents, photoMediaSize: PhotoMediaSize) { init(asset: PHAsset, photoCollectionContents: PhotoCollectionContents, photoMediaSize: PhotoMediaSize) {
self.asset = asset self.asset = asset
self.album = album self.photoCollectionContents = photoCollectionContents
self.photoMediaSize = photoMediaSize self.photoMediaSize = photoMediaSize
} }
@ -47,7 +47,7 @@ class PhotoPickerAssetItem: PhotoGridItem {
} }
func asyncThumbnail(completion: @escaping (UIImage?) -> Void) -> UIImage? { func asyncThumbnail(completion: @escaping (UIImage?) -> Void) -> UIImage? {
album.requestThumbnail(for: self.asset, thumbnailSize: photoMediaSize.thumbnailSize) { image, _ in photoCollectionContents.requestThumbnail(for: self.asset, thumbnailSize: photoMediaSize.thumbnailSize) { image, _ in
completion(image) completion(image)
} }
return nil return nil
@ -70,19 +70,51 @@ class PhotoCollectionContents {
self.localizedTitle = localizedTitle self.localizedTitle = localizedTitle
} }
var count: Int { private let imageManager = PHCachingImageManager()
// MARK: - Asset Accessors
var assetCount: Int {
return fetchResult.count return fetchResult.count
} }
private let imageManager = PHCachingImageManager() var lastAsset: PHAsset? {
guard assetCount > 0 else {
return nil
}
return asset(at: assetCount - 1)
}
var firstAsset: PHAsset? {
guard assetCount > 0 else {
return nil
}
return asset(at: 0)
}
func asset(at index: Int) -> PHAsset { func asset(at index: Int) -> PHAsset {
return fetchResult.object(at: index) return fetchResult.object(at: index)
} }
// MARK: - AssetItem Accessors
func assetItem(at index: Int, photoMediaSize: PhotoMediaSize) -> PhotoPickerAssetItem { func assetItem(at index: Int, photoMediaSize: PhotoMediaSize) -> PhotoPickerAssetItem {
let mediaAsset = asset(at: index) let mediaAsset = asset(at: index)
return PhotoPickerAssetItem(asset: mediaAsset, album: self, photoMediaSize: photoMediaSize) return PhotoPickerAssetItem(asset: mediaAsset, photoCollectionContents: self, photoMediaSize: photoMediaSize)
}
func firstAssetItem(photoMediaSize: PhotoMediaSize) -> PhotoPickerAssetItem? {
guard let mediaAsset = firstAsset else {
return nil
}
return PhotoPickerAssetItem(asset: mediaAsset, photoCollectionContents: self, photoMediaSize: photoMediaSize)
}
func lastAssetItem(photoMediaSize: PhotoMediaSize) -> PhotoPickerAssetItem? {
guard let mediaAsset = lastAsset else {
return nil
}
return PhotoPickerAssetItem(asset: mediaAsset, photoCollectionContents: self, photoMediaSize: photoMediaSize)
} }
// MARK: ImageManager // MARK: ImageManager
@ -242,7 +274,7 @@ class PhotoLibrary: NSObject, PHPhotoLibraryChangeObserver {
} }
let photoCollection = PhotoCollection(collection: assetCollection) let photoCollection = PhotoCollection(collection: assetCollection)
// Hide empty collections. // Hide empty collections.
guard photoCollection.contents().count > 0 else { guard photoCollection.contents().assetCount > 0 else {
return return
} }
collections.append(photoCollection) collections.append(photoCollection)

Loading…
Cancel
Save