Skip to content

Commit b33fa84

Browse files
Lucashuang0802jessesquires
authored andcommitted
add audio message to swift sample app (jessesquires#1725)
1 parent 003740e commit b33fa84

4 files changed

Lines changed: 64 additions & 2 deletions

File tree

SwiftExample/SwiftExample.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
41AF84C51CFCA73B006ED473 /* ChatViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41AF84C41CFCA73B006ED473 /* ChatViewControllerTests.swift */; };
1313
41AF84E51CFCFE17006ED473 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 41AF84E41CFCFE17006ED473 /* Images.xcassets */; };
1414
872F10EC240969CC9051FF5B /* Pods_SwiftExampleTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4403B1A26FE3CFF614F3F725 /* Pods_SwiftExampleTests.framework */; };
15+
A0844FA11D38367C00D0EB83 /* jsq_messages_sample.m4a in Resources */ = {isa = PBXBuildFile; fileRef = A0844FA01D38367C00D0EB83 /* jsq_messages_sample.m4a */; };
1516
F80276D11CE38FA600063D88 /* DemoConversation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80276D01CE38FA600063D88 /* DemoConversation.swift */; };
1617
F80276D31CE38FEB00063D88 /* Conversation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80276D21CE38FEB00063D88 /* Conversation.swift */; };
1718
F80276D51CE3915700063D88 /* ChatViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80276D41CE3915700063D88 /* ChatViewController.swift */; };
@@ -41,6 +42,7 @@
4142
6C0AE5EA1B73CE4C012F9057 /* Pods-SwiftExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExampleTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests.debug.xcconfig"; sourceTree = "<group>"; };
4243
74B7033A0AA00050D9200C2B /* Pods-SwiftExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExampleTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExampleTests/Pods-SwiftExampleTests.release.xcconfig"; sourceTree = "<group>"; };
4344
8F35C314AF75B616FAD01E7A /* Pods-SwiftExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExample.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample.release.xcconfig"; sourceTree = "<group>"; };
45+
A0844FA01D38367C00D0EB83 /* jsq_messages_sample.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; name = jsq_messages_sample.m4a; path = ../../JSQMessagesDemo/jsq_messages_sample.m4a; sourceTree = "<group>"; };
4446
F80276D01CE38FA600063D88 /* DemoConversation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DemoConversation.swift; sourceTree = "<group>"; };
4547
F80276D21CE38FEB00063D88 /* Conversation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Conversation.swift; sourceTree = "<group>"; };
4648
F80276D41CE3915700063D88 /* ChatViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatViewController.swift; sourceTree = "<group>"; };
@@ -126,6 +128,7 @@
126128
F82D09C61CDFBB4900DD74CF /* Main.storyboard */,
127129
41AF84E41CFCFE17006ED473 /* Images.xcassets */,
128130
F82D09CB1CDFBB4900DD74CF /* LaunchScreen.storyboard */,
131+
A0844FA01D38367C00D0EB83 /* jsq_messages_sample.m4a */,
129132
F82D09CE1CDFBB4900DD74CF /* Info.plist */,
130133
);
131134
path = SwiftExample;
@@ -228,6 +231,7 @@
228231
buildActionMask = 2147483647;
229232
files = (
230233
F82D09CD1CDFBB4900DD74CF /* LaunchScreen.storyboard in Resources */,
234+
A0844FA11D38367C00D0EB83 /* jsq_messages_sample.m4a in Resources */,
231235
41AF84E51CFCFE17006ED473 /* Images.xcassets in Resources */,
232236
F82D09C81CDFBB4900DD74CF /* Main.storyboard in Resources */,
233237
);

SwiftExample/SwiftExample/ChatViewController.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,17 @@ class ChatViewController: JSQMessagesViewController {
137137
videoItemCopy.isReadyToPlay = false;
138138

139139
newMediaData = videoItemCopy;
140+
case is JSQAudioMediaItem:
141+
let audioItemCopy = (copyMediaData as! JSQAudioMediaItem).copy() as! JSQAudioMediaItem
142+
audioItemCopy.appliesMediaViewMaskAsOutgoing = false
143+
newMediaAttachmentCopy = audioItemCopy.audioData!.copy()
144+
145+
/**
146+
* Reset audio item to simulate "downloading" the audio
147+
*/
148+
audioItemCopy.audioData = nil;
149+
150+
newMediaData = audioItemCopy;
140151
default:
141152
assertionFailure("Error: This Media type was not recognised")
142153
}
@@ -187,6 +198,9 @@ class ChatViewController: JSQMessagesViewController {
187198
(newMediaData as! JSQVideoMediaItem).fileURL = newMediaAttachmentCopy as? NSURL
188199
(newMediaData as! JSQVideoMediaItem).isReadyToPlay = true
189200
self.collectionView!.reloadData()
201+
case is JSQAudioMediaItem:
202+
(newMediaData as! JSQAudioMediaItem).audioData = newMediaAttachmentCopy as? NSData
203+
self.collectionView!.reloadData()
190204
default:
191205
assertionFailure("Error: This Media type was not recognised")
192206
}
@@ -240,11 +254,21 @@ class ChatViewController: JSQMessagesViewController {
240254
self.addMedia(videoItem)
241255
}
242256

