@ -15,21 +15,11 @@ public class ShareViewController: UINavigationController, ShareViewDelegate, SAE
private var hasInitialRootViewController = false
private var isReadyForAppExtensions = false
var loadViewController : SAELoadViewController !
override open func loadView ( ) {
super . loadView ( )
Logger . debug ( " \( self . logTag ) \( #function ) " )
// W e c a n ' t s h o w t h e c o n v e r s a t i o n p i c k e r u n t i l t h e D B i s s e t u p .
// N o r m a l l y t h i s w i l l o n l y t a k e a m o m e n t , s o r a t h e r t h a n f l i c k e r i n g a n d t h e n h i d i n g t h e l o a d i n g s c r e e n
// W e s t a r t a s i n v i s i b l e , a n d o n l y f a d e i t i n i f i t ' s g o i n g t o t a k e a w h i l e
self . view . alpha = 0
UIView . animate ( withDuration : 0.1 , delay : 0.5 , options : [ . curveEaseInOut ] , animations : {
self . view . alpha = 1
} , completion : nil )
// T h i s s h o u l d b e t h e f i r s t t h i n g w e d o .
let appContext = ShareAppExtensionContext ( rootViewController : self )
SetCurrentAppContext ( appContext )
@ -75,6 +65,20 @@ public class ShareViewController: UINavigationController, ShareViewDelegate, SAE
return
}
// D o n ' t d i s p l a y l o a d s c r e e n i m m e d i a t e l y , i n h o p e s t h a t w e c a n a v o i d i t a l t o g e t h e r .
after ( seconds : 2 ) . then { ( ) -> Void in
guard self . presentedViewController = = nil else {
Logger . debug ( " \( self . logTag ) setup completed quickly, no need to present load view controller. " )
return
}
Logger . debug ( " \( self . logTag ) setup is slow - showing loading screen " )
let loadViewController = SAELoadViewController ( delegate : self )
let navigationController = UINavigationController ( rootViewController : loadViewController )
self . present ( navigationController , animated : true )
} . retainUntilComplete ( )
// W e s h o u l d n ' t s e t u p o u r e n v i r o n m e n t u n t i l a f t e r w e ' v e c o n s u l t e d i s R e a d y F o r A p p E x t e n s i o n s .
AppSetup . setupEnvironment ( {
return NoopCallMessageHandler ( )
@ -86,8 +90,6 @@ public class ShareViewController: UINavigationController, ShareViewDelegate, SAE
// u p g r a d e p r o c e s s m a y d e p e n d o n E n v i r o n m e n t .
VersionMigrations . performUpdateCheck ( )
self . loadViewController = SAELoadViewController ( delegate : self )
self . pushViewController ( loadViewController , animated : false )
self . isNavigationBarHidden = true
// W e d o n ' t n e e d t o u s e " s c r e e n p r o t e c t i o n " i n t h e S A E .
@ -290,13 +292,6 @@ public class ShareViewController: UINavigationController, ShareViewDelegate, SAE
}
private func showErrorView ( title : String , message : String ) {
// e n s u r e v i e w i s v i s i b l e .
self . view . layer . removeAllAnimations ( )
UIView . animate ( withDuration : 0.1 , delay : 0 , options : [ . curveEaseInOut ] , animations : {
self . view . alpha = 1
} , completion : nil )
let viewController = SAEFailedViewController ( delegate : self , title : title , message : message )
self . setViewControllers ( [ viewController ] , animated : false )
}
@ -364,19 +359,21 @@ public class ShareViewController: UINavigationController, ShareViewDelegate, SAE
// MARK: H e l p e r s
private func presentConversationPicker ( ) {
// p a u s e a n y a n i m a t i o n r e v e a l i n g t h e " l o a d i n g " s c r e e n
self . view . layer . removeAllAnimations ( )
// O n c e w e ' v e p r e s e n t e d t h e c o n v e r s a t i o n p i c k e r , w e h i d e t h e l o a d i n g V C
// s o t h a t i t ' s n o t r e v e a l e d w h e n w e e v e n t u a l l y d i s m i s s t h e s h a r e e x t e n s i o n .
loadViewController . view . isHidden = true
self . buildAttachment ( ) . then { attachment -> Void in
let conversationPicker = SharingThreadPickerViewController ( shareViewDelegate : self )
let navigationController = UINavigationController ( rootViewController : conversationPicker )
navigationController . isNavigationBarHidden = true
conversationPicker . attachment = attachment
self . present ( navigationController , animated : true , completion : nil )
if let presentedViewController = self . presentedViewController {
Logger . debug ( " \( self . logTag ) dismissing \( presentedViewController ) before presenting conversation picker " )
self . dismiss ( animated : true ) {
self . present ( navigationController , animated : true )
}
} else {
Logger . debug ( " \( self . logTag ) no other modal, presenting conversation picker immediately " )
self . present ( navigationController , animated : true )
}
Logger . info ( " showing picker with attachment: \( attachment ) " )
} . catch { error in
let alertTitle = NSLocalizedString ( " SHARE_EXTENSION_UNABLE_TO_BUILD_ATTACHMENT_ALERT_TITLE " , comment : " Shown when trying to share content to a Signal user for the share extension. Followed by failure details. " )
@ -465,8 +462,13 @@ public class ShareViewController: UINavigationController, ShareViewDelegate, SAE
}
guard ! SignalAttachment . isInvalidVideo ( dataSource : dataSource , dataUTI : specificUTIType ) else {
let ( promise , exportSession ) = SignalAttachment . compressVideoAsMp4 ( dataSource : dataSource , dataUTI : specificUTIType , imageQuality : . medium )
// T O D O s h o w p r o g r e s s w i t h e x p o r t S e s s i o n
let ( promise , exportSession ) = SignalAttachment . compressVideoAsMp4 ( dataSource : dataSource , dataUTI : specificUTIType , imageQuality : . medium )
// T O D O u s e ` e x p o r t S e s s i o n . p r o g r e s s ` t o s h o w a m o r e p r e c i s e p r o g r e s s i n d i c a t o r i n t h e l o a d V i e w , m a y b e s h a r i n g t h e " s e n d i n g " p r o g r e s s U I .
// T O D O e x p o s e " C a n c e l "
// C a n w e m o v e t h i s p r o c e s s t o t h e e n d o f t h e s h a r e f l o w r a t h e r t h a n u p f r o n t ?
// C u r r e n t l y w e a r e n ' t a b l e t o g e n e r a t e a p r o p e r t h u m b n a i l o r p l a y t h e v i d e o i n t h e a p p e x t e n s i o n w i t h o u t f i r s t c o n v e r t i n g i t .
return promise
}