Some Post-demo Cleanups (#200)

* Remove redundant string

* Use placeholder avatar on home screen

* Add initial home screen ui test

* Fix settings screen PR remarks

* Remove UIKit alert from home screen sign out

* Remove UIKit alert from soft logout clear all data

* Add reference screenshots for home screen UI tests

* Formatting fixes

* Add clearing room method to client proxy

* Clear room proxies on screen dismiss

* Fix retain cycle in room view model

* Do not go into authentication state immediately

* Define sizes for user and room avatars on different screens

* Use defined avatar sizes everywhere

* Disable image disk caching

* Rename rounded corner shape

* Fix text color of placeholder avatars

* Fix PR reviews on formatted body text

* Fix merge conflict

* Remove shouldShowSenderDetails everywhere and just use it from inGroupState

* Remove redundant linter disablings

* Fix PR remarks

* Rename media provider size parameter
This commit is contained in:
ismailgulek
2022-09-23 12:21:41 +03:00
committed by GitHub
parent b9f8fb0b6f
commit bdc83dac27
54 changed files with 307 additions and 204 deletions
@@ -30,28 +30,28 @@ struct MediaProvider: MediaProviderProtocol {
self.backgroundTaskService = backgroundTaskService
}
func imageFromSource(_ source: MediaSource?, size: CGSize?) -> UIImage? {
func imageFromSource(_ source: MediaSource?, avatarSize: AvatarSize?) -> UIImage? {
guard let source = source else {
return nil
}
let cacheKey = cacheKeyForURLString(source.underlyingSource.url(), size: size)
let cacheKey = cacheKeyForURLString(source.underlyingSource.url(), avatarSize: avatarSize)
return imageCache.retrieveImageInMemoryCache(forKey: cacheKey, options: nil)
}
func imageFromURLString(_ urlString: String?, size: CGSize?) -> UIImage? {
func imageFromURLString(_ urlString: String?, avatarSize: AvatarSize?) -> UIImage? {
guard let urlString = urlString else {
return nil
}
return imageFromSource(MediaSource(source: clientProxy.mediaSourceForURLString(urlString)), size: size)
return imageFromSource(MediaSource(source: clientProxy.mediaSourceForURLString(urlString)), avatarSize: avatarSize)
}
func loadImageFromURLString(_ urlString: String, size: CGSize?) async -> Result<UIImage, MediaProviderError> {
await loadImageFromSource(MediaSource(source: clientProxy.mediaSourceForURLString(urlString)), size: size)
func loadImageFromURLString(_ urlString: String, avatarSize: AvatarSize?) async -> Result<UIImage, MediaProviderError> {
await loadImageFromSource(MediaSource(source: clientProxy.mediaSourceForURLString(urlString)), avatarSize: avatarSize)
}
func loadImageFromSource(_ source: MediaSource, size: CGSize?) async -> Result<UIImage, MediaProviderError> {
if let image = imageFromSource(source, size: size) {
func loadImageFromSource(_ source: MediaSource, avatarSize: AvatarSize?) async -> Result<UIImage, MediaProviderError> {
if let image = imageFromSource(source, avatarSize: avatarSize) {
return .success(image)
}
@@ -60,7 +60,7 @@ struct MediaProvider: MediaProviderProtocol {
loadImageBgTask?.stop()
}
let cacheKey = cacheKeyForURLString(source.underlyingSource.url(), size: size)
let cacheKey = cacheKeyForURLString(source.underlyingSource.url(), avatarSize: avatarSize)
return await Task.detached { () -> Result<UIImage, MediaProviderError> in
if case let .success(cacheResult) = await imageCache.retrieveImage(forKey: cacheKey),
@@ -70,8 +70,8 @@ struct MediaProvider: MediaProviderProtocol {
do {
let imageData = try await Task.detached { () -> Data in
if let size = size {
return try await clientProxy.loadMediaThumbnailForSource(source.underlyingSource, width: UInt(size.width), height: UInt(size.height))
if let avatarSize = avatarSize {
return try await clientProxy.loadMediaThumbnailForSource(source.underlyingSource, width: UInt(avatarSize.scaledValue), height: UInt(avatarSize.scaledValue))
} else {
return try await clientProxy.loadMediaContentForSource(source.underlyingSource)
}
@@ -96,9 +96,9 @@ struct MediaProvider: MediaProviderProtocol {
// MARK: - Private
private func cacheKeyForURLString(_ urlString: String, size: CGSize?) -> String {
if let size = size {
return "\(urlString){\(size.width),\(size.height)}"
private func cacheKeyForURLString(_ urlString: String, avatarSize: AvatarSize?) -> String {
if let avatarSize = avatarSize {
return "\(urlString){\(avatarSize.scaledValue),\(avatarSize.scaledValue)}"
} else {
return urlString
}
@@ -22,33 +22,31 @@ enum MediaProviderError: Error {
case invalidImageData
}
let MediaProviderDefaultAvatarSize = CGSize(width: 44.0, height: 44.0)
@MainActor
protocol MediaProviderProtocol {
func imageFromSource(_ source: MediaSource?, size: CGSize?) -> UIImage?
func imageFromSource(_ source: MediaSource?, avatarSize: AvatarSize?) -> UIImage?
@discardableResult func loadImageFromSource(_ source: MediaSource, size: CGSize?) async -> Result<UIImage, MediaProviderError>
@discardableResult func loadImageFromSource(_ source: MediaSource, avatarSize: AvatarSize?) async -> Result<UIImage, MediaProviderError>
func imageFromURLString(_ urlString: String?, size: CGSize?) -> UIImage?
func imageFromURLString(_ urlString: String?, avatarSize: AvatarSize?) -> UIImage?
@discardableResult func loadImageFromURLString(_ urlString: String, size: CGSize?) async -> Result<UIImage, MediaProviderError>
@discardableResult func loadImageFromURLString(_ urlString: String, avatarSize: AvatarSize?) async -> Result<UIImage, MediaProviderError>
}
extension MediaProviderProtocol {
func imageFromSource(_ source: MediaSource?) -> UIImage? {
imageFromSource(source, size: nil)
imageFromSource(source, avatarSize: nil)
}
@discardableResult func loadImageFromSource(_ source: MediaSource) async -> Result<UIImage, MediaProviderError> {
await loadImageFromSource(source, size: nil)
await loadImageFromSource(source, avatarSize: nil)
}
func imageFromURLString(_ urlString: String?) -> UIImage? {
imageFromURLString(urlString, size: nil)
imageFromURLString(urlString, avatarSize: nil)
}
@discardableResult func loadImageFromURLString(_ urlString: String) async -> Result<UIImage, MediaProviderError> {
await loadImageFromURLString(urlString, size: nil)
await loadImageFromURLString(urlString, avatarSize: nil)
}
}
@@ -18,15 +18,15 @@ import Foundation
import UIKit
struct MockMediaProvider: MediaProviderProtocol {
func imageFromSource(_ source: MediaSource?, size: CGSize?) -> UIImage? {
func imageFromSource(_ source: MediaSource?, avatarSize: AvatarSize?) -> UIImage? {
nil
}
func loadImageFromSource(_ source: MediaSource, size: CGSize?) async -> Result<UIImage, MediaProviderError> {
func loadImageFromSource(_ source: MediaSource, avatarSize: AvatarSize?) async -> Result<UIImage, MediaProviderError> {
.failure(.failedRetrievingImage)
}
func imageFromURLString(_ urlString: String?, size: CGSize?) -> UIImage? {
func imageFromURLString(_ urlString: String?, avatarSize: AvatarSize?) -> UIImage? {
if urlString != nil {
return UIImage(systemName: "photo")
}
@@ -34,7 +34,7 @@ struct MockMediaProvider: MediaProviderProtocol {
return nil
}
func loadImageFromURLString(_ urlString: String, size: CGSize?) async -> Result<UIImage, MediaProviderError> {
func loadImageFromURLString(_ urlString: String, avatarSize: AvatarSize?) async -> Result<UIImage, MediaProviderError> {
.failure(.failedRetrievingImage)
}
}