/************************************************************
|
* * Hyphenate CONFIDENTIAL
|
* __________________
|
* Copyright (C) 2016 Hyphenate Inc. All rights reserved.
|
*
|
* NOTICE: All information contained herein is, and remains
|
* the property of Hyphenate Inc.
|
* Dissemination of this information or reproduction of this material
|
* is strictly forbidden unless prior written permission is obtained
|
* from Hyphenate Inc.
|
*/
|
|
#import "EaseMessageReadManager.h"
|
#import "UIImageView+WebCache.h"
|
#import "EMCDDeviceManager.h"
|
|
#import "MWPhotoBrowser.h"
|
|
#define IMAGE_MAX_SIZE_5k 5120*2880
|
|
static EaseMessageReadManager *detailInstance = nil;
|
|
@interface EaseMessageReadManager() <MWPhotoBrowserDelegate>
|
|
@property (strong, nonatomic) UIWindow *keyWindow;
|
|
@property (strong, nonatomic) NSMutableArray *photos;
|
@property (strong, nonatomic) UINavigationController *photoNavigationController;
|
|
@property (strong, nonatomic) UIAlertView *textAlertView;
|
|
@end
|
|
@implementation EaseMessageReadManager
|
|
+ (id)defaultManager
|
{
|
@synchronized(self){
|
static dispatch_once_t pred;
|
dispatch_once(&pred, ^{
|
detailInstance = [[self alloc] init];
|
});
|
}
|
|
return detailInstance;
|
}
|
|
#pragma mark - getter
|
|
- (UIWindow *)keyWindow
|
{
|
if(_keyWindow == nil)
|
{
|
_keyWindow = [[UIApplication sharedApplication] keyWindow];
|
}
|
|
return _keyWindow;
|
}
|
|
- (NSMutableArray *)photos
|
{
|
if (_photos == nil) {
|
_photos = [[NSMutableArray alloc] init];
|
}
|
|
return _photos;
|
}
|
|
- (MWPhotoBrowser *)photoBrowser
|
{
|
if (_photoBrowser == nil) {
|
_photoBrowser = [[MWPhotoBrowser alloc] initWithDelegate:self];
|
_photoBrowser.displayActionButton = YES;
|
_photoBrowser.displayNavArrows = YES;
|
_photoBrowser.displaySelectionButtons = NO;
|
_photoBrowser.alwaysShowControls = NO;
|
_photoBrowser.wantsFullScreenLayout = YES;
|
_photoBrowser.zoomPhotosToFill = YES;
|
_photoBrowser.enableGrid = NO;
|
_photoBrowser.startOnGrid = NO;
|
[_photoBrowser setCurrentPhotoIndex:0];
|
}
|
|
return _photoBrowser;
|
}
|
|
- (UINavigationController *)photoNavigationController
|
{
|
if (_photoNavigationController == nil) {
|
_photoNavigationController = [[UINavigationController alloc] initWithRootViewController:self.photoBrowser];
|
_photoNavigationController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
|
}
|
|
[self.photoBrowser reloadData];
|
return _photoNavigationController;
|
}
|
|
#pragma mark - MWPhotoBrowserDelegate
|
|
- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser
|
{
|
return [self.photos count];
|
}
|
|
- (id <MWPhoto>)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index
|
{
|
if (index < self.photos.count)
|
{
|
return [self.photos objectAtIndex:index];
|
}
|
|
return nil;
|
}
|
|
|
#pragma mark - private
|
|
|
#pragma mark - public
|
|
- (void)showBrowserWithImages:(NSArray *)imageArray
|
{
|
if (imageArray && [imageArray count] > 0) {
|
NSMutableArray *photoArray = [NSMutableArray array];
|
for (id object in imageArray) {
|
MWPhoto *photo;
|
if ([object isKindOfClass:[UIImage class]]) {
|
CGFloat imageSize = ((UIImage*)object).size.width * ((UIImage*)object).size.height;
|
if (imageSize > IMAGE_MAX_SIZE_5k) {
|
photo = [MWPhoto photoWithImage:[self scaleImage:object toScale:(IMAGE_MAX_SIZE_5k)/imageSize]];
|
} else {
|
photo = [MWPhoto photoWithImage:object];
|
}
|
}
|
else if ([object isKindOfClass:[NSURL class]])
|
{
|
photo = [MWPhoto photoWithURL:object];
|
}
|
else if ([object isKindOfClass:[NSString class]])
|
{
|
|
}
|
[photoArray addObject:photo];
|
}
|
|
self.photos = photoArray;
|
}
|
|
UIViewController *rootController = [self.keyWindow rootViewController];
|
[rootController presentViewController:self.photoNavigationController animated:YES completion:nil];
|
}
|
|
- (BOOL)prepareMessageAudioModel:(EaseMessageModel *)messageModel
|
updateViewCompletion:(void (^)(EaseMessageModel *prevAudioModel, EaseMessageModel *currentAudioModel))updateCompletion
|
{
|
BOOL isPrepare = NO;
|
|
if(messageModel.bodyType == EMMessageBodyTypeVoice)
|
{
|
EaseMessageModel *prevAudioModel = self.audioMessageModel;
|
EaseMessageModel *currentAudioModel = messageModel;
|
self.audioMessageModel = messageModel;
|
|
BOOL isPlaying = messageModel.isMediaPlaying;
|
if (isPlaying) {
|
messageModel.isMediaPlaying = NO;
|
self.audioMessageModel = nil;
|
currentAudioModel = nil;
|
[[EMCDDeviceManager sharedInstance] stopPlaying];
|
}
|
else {
|
messageModel.isMediaPlaying = YES;
|
prevAudioModel.isMediaPlaying = NO;
|
isPrepare = YES;
|
|
if (!messageModel.isMediaPlayed) {
|
messageModel.isMediaPlayed = YES;
|
EMMessage *chatMessage = messageModel.message;
|
if (chatMessage.ext) {
|
NSMutableDictionary *dict = [chatMessage.ext mutableCopy];
|
if (![[dict objectForKey:@"isPlayed"] boolValue]) {
|
[dict setObject:@YES forKey:@"isPlayed"];
|
chatMessage.ext = dict;
|
[[EMClient sharedClient].chatManager updateMessage:chatMessage completion:nil];
|
}
|
} else {
|
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:chatMessage.ext];
|
[dic setObject:@YES forKey:@"isPlayed"];
|
chatMessage.ext = dic;
|
[[EMClient sharedClient].chatManager updateMessage:chatMessage completion:nil];
|
}
|
}
|
}
|
|
if (updateCompletion) {
|
updateCompletion(prevAudioModel, currentAudioModel);
|
}
|
}
|
|
return isPrepare;
|
}
|
|
- (EaseMessageModel *)stopMessageAudioModel
|
{
|
EaseMessageModel *model = nil;
|
if (self.audioMessageModel.bodyType == EMMessageBodyTypeVoice) {
|
if (self.audioMessageModel.isMediaPlaying) {
|
model = self.audioMessageModel;
|
}
|
self.audioMessageModel.isMediaPlaying = NO;
|
self.audioMessageModel = nil;
|
}
|
|
return model;
|
}
|
|
- (UIImage *)scaleImage:(UIImage *)image toScale:(float)scaleSize
|
{
|
UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize));
|
[image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
|
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
|
UIGraphicsEndImageContext();
|
return scaledImage;
|
}
|
|
@end
|