257+
let audioAction = UIAlertAction(title: "Send audio", style: .Default) { (action) in
258+
/**
259+
* Add fake audio
260+
*/
261+
let audioItem = self.buildAudioItem()
262+
263+
self.addMedia(audioItem)
264+
}
265+
243266
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
244267

245268
sheet.addAction(photoAction)
246269
sheet.addAction(locationAction)
247270
sheet.addAction(videoAction)
271+
sheet.addAction(audioAction)
248272
sheet.addAction(cancelAction)
249273

250274
self.presentViewController(sheet, animated: true, completion: nil)
@@ -258,6 +282,15 @@ class ChatViewController: JSQMessagesViewController {
258282
return videoItem
259283
}
260284

285+
func buildAudioItem() -> JSQAudioMediaItem {
286+
let sample = NSBundle.mainBundle().pathForResource("jsq_messages_sample", ofType: "m4a")
287+
let audioData = NSData(contentsOfFile: sample!)
288+
289+
let audioItem = JSQAudioMediaItem(data: audioData)
290+
291+
return audioItem
292+
}
293+
261294
func buildLocationItem() -> JSQLocationMediaItem {
262295
let ferryBuildingInSF = CLLocation(latitude: 37.795313, longitude: -122.393757)
263296

SwiftExample/SwiftExample/DemoConversation.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,22 @@ let message7 = JSQMessage(senderId: AvatarIdWoz, displayName: getName(User.Wazni
102102
let message8 = JSQMessage(senderId: AvatarIDLeonard, displayName: getName(User.Leonard), text: "It is unit-tested, free, open-source, and documented like a boss.")
103103
let message9 = JSQMessage(senderId: AvatarIdWoz, displayName: getName(User.Wazniak), text: "You guys need an award for this, I'll talk to my people at Apple. 💯 💯 💯")
104104

105+
// photo message
106+
let photoItem = JSQPhotoMediaItem(image: UIImage(named: "goldengate"))
107+
let photoMessage = JSQMessage(senderId: AvatarIdWoz, displayName: getName(User.Wazniak), media: photoItem)
108+
109+
// audio mesage
110+
let sample = NSBundle.mainBundle().pathForResource("jsq_messages_sample", ofType: "m4a")
111+
let audioData = NSData(contentsOfFile: sample!)
112+
let audioItem = JSQAudioMediaItem(data: audioData)
113+
let audioMessage = JSQMessage(senderId: AvatarIdWoz, displayName: getName(User.Wazniak), media: audioItem)
114+
105115
func makeGroupConversation()->[JSQMessage] {
106-
conversation = [message, message2,message3, message4, message5]
116+
conversation = [message, message2,message3, message4, message5, photoMessage, audioMessage]
107117
return conversation
108118
}
109119

110120
func makeNormalConversation() -> [JSQMessage] {
111-
conversation = [message6, message7, message8, message9]
121+
conversation = [message6, message7, message8, message9, photoMessage, audioMessage]
112122
return conversation
113123
}

SwiftExample/SwiftExampleTests/ChatViewControllerTests.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,21 @@ class ChatViewControllerTests: XCTestCase {
9696

9797
}
9898

99+
func testSendAudio() {
100+
let senderId = self.chatViewController.senderId()
101+
let senderDisplayName = self.chatViewController.senderDisplayName()
102+
103+
let audioItem = self.chatViewController.buildAudioItem()
104+
105+
self.chatViewController.addMedia(audioItem)
106+
107+
let newMessage = self.chatViewController.messages.last!
108+
109+
XCTAssert(newMessage.senderId == senderId)
110+
XCTAssert(newMessage.senderDisplayName == senderDisplayName)
111+
XCTAssert(newMessage.media is JSQAudioMediaItem)
112+
}
113+
99114
/**
100115
* Test when the messages array is empty, it should add a new incoming text message
101116
* Test when the messages array last message is a text message, it should add a new incoming text message

0 commit comments

Comments
 (0)