mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-30 08:12:40 +00:00
Merge pull request #110 from vector-im/add_room_member_details_screen
Add Room Member Details screen
This commit is contained in:
commit
dbdf61b167
22 changed files with 1017 additions and 4 deletions
|
@ -128,6 +128,14 @@
|
||||||
F047DBB51C576F2200952DA2 /* AuthenticationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F047DBB41C576F2200952DA2 /* AuthenticationViewController.xib */; };
|
F047DBB51C576F2200952DA2 /* AuthenticationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F047DBB41C576F2200952DA2 /* AuthenticationViewController.xib */; };
|
||||||
F047DBB91C576F6600952DA2 /* AuthInputsPasswordBasedView.m in Sources */ = {isa = PBXBuildFile; fileRef = F047DBB71C576F6600952DA2 /* AuthInputsPasswordBasedView.m */; };
|
F047DBB91C576F6600952DA2 /* AuthInputsPasswordBasedView.m in Sources */ = {isa = PBXBuildFile; fileRef = F047DBB71C576F6600952DA2 /* AuthInputsPasswordBasedView.m */; };
|
||||||
F047DBBA1C576F6600952DA2 /* AuthInputsPasswordBasedView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F047DBB81C576F6600952DA2 /* AuthInputsPasswordBasedView.xib */; };
|
F047DBBA1C576F6600952DA2 /* AuthInputsPasswordBasedView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F047DBB81C576F6600952DA2 /* AuthInputsPasswordBasedView.xib */; };
|
||||||
|
F056417B1C7C9FD7002276ED /* TableViewCellWithButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F05641791C7C9FD7002276ED /* TableViewCellWithButton.m */; };
|
||||||
|
F056417C1C7C9FD7002276ED /* TableViewCellWithButton.xib in Resources */ = {isa = PBXBuildFile; fileRef = F056417A1C7C9FD7002276ED /* TableViewCellWithButton.xib */; };
|
||||||
|
F05641831C7CBB58002276ED /* bubbles_bg_landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = F056417D1C7CBB58002276ED /* bubbles_bg_landscape.png */; };
|
||||||
|
F05641841C7CBB58002276ED /* bubbles_bg_landscape@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F056417E1C7CBB58002276ED /* bubbles_bg_landscape@2x.png */; };
|
||||||
|
F05641851C7CBB58002276ED /* bubbles_bg_landscape@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = F056417F1C7CBB58002276ED /* bubbles_bg_landscape@3x.png */; };
|
||||||
|
F056418C1C7CBEBD002276ED /* group.png in Resources */ = {isa = PBXBuildFile; fileRef = F05641891C7CBEBD002276ED /* group.png */; };
|
||||||
|
F056418D1C7CBEBD002276ED /* group@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F056418A1C7CBEBD002276ED /* group@2x.png */; };
|
||||||
|
F056418E1C7CBEBD002276ED /* group@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = F056418B1C7CBEBD002276ED /* group@3x.png */; };
|
||||||
F05895001B8B7E6600B73E85 /* RoomBubbleCellData.m in Sources */ = {isa = PBXBuildFile; fileRef = F05894FF1B8B7E6600B73E85 /* RoomBubbleCellData.m */; };
|
F05895001B8B7E6600B73E85 /* RoomBubbleCellData.m in Sources */ = {isa = PBXBuildFile; fileRef = F05894FF1B8B7E6600B73E85 /* RoomBubbleCellData.m */; };
|
||||||
F08BE09E1B87025B00C480FB /* EventFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = F08BE09D1B87025B00C480FB /* EventFormatter.m */; };
|
F08BE09E1B87025B00C480FB /* EventFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = F08BE09D1B87025B00C480FB /* EventFormatter.m */; };
|
||||||
F08BE0A21B87064000C480FB /* RoomDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = F08BE0A11B87064000C480FB /* RoomDataSource.m */; };
|
F08BE0A21B87064000C480FB /* RoomDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = F08BE0A11B87064000C480FB /* RoomDataSource.m */; };
|
||||||
|
@ -149,6 +157,8 @@
|
||||||
F094AA351B78E42600B1FBBF /* RecentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F094AA231B78E42600B1FBBF /* RecentsViewController.m */; };
|
F094AA351B78E42600B1FBBF /* RecentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F094AA231B78E42600B1FBBF /* RecentsViewController.m */; };
|
||||||
F094AA371B78E42600B1FBBF /* RoomViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F094AA271B78E42600B1FBBF /* RoomViewController.m */; };
|
F094AA371B78E42600B1FBBF /* RoomViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F094AA271B78E42600B1FBBF /* RoomViewController.m */; };
|
||||||
F094AA381B78E42600B1FBBF /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F094AA291B78E42600B1FBBF /* SettingsViewController.m */; };
|
F094AA381B78E42600B1FBBF /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F094AA291B78E42600B1FBBF /* SettingsViewController.m */; };
|
||||||
|
F09E24ED1C6DE24900D39503 /* RoomMemberTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = F09E24EB1C6DE24900D39503 /* RoomMemberTitleView.m */; };
|
||||||
|
F09E24EE1C6DE24900D39503 /* RoomMemberTitleView.xib in Resources */ = {isa = PBXBuildFile; fileRef = F09E24EC1C6DE24900D39503 /* RoomMemberTitleView.xib */; };
|
||||||
F09EE0021C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F09EDFF71C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.m */; };
|
F09EE0021C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F09EDFF71C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.m */; };
|
||||||
F09EE0031C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F09EDFF81C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.xib */; };
|
F09EE0031C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F09EDFF81C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.xib */; };
|
||||||
F09EE0041C5134BE0078712F /* RoomIncomingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F09EDFFA1C5134BE0078712F /* RoomIncomingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m */; };
|
F09EE0041C5134BE0078712F /* RoomIncomingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F09EDFFA1C5134BE0078712F /* RoomIncomingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m */; };
|
||||||
|
@ -158,6 +168,8 @@
|
||||||
F09EE0081C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F09EE0001C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m */; };
|
F09EE0081C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F09EE0001C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.m */; };
|
||||||
F09EE0091C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F09EE0011C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib */; };
|
F09EE0091C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F09EE0011C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib */; };
|
||||||
F0A1CD221B9F4BBA00F9C15C /* RoomParticipantsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F0A1CD211B9F4BBA00F9C15C /* RoomParticipantsViewController.m */; };
|
F0A1CD221B9F4BBA00F9C15C /* RoomParticipantsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F0A1CD211B9F4BBA00F9C15C /* RoomParticipantsViewController.m */; };
|
||||||
|
F0BE3DF01C6CE17200AC3111 /* RoomMemberDetailsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F0BE3DEF1C6CE17200AC3111 /* RoomMemberDetailsViewController.m */; };
|
||||||
|
F0BE3DF21C6CE28300AC3111 /* RoomMemberDetailsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F0BE3DF11C6CE28300AC3111 /* RoomMemberDetailsViewController.xib */; };
|
||||||
F0C34B611C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F0C34B561C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.m */; };
|
F0C34B611C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F0C34B561C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.m */; };
|
||||||
F0C34B621C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F0C34B571C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.xib */; };
|
F0C34B621C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F0C34B571C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.xib */; };
|
||||||
F0C34B631C15C28300C36F09 /* RoomOutgoingAttachmentWithoutSenderInfoBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F0C34B591C15C28300C36F09 /* RoomOutgoingAttachmentWithoutSenderInfoBubbleCell.m */; };
|
F0C34B631C15C28300C36F09 /* RoomOutgoingAttachmentWithoutSenderInfoBubbleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F0C34B591C15C28300C36F09 /* RoomOutgoingAttachmentWithoutSenderInfoBubbleCell.m */; };
|
||||||
|
@ -365,6 +377,15 @@
|
||||||
F047DBB61C576F6600952DA2 /* AuthInputsPasswordBasedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthInputsPasswordBasedView.h; sourceTree = "<group>"; };
|
F047DBB61C576F6600952DA2 /* AuthInputsPasswordBasedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuthInputsPasswordBasedView.h; sourceTree = "<group>"; };
|
||||||
F047DBB71C576F6600952DA2 /* AuthInputsPasswordBasedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuthInputsPasswordBasedView.m; sourceTree = "<group>"; };
|
F047DBB71C576F6600952DA2 /* AuthInputsPasswordBasedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuthInputsPasswordBasedView.m; sourceTree = "<group>"; };
|
||||||
F047DBB81C576F6600952DA2 /* AuthInputsPasswordBasedView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AuthInputsPasswordBasedView.xib; sourceTree = "<group>"; };
|
F047DBB81C576F6600952DA2 /* AuthInputsPasswordBasedView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AuthInputsPasswordBasedView.xib; sourceTree = "<group>"; };
|
||||||
|
F05641781C7C9FD7002276ED /* TableViewCellWithButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TableViewCellWithButton.h; path = TableViewCell/TableViewCellWithButton.h; sourceTree = "<group>"; };
|
||||||
|
F05641791C7C9FD7002276ED /* TableViewCellWithButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TableViewCellWithButton.m; path = TableViewCell/TableViewCellWithButton.m; sourceTree = "<group>"; };
|
||||||
|
F056417A1C7C9FD7002276ED /* TableViewCellWithButton.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = TableViewCellWithButton.xib; path = TableViewCell/TableViewCellWithButton.xib; sourceTree = "<group>"; };
|
||||||
|
F056417D1C7CBB58002276ED /* bubbles_bg_landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = bubbles_bg_landscape.png; sourceTree = "<group>"; };
|
||||||
|
F056417E1C7CBB58002276ED /* bubbles_bg_landscape@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bubbles_bg_landscape@2x.png"; sourceTree = "<group>"; };
|
||||||
|
F056417F1C7CBB58002276ED /* bubbles_bg_landscape@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bubbles_bg_landscape@3x.png"; sourceTree = "<group>"; };
|
||||||
|
F05641891C7CBEBD002276ED /* group.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = group.png; sourceTree = "<group>"; };
|
||||||
|
F056418A1C7CBEBD002276ED /* group@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "group@2x.png"; sourceTree = "<group>"; };
|
||||||
|
F056418B1C7CBEBD002276ED /* group@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "group@3x.png"; sourceTree = "<group>"; };
|
||||||
F05894FE1B8B7E6600B73E85 /* RoomBubbleCellData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomBubbleCellData.h; sourceTree = "<group>"; };
|
F05894FE1B8B7E6600B73E85 /* RoomBubbleCellData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomBubbleCellData.h; sourceTree = "<group>"; };
|
||||||
F05894FF1B8B7E6600B73E85 /* RoomBubbleCellData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomBubbleCellData.m; sourceTree = "<group>"; };
|
F05894FF1B8B7E6600B73E85 /* RoomBubbleCellData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomBubbleCellData.m; sourceTree = "<group>"; };
|
||||||
F08BE09C1B87025B00C480FB /* EventFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventFormatter.h; sourceTree = "<group>"; };
|
F08BE09C1B87025B00C480FB /* EventFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventFormatter.h; sourceTree = "<group>"; };
|
||||||
|
@ -401,6 +422,9 @@
|
||||||
F094AA271B78E42600B1FBBF /* RoomViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomViewController.m; sourceTree = "<group>"; };
|
F094AA271B78E42600B1FBBF /* RoomViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomViewController.m; sourceTree = "<group>"; };
|
||||||
F094AA281B78E42600B1FBBF /* SettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsViewController.h; sourceTree = "<group>"; };
|
F094AA281B78E42600B1FBBF /* SettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsViewController.h; sourceTree = "<group>"; };
|
||||||
F094AA291B78E42600B1FBBF /* SettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsViewController.m; sourceTree = "<group>"; };
|
F094AA291B78E42600B1FBBF /* SettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsViewController.m; sourceTree = "<group>"; };
|
||||||
|
F09E24EA1C6DE24900D39503 /* RoomMemberTitleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomMemberTitleView.h; sourceTree = "<group>"; };
|
||||||
|
F09E24EB1C6DE24900D39503 /* RoomMemberTitleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomMemberTitleView.m; sourceTree = "<group>"; };
|
||||||
|
F09E24EC1C6DE24900D39503 /* RoomMemberTitleView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomMemberTitleView.xib; sourceTree = "<group>"; };
|
||||||
F09EDFF61C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomIncomingTextMsgWithoutSenderNameBubbleCell.h; sourceTree = "<group>"; };
|
F09EDFF61C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomIncomingTextMsgWithoutSenderNameBubbleCell.h; sourceTree = "<group>"; };
|
||||||
F09EDFF71C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomIncomingTextMsgWithoutSenderNameBubbleCell.m; sourceTree = "<group>"; };
|
F09EDFF71C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomIncomingTextMsgWithoutSenderNameBubbleCell.m; sourceTree = "<group>"; };
|
||||||
F09EDFF81C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomIncomingTextMsgWithoutSenderNameBubbleCell.xib; sourceTree = "<group>"; };
|
F09EDFF81C5134BE0078712F /* RoomIncomingTextMsgWithoutSenderNameBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomIncomingTextMsgWithoutSenderNameBubbleCell.xib; sourceTree = "<group>"; };
|
||||||
|
@ -415,6 +439,9 @@
|
||||||
F09EE0011C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib; sourceTree = "<group>"; };
|
F09EE0011C5134BE0078712F /* RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomOutgoingTextMsgWithPaginationTitleWithoutSenderNameBubbleCell.xib; sourceTree = "<group>"; };
|
||||||
F0A1CD201B9F4BBA00F9C15C /* RoomParticipantsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomParticipantsViewController.h; sourceTree = "<group>"; };
|
F0A1CD201B9F4BBA00F9C15C /* RoomParticipantsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomParticipantsViewController.h; sourceTree = "<group>"; };
|
||||||
F0A1CD211B9F4BBA00F9C15C /* RoomParticipantsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomParticipantsViewController.m; sourceTree = "<group>"; };
|
F0A1CD211B9F4BBA00F9C15C /* RoomParticipantsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomParticipantsViewController.m; sourceTree = "<group>"; };
|
||||||
|
F0BE3DEE1C6CE17200AC3111 /* RoomMemberDetailsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomMemberDetailsViewController.h; sourceTree = "<group>"; };
|
||||||
|
F0BE3DEF1C6CE17200AC3111 /* RoomMemberDetailsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomMemberDetailsViewController.m; sourceTree = "<group>"; };
|
||||||
|
F0BE3DF11C6CE28300AC3111 /* RoomMemberDetailsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomMemberDetailsViewController.xib; sourceTree = "<group>"; };
|
||||||
F0C34B551C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomOutgoingAttachmentBubbleCell.h; sourceTree = "<group>"; };
|
F0C34B551C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RoomOutgoingAttachmentBubbleCell.h; sourceTree = "<group>"; };
|
||||||
F0C34B561C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomOutgoingAttachmentBubbleCell.m; sourceTree = "<group>"; };
|
F0C34B561C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RoomOutgoingAttachmentBubbleCell.m; sourceTree = "<group>"; };
|
||||||
F0C34B571C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomOutgoingAttachmentBubbleCell.xib; sourceTree = "<group>"; };
|
F0C34B571C15C28300C36F09 /* RoomOutgoingAttachmentBubbleCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RoomOutgoingAttachmentBubbleCell.xib; sourceTree = "<group>"; };
|
||||||
|
@ -526,6 +553,9 @@
|
||||||
7179283B1C0384DE00407D96 /* TableViewCell */ = {
|
7179283B1C0384DE00407D96 /* TableViewCell */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F05641781C7C9FD7002276ED /* TableViewCellWithButton.h */,
|
||||||
|
F05641791C7C9FD7002276ED /* TableViewCellWithButton.m */,
|
||||||
|
F056417A1C7C9FD7002276ED /* TableViewCellWithButton.xib */,
|
||||||
7179283C1C03852C00407D96 /* TableViewCellSeparator.h */,
|
7179283C1C03852C00407D96 /* TableViewCellSeparator.h */,
|
||||||
7179283D1C03852C00407D96 /* TableViewCellSeparator.m */,
|
7179283D1C03852C00407D96 /* TableViewCellSeparator.m */,
|
||||||
7179283E1C03852C00407D96 /* TableViewCellSeparator.xib */,
|
7179283E1C03852C00407D96 /* TableViewCellSeparator.xib */,
|
||||||
|
@ -579,6 +609,7 @@
|
||||||
children = (
|
children = (
|
||||||
F0CC4DBC1C4E26FA003BBE45 /* MediaAlbum */,
|
F0CC4DBC1C4E26FA003BBE45 /* MediaAlbum */,
|
||||||
71F7F5191C23079100E7ED8F /* Contact */,
|
71F7F5191C23079100E7ED8F /* Contact */,
|
||||||
|
F09E24E91C6DE24900D39503 /* RoomMember */,
|
||||||
71046D581C0C631100DCA984 /* RoomTitle */,
|
71046D581C0C631100DCA984 /* RoomTitle */,
|
||||||
71EBE6691C04C4BE00E7D953 /* RoomActivitiesView */,
|
71EBE6691C04C4BE00E7D953 /* RoomActivitiesView */,
|
||||||
7179283B1C0384DE00407D96 /* TableViewCell */,
|
7179283B1C0384DE00407D96 /* TableViewCell */,
|
||||||
|
@ -837,6 +868,9 @@
|
||||||
F094AA151B78E42600B1FBBF /* ViewController */ = {
|
F094AA151B78E42600B1FBBF /* ViewController */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F0BE3DEE1C6CE17200AC3111 /* RoomMemberDetailsViewController.h */,
|
||||||
|
F0BE3DEF1C6CE17200AC3111 /* RoomMemberDetailsViewController.m */,
|
||||||
|
F0BE3DF11C6CE28300AC3111 /* RoomMemberDetailsViewController.xib */,
|
||||||
F094AA161B78E42600B1FBBF /* AccountDetailsViewController.h */,
|
F094AA161B78E42600B1FBBF /* AccountDetailsViewController.h */,
|
||||||
F094AA171B78E42600B1FBBF /* AccountDetailsViewController.m */,
|
F094AA171B78E42600B1FBBF /* AccountDetailsViewController.m */,
|
||||||
F094AA181B78E42600B1FBBF /* AuthenticationViewController.h */,
|
F094AA181B78E42600B1FBBF /* AuthenticationViewController.h */,
|
||||||
|
@ -880,6 +914,16 @@
|
||||||
path = ViewController;
|
path = ViewController;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
F09E24E91C6DE24900D39503 /* RoomMember */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
F09E24EA1C6DE24900D39503 /* RoomMemberTitleView.h */,
|
||||||
|
F09E24EB1C6DE24900D39503 /* RoomMemberTitleView.m */,
|
||||||
|
F09E24EC1C6DE24900D39503 /* RoomMemberTitleView.xib */,
|
||||||
|
);
|
||||||
|
path = RoomMember;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
F0C34CB51C17145F00C36F09 /* Categories */ = {
|
F0C34CB51C17145F00C36F09 /* Categories */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -906,6 +950,12 @@
|
||||||
F0DD7D1B1B7AA8C900C4BE02 /* Images */ = {
|
F0DD7D1B1B7AA8C900C4BE02 /* Images */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
F05641891C7CBEBD002276ED /* group.png */,
|
||||||
|
F056418A1C7CBEBD002276ED /* group@2x.png */,
|
||||||
|
F056418B1C7CBEBD002276ED /* group@3x.png */,
|
||||||
|
F056417D1C7CBB58002276ED /* bubbles_bg_landscape.png */,
|
||||||
|
F056417E1C7CBB58002276ED /* bubbles_bg_landscape@2x.png */,
|
||||||
|
F056417F1C7CBB58002276ED /* bubbles_bg_landscape@3x.png */,
|
||||||
F0DDDBB41C5A5F55000C6C46 /* Icon-170.png */,
|
F0DDDBB41C5A5F55000C6C46 /* Icon-170.png */,
|
||||||
F0DDDBB51C5A5F55000C6C46 /* Icon-170@2x.png */,
|
F0DDDBB51C5A5F55000C6C46 /* Icon-170@2x.png */,
|
||||||
F0DDDBB61C5A5F55000C6C46 /* Icon-170@3x.png */,
|
F0DDDBB61C5A5F55000C6C46 /* Icon-170@3x.png */,
|
||||||
|
@ -1073,6 +1123,7 @@
|
||||||
F02528D81C11B6FC00E1FE1B /* camera_picture.png in Resources */,
|
F02528D81C11B6FC00E1FE1B /* camera_picture.png in Resources */,
|
||||||
F02528E01C11B6FC00E1FE1B /* create_room.png in Resources */,
|
F02528E01C11B6FC00E1FE1B /* create_room.png in Resources */,
|
||||||
F02528DF1C11B6FC00E1FE1B /* camera_video.png in Resources */,
|
F02528DF1C11B6FC00E1FE1B /* camera_video.png in Resources */,
|
||||||
|
F056418C1C7CBEBD002276ED /* group.png in Resources */,
|
||||||
F02528E31C11B6FC00E1FE1B /* favorite_icon.png in Resources */,
|
F02528E31C11B6FC00E1FE1B /* favorite_icon.png in Resources */,
|
||||||
F0C34B681C15C28300C36F09 /* RoomOutgoingTextMsgWithoutSenderInfoBubbleCell.xib in Resources */,
|
F0C34B681C15C28300C36F09 /* RoomOutgoingTextMsgWithoutSenderInfoBubbleCell.xib in Resources */,
|
||||||
F0DDDBB81C5A5F55000C6C46 /* Icon-170@2x.png in Resources */,
|
F0DDDBB81C5A5F55000C6C46 /* Icon-170@2x.png in Resources */,
|
||||||
|
@ -1104,16 +1155,20 @@
|
||||||
F02529041C11B6FC00E1FE1B /* typing@2x.png in Resources */,
|
F02529041C11B6FC00E1FE1B /* typing@2x.png in Resources */,
|
||||||
F0C34B641C15C28300C36F09 /* RoomOutgoingAttachmentWithoutSenderInfoBubbleCell.xib in Resources */,
|
F0C34B641C15C28300C36F09 /* RoomOutgoingAttachmentWithoutSenderInfoBubbleCell.xib in Resources */,
|
||||||
F0DA3FC81C4691CD0055438B /* details_icon.png in Resources */,
|
F0DA3FC81C4691CD0055438B /* details_icon.png in Resources */,
|
||||||
|
F05641831C7CBB58002276ED /* bubbles_bg_landscape.png in Resources */,
|
||||||
F02528D61C11B6FC00E1FE1B /* camera_capture@2x.png in Resources */,
|
F02528D61C11B6FC00E1FE1B /* camera_capture@2x.png in Resources */,
|
||||||
71046D601C0C86C600DCA984 /* RoomTitleView.xib in Resources */,
|
71046D601C0C86C600DCA984 /* RoomTitleView.xib in Resources */,
|
||||||
71B2A3C11C203C7100472061 /* TableViewCellWithLabelAndSwitch.xib in Resources */,
|
71B2A3C11C203C7100472061 /* TableViewCellWithLabelAndSwitch.xib in Resources */,
|
||||||
F02528D51C11B6FC00E1FE1B /* camera_capture.png in Resources */,
|
F02528D51C11B6FC00E1FE1B /* camera_capture.png in Resources */,
|
||||||
F02528EA1C11B6FC00E1FE1B /* low_priority_icon@2x.png in Resources */,
|
F02528EA1C11B6FC00E1FE1B /* low_priority_icon@2x.png in Resources */,
|
||||||
|
F05641851C7CBB58002276ED /* bubbles_bg_landscape@3x.png in Resources */,
|
||||||
F02528EE1C11B6FC00E1FE1B /* mute_icon@3x.png in Resources */,
|
F02528EE1C11B6FC00E1FE1B /* mute_icon@3x.png in Resources */,
|
||||||
|
F056418E1C7CBEBD002276ED /* group@3x.png in Resources */,
|
||||||
F003AA811C690628008B430C /* RoomAvatarTitleView.xib in Resources */,
|
F003AA811C690628008B430C /* RoomAvatarTitleView.xib in Resources */,
|
||||||
F02529071C11B6FC00E1FE1B /* unmute_icon@2x.png in Resources */,
|
F02529071C11B6FC00E1FE1B /* unmute_icon@2x.png in Resources */,
|
||||||
F0C34B701C15CA2E00C36F09 /* RoomOutgoingAttachmentWithPaginationTitleBubbleCell.xib in Resources */,
|
F0C34B701C15CA2E00C36F09 /* RoomOutgoingAttachmentWithPaginationTitleBubbleCell.xib in Resources */,
|
||||||
F025290D1C11B6FC00E1FE1B /* voice_call_icon@2x.png in Resources */,
|
F025290D1C11B6FC00E1FE1B /* voice_call_icon@2x.png in Resources */,
|
||||||
|
F0BE3DF21C6CE28300AC3111 /* RoomMemberDetailsViewController.xib in Resources */,
|
||||||
F0C34CB21C16269D00C36F09 /* RoomIncomingAttachmentWithPaginationTitleBubbleCell.xib in Resources */,
|
F0C34CB21C16269D00C36F09 /* RoomIncomingAttachmentWithPaginationTitleBubbleCell.xib in Resources */,
|
||||||
F02528DC1C11B6FC00E1FE1B /* camera_switch.png in Resources */,
|
F02528DC1C11B6FC00E1FE1B /* camera_switch.png in Resources */,
|
||||||
F0DA3FC91C4691CD0055438B /* details_icon@2x.png in Resources */,
|
F0DA3FC91C4691CD0055438B /* details_icon@2x.png in Resources */,
|
||||||
|
@ -1134,6 +1189,8 @@
|
||||||
F02528F41C11B6FC00E1FE1B /* remove_icon@3x.png in Resources */,
|
F02528F41C11B6FC00E1FE1B /* remove_icon@3x.png in Resources */,
|
||||||
F02528F71C11B6FC00E1FE1B /* search_icon.png in Resources */,
|
F02528F71C11B6FC00E1FE1B /* search_icon.png in Resources */,
|
||||||
3235CD8A1C3426D10084EA40 /* HomeSearchTableViewCell.xib in Resources */,
|
3235CD8A1C3426D10084EA40 /* HomeSearchTableViewCell.xib in Resources */,
|
||||||
|
F056417C1C7C9FD7002276ED /* TableViewCellWithButton.xib in Resources */,
|
||||||
|
F05641841C7CBB58002276ED /* bubbles_bg_landscape@2x.png in Resources */,
|
||||||
F02528F81C11B6FC00E1FE1B /* search_icon@2x.png in Resources */,
|
F02528F81C11B6FC00E1FE1B /* search_icon@2x.png in Resources */,
|
||||||
F02528EB1C11B6FC00E1FE1B /* low_priority_icon@3x.png in Resources */,
|
F02528EB1C11B6FC00E1FE1B /* low_priority_icon@3x.png in Resources */,
|
||||||
325F6A481C21D4C100C12F51 /* chevron@2x.png in Resources */,
|
325F6A481C21D4C100C12F51 /* chevron@2x.png in Resources */,
|
||||||
|
@ -1146,6 +1203,7 @@
|
||||||
F001D76E1B83156000A162C3 /* MediaPickerViewController.xib in Resources */,
|
F001D76E1B83156000A162C3 /* MediaPickerViewController.xib in Resources */,
|
||||||
F02529031C11B6FC00E1FE1B /* typing.png in Resources */,
|
F02529031C11B6FC00E1FE1B /* typing.png in Resources */,
|
||||||
32D200851C15C56A00A4E396 /* search_bg@3x.png in Resources */,
|
32D200851C15C56A00A4E396 /* search_bg@3x.png in Resources */,
|
||||||
|
F056418D1C7CBEBD002276ED /* group@2x.png in Resources */,
|
||||||
71EBE66E1C04C4D300E7D953 /* RoomActivitiesView.xib in Resources */,
|
71EBE66E1C04C4D300E7D953 /* RoomActivitiesView.xib in Resources */,
|
||||||
717928461C03852C00407D96 /* TableViewCellSeparator.xib in Resources */,
|
717928461C03852C00407D96 /* TableViewCellSeparator.xib in Resources */,
|
||||||
F02528ED1C11B6FC00E1FE1B /* mute_icon@2x.png in Resources */,
|
F02528ED1C11B6FC00E1FE1B /* mute_icon@2x.png in Resources */,
|
||||||
|
@ -1168,6 +1226,7 @@
|
||||||
716FDC8B1C186A3A001034CB /* InviteRecentTableViewCell.xib in Resources */,
|
716FDC8B1C186A3A001034CB /* InviteRecentTableViewCell.xib in Resources */,
|
||||||
F02528E51C11B6FC00E1FE1B /* favorite_icon@3x.png in Resources */,
|
F02528E51C11B6FC00E1FE1B /* favorite_icon@3x.png in Resources */,
|
||||||
F02529051C11B6FC00E1FE1B /* typing@3x.png in Resources */,
|
F02529051C11B6FC00E1FE1B /* typing@3x.png in Resources */,
|
||||||
|
F09E24EE1C6DE24900D39503 /* RoomMemberTitleView.xib in Resources */,
|
||||||
F0CC4DCB1C4E594C003BBE45 /* MediaAlbumContentViewController.xib in Resources */,
|
F0CC4DCB1C4E594C003BBE45 /* MediaAlbumContentViewController.xib in Resources */,
|
||||||
F02528E71C11B6FC00E1FE1B /* logo.png in Resources */,
|
F02528E71C11B6FC00E1FE1B /* logo.png in Resources */,
|
||||||
32D200841C15C56A00A4E396 /* search_bg@2x.png in Resources */,
|
32D200841C15C56A00A4E396 /* search_bg@2x.png in Resources */,
|
||||||
|
@ -1253,6 +1312,7 @@
|
||||||
323A520B1C3183CC00010773 /* UIViewController+VectorSearch.m in Sources */,
|
323A520B1C3183CC00010773 /* UIViewController+VectorSearch.m in Sources */,
|
||||||
717928491C03852C00407D96 /* TableViewCellWithLabelAndTextField.m in Sources */,
|
717928491C03852C00407D96 /* TableViewCellWithLabelAndTextField.m in Sources */,
|
||||||
F094AA2F1B78E42600B1FBBF /* AccountDetailsViewController.m in Sources */,
|
F094AA2F1B78E42600B1FBBF /* AccountDetailsViewController.m in Sources */,
|
||||||
|
F056417B1C7C9FD7002276ED /* TableViewCellWithButton.m in Sources */,
|
||||||
F0CC4DC01C4E26FA003BBE45 /* MediaAlbumTableCell.m in Sources */,
|
F0CC4DC01C4E26FA003BBE45 /* MediaAlbumTableCell.m in Sources */,
|
||||||
F022285B1C64D529000AF23C /* ExpandedRoomTitleView.m in Sources */,
|
F022285B1C64D529000AF23C /* ExpandedRoomTitleView.m in Sources */,
|
||||||
F0C34B671C15C28300C36F09 /* RoomOutgoingTextMsgWithoutSenderInfoBubbleCell.m in Sources */,
|
F0C34B671C15C28300C36F09 /* RoomOutgoingTextMsgWithoutSenderInfoBubbleCell.m in Sources */,
|
||||||
|
@ -1270,8 +1330,10 @@
|
||||||
71F7F51D1C23079F00E7ED8F /* ContactTableViewCell.m in Sources */,
|
71F7F51D1C23079F00E7ED8F /* ContactTableViewCell.m in Sources */,
|
||||||
717928471C03852C00407D96 /* TableViewCellWithLabelAndLargeTextView.m in Sources */,
|
717928471C03852C00407D96 /* TableViewCellWithLabelAndLargeTextView.m in Sources */,
|
||||||
F0D2D9871C197DCB007B8C96 /* RoomIncomingTextMsgBubbleCell.m in Sources */,
|
F0D2D9871C197DCB007B8C96 /* RoomIncomingTextMsgBubbleCell.m in Sources */,
|
||||||
|
F0BE3DF01C6CE17200AC3111 /* RoomMemberDetailsViewController.m in Sources */,
|
||||||
F0C34B6F1C15CA2E00C36F09 /* RoomOutgoingAttachmentWithPaginationTitleBubbleCell.m in Sources */,
|
F0C34B6F1C15CA2E00C36F09 /* RoomOutgoingAttachmentWithPaginationTitleBubbleCell.m in Sources */,
|
||||||
7165A25B1C05CD42003635D7 /* SegmentedViewController.m in Sources */,
|
7165A25B1C05CD42003635D7 /* SegmentedViewController.m in Sources */,
|
||||||
|
F09E24ED1C6DE24900D39503 /* RoomMemberTitleView.m in Sources */,
|
||||||
325F6A391C21810E00C12F51 /* DirectoryViewController.m in Sources */,
|
325F6A391C21810E00C12F51 /* DirectoryViewController.m in Sources */,
|
||||||
3235CD8D1C34309E0084EA40 /* HomeSearchCellData.m in Sources */,
|
3235CD8D1C34309E0084EA40 /* HomeSearchCellData.m in Sources */,
|
||||||
F094AA321B78E42600B1FBBF /* GlobalNotificationSettingsViewController.m in Sources */,
|
F094AA321B78E42600B1FBBF /* GlobalNotificationSettingsViewController.m in Sources */,
|
||||||
|
|
BIN
Vector/Assets/Images/bubbles_bg_landscape.png
Normal file
BIN
Vector/Assets/Images/bubbles_bg_landscape.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
BIN
Vector/Assets/Images/bubbles_bg_landscape@2x.png
Normal file
BIN
Vector/Assets/Images/bubbles_bg_landscape@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 70 KiB |
BIN
Vector/Assets/Images/bubbles_bg_landscape@3x.png
Normal file
BIN
Vector/Assets/Images/bubbles_bg_landscape@3x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 116 KiB |
BIN
Vector/Assets/Images/group.png
Normal file
BIN
Vector/Assets/Images/group.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
Vector/Assets/Images/group@2x.png
Normal file
BIN
Vector/Assets/Images/group@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
BIN
Vector/Assets/Images/group@3x.png
Normal file
BIN
Vector/Assets/Images/group@3x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 57 KiB |
|
@ -92,13 +92,26 @@
|
||||||
"room_participants_invite_malformed_id_title" = "Invite Error";
|
"room_participants_invite_malformed_id_title" = "Invite Error";
|
||||||
"room_participants_invite_malformed_id" = "Malformed ID. Should be an email address or a Matrix ID like '@localpart:domain'";
|
"room_participants_invite_malformed_id" = "Malformed ID. Should be an email address or a Matrix ID like '@localpart:domain'";
|
||||||
|
|
||||||
"room_participants_active" = "Active";
|
"room_participants_active" = "Online";
|
||||||
"room_participants_invite" = "Invite";
|
"room_participants_invite" = "Invite";
|
||||||
"room_participants_leave" = "Left";
|
"room_participants_leave" = "Left";
|
||||||
"room_participants_ban" = "Banned";
|
"room_participants_ban" = "Banned";
|
||||||
"room_participants_active_less_1_hour" = "Active less 1 hour ago";
|
"room_participants_active_less_1_hour" = "Offline";
|
||||||
"room_participants_active_less_x_hours" = "Active less %lu hours ago";
|
"room_participants_active_less_x_hours" = "Offline %luh ago";
|
||||||
"room_participants_active_less_x_days" = "Active less %lu days ago";
|
"room_participants_active_less_x_days" = "Offline %lu days ago";
|
||||||
|
|
||||||
|
"room_participants_action_invite" = "Invite";
|
||||||
|
"room_participants_action_leave" = "Leave from this room";
|
||||||
|
"room_participants_action_remove" = "Remove from this room";
|
||||||
|
"room_participants_action_ban" = "Block";
|
||||||
|
"room_participants_action_unban" = "Unblock";
|
||||||
|
"room_participants_action_set_default_power_level" = "Reset power level";
|
||||||
|
"room_participants_action_set_moderator" = "Make moderator";
|
||||||
|
"room_participants_action_set_admin" = "Make admin";
|
||||||
|
"room_participants_action_set_custom_power_level" = "Set custom power level";
|
||||||
|
"room_participants_action_start_chat" = "Start chat";
|
||||||
|
"room_participants_action_start_voice_call" = "Start voice call";
|
||||||
|
"room_participants_action_start_video_call" = "Start video call";
|
||||||
|
|
||||||
// Chat
|
// Chat
|
||||||
"room_one_user_is_typing" = "%@ is typing...";
|
"room_one_user_is_typing" = "%@ is typing...";
|
||||||
|
|
|
@ -34,12 +34,17 @@ extern UIColor *kVectorColorOrange;
|
||||||
|
|
||||||
#pragma mark - Vector Text Colors
|
#pragma mark - Vector Text Colors
|
||||||
extern UIColor *kVectorTextColorBlack;
|
extern UIColor *kVectorTextColorBlack;
|
||||||
|
extern UIColor *kVectorTextColorRed;
|
||||||
extern UIColor *kVectorTextColorDarkGray;
|
extern UIColor *kVectorTextColorDarkGray;
|
||||||
extern UIColor *kVectorTextColorGray;
|
extern UIColor *kVectorTextColorGray;
|
||||||
|
|
||||||
#pragma mark - Vector Navigation Bar Tint Color
|
#pragma mark - Vector Navigation Bar Tint Color
|
||||||
extern UIColor *kVectorNavBarTintColor;
|
extern UIColor *kVectorNavBarTintColor;
|
||||||
|
|
||||||
|
#pragma mark - Vector Standard Room Member Power Level
|
||||||
|
extern NSUInteger const kVectorRoomModeratorLevel;
|
||||||
|
extern NSUInteger const kVectorRoomAdminLevel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
`VectorDesignValues` class manages the Vector design parameters
|
`VectorDesignValues` class manages the Vector design parameters
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -23,11 +23,15 @@ UIColor *kVectorColorSiver;
|
||||||
UIColor *kVectorColorOrange;
|
UIColor *kVectorColorOrange;
|
||||||
|
|
||||||
UIColor *kVectorTextColorBlack;
|
UIColor *kVectorTextColorBlack;
|
||||||
|
UIColor *kVectorTextColorRed;
|
||||||
UIColor *kVectorTextColorDarkGray;
|
UIColor *kVectorTextColorDarkGray;
|
||||||
UIColor *kVectorTextColorGray;
|
UIColor *kVectorTextColorGray;
|
||||||
|
|
||||||
UIColor *kVectorNavBarTintColor;
|
UIColor *kVectorNavBarTintColor;
|
||||||
|
|
||||||
|
NSUInteger const kVectorRoomModeratorLevel = 50;
|
||||||
|
NSUInteger const kVectorRoomAdminLevel = 100;
|
||||||
|
|
||||||
@implementation VectorDesignValues
|
@implementation VectorDesignValues
|
||||||
|
|
||||||
+ (void)load
|
+ (void)load
|
||||||
|
@ -42,6 +46,7 @@ UIColor *kVectorNavBarTintColor;
|
||||||
kVectorColorSiver = [UIColor colorWithRed:(199.0 / 255.0) green:(199.0 / 255.0) blue:(204.0 / 255.0) alpha:1.0];
|
kVectorColorSiver = [UIColor colorWithRed:(199.0 / 255.0) green:(199.0 / 255.0) blue:(204.0 / 255.0) alpha:1.0];
|
||||||
|
|
||||||
kVectorTextColorBlack = [UIColor colorWithRed:(60.0 / 255.0) green:(60.0 / 255.0) blue:(60.0 / 255.0) alpha:1.0];
|
kVectorTextColorBlack = [UIColor colorWithRed:(60.0 / 255.0) green:(60.0 / 255.0) blue:(60.0 / 255.0) alpha:1.0];
|
||||||
|
kVectorTextColorRed = [UIColor colorWithRed:(255.0 / 255.0) green:(0.0 / 255.0) blue:(100.0 / 255.0) alpha:1.0];
|
||||||
kVectorTextColorDarkGray = [UIColor colorWithRed:(74.0 / 255.0) green:(74.0 / 255.0) blue:(74.0 / 255.0) alpha:1.0];
|
kVectorTextColorDarkGray = [UIColor colorWithRed:(74.0 / 255.0) green:(74.0 / 255.0) blue:(74.0 / 255.0) alpha:1.0];
|
||||||
kVectorTextColorGray = [UIColor colorWithRed:(157.0 / 255.0) green:(157.0 / 255.0) blue:(157.0 / 255.0) alpha:1.0];
|
kVectorTextColorGray = [UIColor colorWithRed:(157.0 / 255.0) green:(157.0 / 255.0) blue:(157.0 / 255.0) alpha:1.0];
|
||||||
|
|
||||||
|
|
30
Vector/ViewController/RoomMemberDetailsViewController.h
Normal file
30
Vector/ViewController/RoomMemberDetailsViewController.h
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
Copyright 2016 OpenMarket Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <MatrixKit/MatrixKit.h>
|
||||||
|
|
||||||
|
@interface RoomMemberDetailsViewController : MXKRoomMemberDetailsViewController
|
||||||
|
|
||||||
|
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *actionTableViewTopConstraint;
|
||||||
|
|
||||||
|
@property (weak, nonatomic) IBOutlet UIView *memberHeaderView;
|
||||||
|
@property (weak, nonatomic) IBOutlet UILabel *roomMemberNameLabel;
|
||||||
|
|
||||||
|
@property (weak, nonatomic) IBOutlet UILabel *roomMemberStatusLabel;
|
||||||
|
|
||||||
|
@property (weak, nonatomic) IBOutlet UIImageView *bottomImageView;
|
||||||
|
@end
|
||||||
|
|
515
Vector/ViewController/RoomMemberDetailsViewController.m
Normal file
515
Vector/ViewController/RoomMemberDetailsViewController.m
Normal file
|
@ -0,0 +1,515 @@
|
||||||
|
/*
|
||||||
|
Copyright 2016 OpenMarket Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "RoomMemberDetailsViewController.h"
|
||||||
|
|
||||||
|
#import "AppDelegate.h"
|
||||||
|
|
||||||
|
#import "RoomMemberTitleView.h"
|
||||||
|
|
||||||
|
#import "VectorDesignValues.h"
|
||||||
|
|
||||||
|
#import "RageShakeManager.h"
|
||||||
|
|
||||||
|
#import "AvatarGenerator.h"
|
||||||
|
|
||||||
|
#import "TableViewCellWithButton.h"
|
||||||
|
|
||||||
|
@interface RoomMemberDetailsViewController ()
|
||||||
|
{
|
||||||
|
RoomMemberTitleView* memberTitleView;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Observe UIApplicationWillChangeStatusBarOrientationNotification to hide/show bubbles bg.
|
||||||
|
*/
|
||||||
|
id UIApplicationWillChangeStatusBarOrientationNotificationObserver;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation RoomMemberDetailsViewController
|
||||||
|
|
||||||
|
#pragma mark - Class methods
|
||||||
|
|
||||||
|
+ (UINib *)nib
|
||||||
|
{
|
||||||
|
return [UINib nibWithNibName:NSStringFromClass(self.class)
|
||||||
|
bundle:[NSBundle bundleForClass:self.class]];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (instancetype)roomMemberDetailsViewController
|
||||||
|
{
|
||||||
|
return [[[self class] alloc] initWithNibName:NSStringFromClass(self.class)
|
||||||
|
bundle:[NSBundle bundleForClass:self.class]];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
|
||||||
|
- (void)viewDidLoad
|
||||||
|
{
|
||||||
|
[super viewDidLoad];
|
||||||
|
// Do any additional setup after loading the view, typically from a nib.
|
||||||
|
|
||||||
|
// Setup `MXKViewControllerHandling` properties
|
||||||
|
self.defaultBarTintColor = kVectorNavBarTintColor;
|
||||||
|
self.enableBarTintColorStatusChange = NO;
|
||||||
|
self.rageShakeManager = [RageShakeManager sharedManager];
|
||||||
|
|
||||||
|
// Set delegate to handle start chat option
|
||||||
|
self.delegate = [AppDelegate theDelegate];
|
||||||
|
|
||||||
|
self.memberHeaderView.backgroundColor = kVectorColorLightGrey;
|
||||||
|
self.roomMemberNameLabel.textColor = kVectorTextColorBlack;
|
||||||
|
self.roomMemberStatusLabel.textColor = kVectorColorGreen;
|
||||||
|
|
||||||
|
self.navigationItem.titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 600, 40)];
|
||||||
|
|
||||||
|
memberTitleView = [RoomMemberTitleView roomMemberTitleView];
|
||||||
|
self.memberThumbnail = memberTitleView.memberAvatar;
|
||||||
|
|
||||||
|
// Add the title view and define edge constraints
|
||||||
|
memberTitleView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||||
|
[self.navigationItem.titleView addSubview:memberTitleView];
|
||||||
|
|
||||||
|
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:memberTitleView
|
||||||
|
attribute:NSLayoutAttributeTop
|
||||||
|
relatedBy:NSLayoutRelationEqual
|
||||||
|
toItem:self.navigationItem.titleView
|
||||||
|
attribute:NSLayoutAttributeTop
|
||||||
|
multiplier:1.0f
|
||||||
|
constant:0.0f];
|
||||||
|
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:memberTitleView
|
||||||
|
attribute:NSLayoutAttributeBottom
|
||||||
|
relatedBy:NSLayoutRelationEqual
|
||||||
|
toItem:self.navigationItem.titleView
|
||||||
|
attribute:NSLayoutAttributeBottom
|
||||||
|
multiplier:1.0f
|
||||||
|
constant:0.0f];
|
||||||
|
NSLayoutConstraint *leadingConstraint = [NSLayoutConstraint constraintWithItem:memberTitleView
|
||||||
|
attribute:NSLayoutAttributeLeading
|
||||||
|
relatedBy:NSLayoutRelationEqual
|
||||||
|
toItem:self.navigationItem.titleView
|
||||||
|
attribute:NSLayoutAttributeLeading
|
||||||
|
multiplier:1.0f
|
||||||
|
constant:0.0f];
|
||||||
|
NSLayoutConstraint *trailingConstraint = [NSLayoutConstraint constraintWithItem:memberTitleView
|
||||||
|
attribute:NSLayoutAttributeTrailing
|
||||||
|
relatedBy:NSLayoutRelationEqual
|
||||||
|
toItem:self.navigationItem.titleView
|
||||||
|
attribute:NSLayoutAttributeTrailing
|
||||||
|
multiplier:1.0f
|
||||||
|
constant:0.0f];
|
||||||
|
[NSLayoutConstraint activateConstraints:@[topConstraint, bottomConstraint, leadingConstraint, trailingConstraint]];
|
||||||
|
|
||||||
|
// Hide line separators of empty cells
|
||||||
|
self.tableView.tableFooterView = [[UIView alloc] init];
|
||||||
|
|
||||||
|
// Observe UIApplicationWillChangeStatusBarOrientationNotification to hide/show bubbles bg.
|
||||||
|
UIApplicationWillChangeStatusBarOrientationNotificationObserver = [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillChangeStatusBarOrientationNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) {
|
||||||
|
|
||||||
|
NSNumber *orientation = (NSNumber*)(notif.userInfo[UIApplicationStatusBarOrientationUserInfoKey]);
|
||||||
|
self.bottomImageView.hidden = (orientation.integerValue == UIInterfaceOrientationLandscapeLeft || orientation.integerValue == UIInterfaceOrientationLandscapeRight);
|
||||||
|
}];
|
||||||
|
|
||||||
|
UIInterfaceOrientation screenOrientation = [[UIApplication sharedApplication] statusBarOrientation];
|
||||||
|
self.bottomImageView.hidden = (screenOrientation == UIInterfaceOrientationLandscapeLeft || screenOrientation == UIInterfaceOrientationLandscapeRight);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewWillAppear:(BOOL)animated
|
||||||
|
{
|
||||||
|
[super viewWillAppear:animated];
|
||||||
|
|
||||||
|
// Hide the bottom border of the navigation bar to display the expander header
|
||||||
|
[self hideNavigationBarBorder:YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewWillDisappear:(BOOL)animated
|
||||||
|
{
|
||||||
|
[super viewWillDisappear:animated];
|
||||||
|
|
||||||
|
// Restore navigation bar display
|
||||||
|
[self hideNavigationBarBorder:NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
|
||||||
|
{
|
||||||
|
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||||
|
|
||||||
|
// Restore navigation bar display
|
||||||
|
[self hideNavigationBarBorder:NO];
|
||||||
|
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(coordinator.transitionDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
|
||||||
|
// Hide the bottom border of the navigation bar
|
||||||
|
[self hideNavigationBarBorder:YES];
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)destroy
|
||||||
|
{
|
||||||
|
[super destroy];
|
||||||
|
|
||||||
|
if (UIApplicationWillChangeStatusBarOrientationNotificationObserver)
|
||||||
|
{
|
||||||
|
[[NSNotificationCenter defaultCenter] removeObserver:UIApplicationWillChangeStatusBarOrientationNotificationObserver];
|
||||||
|
UIApplicationWillChangeStatusBarOrientationNotificationObserver = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
[memberTitleView removeFromSuperview];
|
||||||
|
memberTitleView = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UIImage*)picturePlaceholder
|
||||||
|
{
|
||||||
|
if (self.mxRoomMember)
|
||||||
|
{
|
||||||
|
// Use the vector style placeholder
|
||||||
|
return [AvatarGenerator generateRoomMemberAvatar:self.mxRoomMember.userId displayName:self.mxRoomMember.displayname];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [UIImage imageNamed:@"placeholder"];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)updateMemberInfo
|
||||||
|
{
|
||||||
|
[super updateMemberInfo];
|
||||||
|
|
||||||
|
if (self.mxRoomMember)
|
||||||
|
{
|
||||||
|
self.roomMemberNameLabel.text = self.mxRoomMember.displayname ? self.mxRoomMember.displayname : self.mxRoomMember.userId;
|
||||||
|
|
||||||
|
NSString* presenceText = nil;
|
||||||
|
|
||||||
|
if (self.mxRoomMember.membership != MXMembershipJoin)
|
||||||
|
{
|
||||||
|
if (self.mxRoomMember.membership == MXMembershipInvite)
|
||||||
|
{
|
||||||
|
presenceText = NSLocalizedStringFromTable(@"room_participants_invite", @"Vector", nil);
|
||||||
|
}
|
||||||
|
else if (self.mxRoomMember.membership == MXMembershipLeave)
|
||||||
|
{
|
||||||
|
presenceText = NSLocalizedStringFromTable(@"room_participants_leave", @"Vector", nil);
|
||||||
|
}
|
||||||
|
else if (self.mxRoomMember.membership == MXMembershipBan)
|
||||||
|
{
|
||||||
|
presenceText = NSLocalizedStringFromTable(@"room_participants_ban", @"Vector", nil);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (self.mxRoomMember.userId)
|
||||||
|
{
|
||||||
|
MXUser *user = [self.mxRoom.mxSession userWithUserId:self.mxRoomMember.userId];
|
||||||
|
if (user)
|
||||||
|
{
|
||||||
|
if (user.presence == MXPresenceOnline)
|
||||||
|
{
|
||||||
|
presenceText = NSLocalizedStringFromTable(@"room_participants_active", @"Vector", nil);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NSUInteger lastActiveMs = user.lastActiveAgo;
|
||||||
|
|
||||||
|
if (-1 != lastActiveMs)
|
||||||
|
{
|
||||||
|
NSUInteger lastActivehour = lastActiveMs / 1000 / 60 / 60;
|
||||||
|
NSUInteger lastActiveDays = lastActivehour / 24;
|
||||||
|
|
||||||
|
if (lastActivehour < 1)
|
||||||
|
{
|
||||||
|
presenceText = NSLocalizedStringFromTable(@"room_participants_active_less_1_hour", @"Vector", nil);
|
||||||
|
}
|
||||||
|
else if (lastActivehour < 24)
|
||||||
|
{
|
||||||
|
presenceText = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_participants_active_less_x_hours", @"Vector", nil), lastActivehour];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
presenceText = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_participants_active_less_x_days", @"Vector", nil), lastActiveDays];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.roomMemberStatusLabel.text = presenceText;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Hide/Show navigation bar border
|
||||||
|
|
||||||
|
- (void)hideNavigationBarBorder:(BOOL)isHidden
|
||||||
|
{
|
||||||
|
// Consider the main navigation controller if the current view controller is embedded inside a split view controller.
|
||||||
|
UINavigationController *mainNavigationController = self.navigationController;
|
||||||
|
if (self.splitViewController && self.splitViewController.isCollapsed && self.splitViewController.viewControllers.count)
|
||||||
|
{
|
||||||
|
mainNavigationController = self.splitViewController.viewControllers.firstObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isHidden)
|
||||||
|
{
|
||||||
|
// The default shadow image is nil. When non-nil, this property represents a custom shadow image to show instead
|
||||||
|
// of the default. For a custom shadow image to be shown, a custom background image must also be set with the
|
||||||
|
// setBackgroundImage:forBarMetrics: method. If the default background image is used, then the default shadow
|
||||||
|
// image will be used regardless of the value of this property.
|
||||||
|
[mainNavigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
|
||||||
|
[mainNavigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Restore default navigationbar settings
|
||||||
|
[mainNavigationController.navigationBar setShadowImage:nil];
|
||||||
|
[mainNavigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - TableView data source
|
||||||
|
|
||||||
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||||
|
{
|
||||||
|
// Check user's power level before allowing an action (kick, ban, ...)
|
||||||
|
MXRoomPowerLevels *powerLevels = [self.mxRoom.state powerLevels];
|
||||||
|
NSUInteger memberPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mxRoomMember.userId];
|
||||||
|
NSUInteger oneSelfPowerLevel = [powerLevels powerLevelOfUserWithUserID:self.mainSession.myUser.userId];
|
||||||
|
|
||||||
|
[actionsArray removeAllObjects];
|
||||||
|
|
||||||
|
// Consider the case of the user himself
|
||||||
|
if ([self.mxRoomMember.userId isEqualToString:self.mainSession.myUser.userId])
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionLeave)];
|
||||||
|
|
||||||
|
if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomPowerLevels])
|
||||||
|
{
|
||||||
|
// Check whether the user is admin (in this case he may reduce his power level to become moderator).
|
||||||
|
if (oneSelfPowerLevel >= kVectorRoomAdminLevel)
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionSetModerator)];
|
||||||
|
}
|
||||||
|
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionSetDefaultPowerLevel)];
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionSetCustomPowerLevel)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (self.mxRoomMember)
|
||||||
|
{
|
||||||
|
// offer to start a new chat only if the room is not a 1:1 room with this user
|
||||||
|
// it does not make sense : it would open the same room
|
||||||
|
MXRoom* room = [self.mainSession privateOneToOneRoomWithUserId:self.mxRoomMember.userId];
|
||||||
|
if (!room || (![room.state.roomId isEqualToString:self.mxRoom.state.roomId]))
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionStartChat)];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.enableVoipCall)
|
||||||
|
{
|
||||||
|
// Offer voip call options
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionStartVoiceCall)];
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionStartVideoCall)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Consider membership of the selected member
|
||||||
|
switch (self.mxRoomMember.membership)
|
||||||
|
{
|
||||||
|
case MXMembershipInvite:
|
||||||
|
case MXMembershipJoin:
|
||||||
|
{
|
||||||
|
// update power level
|
||||||
|
if (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomPowerLevels] && oneSelfPowerLevel > memberPowerLevel)
|
||||||
|
{
|
||||||
|
// Check whether user is admin
|
||||||
|
if (oneSelfPowerLevel >= kVectorRoomAdminLevel)
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionSetAdmin)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check whether the member may become moderator
|
||||||
|
if (oneSelfPowerLevel >= kVectorRoomModeratorLevel && memberPowerLevel < kVectorRoomModeratorLevel)
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionSetModerator)];
|
||||||
|
}
|
||||||
|
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionSetDefaultPowerLevel)];
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionSetCustomPowerLevel)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check conditions to be able to kick someone
|
||||||
|
if (oneSelfPowerLevel >= [powerLevels kick] && oneSelfPowerLevel > memberPowerLevel)
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionKick)];
|
||||||
|
}
|
||||||
|
// Check conditions to be able to ban someone
|
||||||
|
if (oneSelfPowerLevel >= [powerLevels ban] && oneSelfPowerLevel > memberPowerLevel)
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionBan)];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MXMembershipLeave:
|
||||||
|
{
|
||||||
|
// Check conditions to be able to invite someone
|
||||||
|
if (oneSelfPowerLevel >= [powerLevels invite])
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionInvite)];
|
||||||
|
}
|
||||||
|
// Check conditions to be able to ban someone
|
||||||
|
if (oneSelfPowerLevel >= [powerLevels ban] && oneSelfPowerLevel > memberPowerLevel)
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionBan)];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MXMembershipBan:
|
||||||
|
{
|
||||||
|
// Check conditions to be able to unban someone
|
||||||
|
if (oneSelfPowerLevel >= [powerLevels ban] && oneSelfPowerLevel > memberPowerLevel)
|
||||||
|
{
|
||||||
|
[actionsArray addObject:@(MXKRoomMemberDetailsActionUnban)];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return actionsArray.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*)actionButtonTitle:(MXKRoomMemberDetailsAction)action
|
||||||
|
{
|
||||||
|
NSString *title;
|
||||||
|
|
||||||
|
switch (action)
|
||||||
|
{
|
||||||
|
case MXKRoomMemberDetailsActionInvite:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_invite", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionLeave:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_leave", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionKick:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_remove", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionBan:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_ban", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionUnban:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_unban", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionSetDefaultPowerLevel:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_set_default_power_level", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionSetModerator:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_set_moderator", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionSetAdmin:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_set_admin", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionSetCustomPowerLevel:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_set_custom_power_level", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionStartChat:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_start_chat", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionStartVoiceCall:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_start_voice_call", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
case MXKRoomMemberDetailsActionStartVideoCall:
|
||||||
|
title = NSLocalizedStringFromTable(@"room_participants_action_start_video_call", @"Vector", nil);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
{
|
||||||
|
NSInteger row = indexPath.row;
|
||||||
|
|
||||||
|
TableViewCellWithButton *cell = [[TableViewCellWithButton alloc] init];
|
||||||
|
|
||||||
|
if (row < actionsArray.count)
|
||||||
|
{
|
||||||
|
NSNumber *actionNumber = [actionsArray objectAtIndex:row];
|
||||||
|
|
||||||
|
NSString *title = [self actionButtonTitle:actionNumber.unsignedIntegerValue];
|
||||||
|
|
||||||
|
[cell.mxkButton setTitle:title forState:UIControlStateNormal];
|
||||||
|
[cell.mxkButton setTitle:title forState:UIControlStateHighlighted];
|
||||||
|
|
||||||
|
if (actionNumber.unsignedIntegerValue == MXKRoomMemberDetailsActionKick)
|
||||||
|
{
|
||||||
|
[cell.mxkButton setTitleColor:kVectorTextColorRed forState:UIControlStateNormal];
|
||||||
|
[cell.mxkButton setTitleColor:kVectorTextColorRed forState:UIControlStateHighlighted];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[cell.mxkButton setTitleColor:kVectorTextColorBlack forState:UIControlStateNormal];
|
||||||
|
[cell.mxkButton setTitleColor:kVectorTextColorBlack forState:UIControlStateHighlighted];
|
||||||
|
}
|
||||||
|
|
||||||
|
[cell.mxkButton addTarget:self action:@selector(onActionButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
|
||||||
|
cell.mxkButton.tag = actionNumber.unsignedIntegerValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cell;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
|
||||||
|
- (void)onActionButtonPressed:(id)sender
|
||||||
|
{
|
||||||
|
if ([sender isKindOfClass:[UIButton class]])
|
||||||
|
{
|
||||||
|
// already a pending action
|
||||||
|
if ([self hasPendingAction])
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIButton *button = (UIButton*)sender;
|
||||||
|
|
||||||
|
switch (button.tag)
|
||||||
|
{
|
||||||
|
case MXKRoomMemberDetailsActionSetDefaultPowerLevel:
|
||||||
|
{
|
||||||
|
[self setPowerLevel:self.mxRoom.state.powerLevels.usersDefault];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MXKRoomMemberDetailsActionSetModerator:
|
||||||
|
{
|
||||||
|
[self setPowerLevel:kVectorRoomModeratorLevel];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MXKRoomMemberDetailsActionSetAdmin:
|
||||||
|
{
|
||||||
|
[self setPowerLevel:kVectorRoomAdminLevel];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
[super onActionButtonPressed:sender];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
92
Vector/ViewController/RoomMemberDetailsViewController.xib
Normal file
92
Vector/ViewController/RoomMemberDetailsViewController.xib
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9532" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="RoomMemberDetailsViewController">
|
||||||
|
<connections>
|
||||||
|
<outlet property="actionTableViewTopConstraint" destination="ZzT-DZ-sGQ" id="jbs-HH-zKB"/>
|
||||||
|
<outlet property="bottomImageView" destination="7Dc-jk-9sT" id="BVN-bt-VXI"/>
|
||||||
|
<outlet property="memberHeaderView" destination="YXr-As-Mqh" id="Eqb-qr-iAo"/>
|
||||||
|
<outlet property="roomMemberNameLabel" destination="92g-hC-6jB" id="gcP-wz-8FT"/>
|
||||||
|
<outlet property="roomMemberStatusLabel" destination="5le-5e-Vml" id="ODo-tG-ewy"/>
|
||||||
|
<outlet property="tableView" destination="R6u-PR-DcU" id="Cm1-1y-meQ"/>
|
||||||
|
<outlet property="view" destination="gX8-mM-6Ig" id="R3w-s7-1CY"/>
|
||||||
|
</connections>
|
||||||
|
</placeholder>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||||
|
<view contentMode="scaleToFill" id="gX8-mM-6Ig">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YXr-As-Mqh">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="600" height="192"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="92g-hC-6jB">
|
||||||
|
<rect key="frame" x="278" y="125" width="45" height="21"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="21" id="WyU-2u-Lek"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
|
||||||
|
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5le-5e-Vml">
|
||||||
|
<rect key="frame" x="281" y="153" width="39" height="21"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="21" id="7lY-ku-cPk"/>
|
||||||
|
</constraints>
|
||||||
|
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="15"/>
|
||||||
|
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="92g-hC-6jB" firstAttribute="centerX" secondItem="YXr-As-Mqh" secondAttribute="centerX" id="7Is-d0-FZp"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="92g-hC-6jB" secondAttribute="trailing" constant="32" id="Eyx-UF-fYc"/>
|
||||||
|
<constraint firstItem="92g-hC-6jB" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="YXr-As-Mqh" secondAttribute="leading" constant="32" id="QZB-ue-Sih"/>
|
||||||
|
<constraint firstAttribute="height" constant="192" id="at7-Bz-a4i"/>
|
||||||
|
<constraint firstItem="5le-5e-Vml" firstAttribute="centerX" secondItem="YXr-As-Mqh" secondAttribute="centerX" id="bmA-Fq-uxO"/>
|
||||||
|
<constraint firstItem="5le-5e-Vml" firstAttribute="top" secondItem="YXr-As-Mqh" secondAttribute="top" constant="153" id="cAW-ET-f5u"/>
|
||||||
|
<constraint firstItem="5le-5e-Vml" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="YXr-As-Mqh" secondAttribute="leading" constant="42" id="ioz-jk-jrE"/>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="5le-5e-Vml" secondAttribute="trailing" constant="42" id="mad-qx-tHe"/>
|
||||||
|
<constraint firstItem="92g-hC-6jB" firstAttribute="top" secondItem="YXr-As-Mqh" secondAttribute="top" constant="125" id="nSB-Hb-NhH"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="group.png" translatesAutoresizingMaskIntoConstraints="NO" id="7Dc-jk-9sT">
|
||||||
|
<rect key="frame" x="0.0" y="402" width="600" height="198"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="height" constant="198" id="bkF-2R-F6Q"/>
|
||||||
|
</constraints>
|
||||||
|
</imageView>
|
||||||
|
<tableView clipsSubviews="YES" contentMode="scaleToFill" bounces="NO" style="plain" separatorStyle="default" rowHeight="46" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="R6u-PR-DcU">
|
||||||
|
<rect key="frame" x="0.0" y="192" width="600" height="408"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="-1" id="DbO-MV-3hm"/>
|
||||||
|
<outlet property="delegate" destination="-1" id="dFh-bI-jUW"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="7Dc-jk-9sT" secondAttribute="trailing" id="3C8-er-hQ7"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="YXr-As-Mqh" secondAttribute="trailing" id="3DV-SV-Ifa"/>
|
||||||
|
<constraint firstItem="YXr-As-Mqh" firstAttribute="leading" secondItem="gX8-mM-6Ig" secondAttribute="leading" id="EbV-lF-mAx"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="R6u-PR-DcU" secondAttribute="bottom" id="X1a-xq-1Aa"/>
|
||||||
|
<constraint firstItem="R6u-PR-DcU" firstAttribute="top" secondItem="gX8-mM-6Ig" secondAttribute="top" constant="192" id="ZzT-DZ-sGQ"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="R6u-PR-DcU" secondAttribute="trailing" id="aMA-vf-GrY"/>
|
||||||
|
<constraint firstItem="YXr-As-Mqh" firstAttribute="top" secondItem="gX8-mM-6Ig" secondAttribute="top" id="l7z-od-LJm"/>
|
||||||
|
<constraint firstItem="7Dc-jk-9sT" firstAttribute="leading" secondItem="gX8-mM-6Ig" secondAttribute="leading" id="rNt-rC-Pxv"/>
|
||||||
|
<constraint firstItem="R6u-PR-DcU" firstAttribute="leading" secondItem="gX8-mM-6Ig" secondAttribute="leading" id="rbT-O1-m3d"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="7Dc-jk-9sT" secondAttribute="bottom" id="yKK-K2-ebi"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<image name="group.png" width="375" height="198"/>
|
||||||
|
</resources>
|
||||||
|
</document>
|
|
@ -18,6 +18,8 @@
|
||||||
|
|
||||||
#import "ContactTableViewCell.h"
|
#import "ContactTableViewCell.h"
|
||||||
|
|
||||||
|
#import "SegmentedViewController.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
'RoomParticipantsViewController' instance is used to edit members of the room defined by the property 'mxRoom'.
|
'RoomParticipantsViewController' instance is used to edit members of the room defined by the property 'mxRoom'.
|
||||||
|
|
||||||
|
@ -58,6 +60,11 @@
|
||||||
*/
|
*/
|
||||||
@property (nonatomic) BOOL isAddParticipantSearchBarEditing;
|
@property (nonatomic) BOOL isAddParticipantSearchBarEditing;
|
||||||
|
|
||||||
|
/**
|
||||||
|
The potential segmented view controller in which the view controller is displayed.
|
||||||
|
*/
|
||||||
|
@property (nonatomic) SegmentedViewController *segmentedViewController;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Customize the UITableViewCell before rendering it.
|
Customize the UITableViewCell before rendering it.
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
#import "RoomParticipantsViewController.h"
|
#import "RoomParticipantsViewController.h"
|
||||||
|
|
||||||
|
#import "RoomMemberDetailsViewController.h"
|
||||||
|
|
||||||
#import "VectorDesignValues.h"
|
#import "VectorDesignValues.h"
|
||||||
|
|
||||||
#import "RageShakeManager.h"
|
#import "RageShakeManager.h"
|
||||||
|
@ -47,6 +49,8 @@
|
||||||
|
|
||||||
// Observe kMXSessionWillLeaveRoomNotification to be notified if the user leaves the current room.
|
// Observe kMXSessionWillLeaveRoomNotification to be notified if the user leaves the current room.
|
||||||
id leaveRoomNotificationObserver;
|
id leaveRoomNotificationObserver;
|
||||||
|
|
||||||
|
RoomMemberDetailsViewController *detailsViewController;
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -161,6 +165,12 @@
|
||||||
{
|
{
|
||||||
[super viewWillAppear:animated];
|
[super viewWillAppear:animated];
|
||||||
|
|
||||||
|
if (detailsViewController)
|
||||||
|
{
|
||||||
|
[detailsViewController destroy];
|
||||||
|
detailsViewController = nil;
|
||||||
|
}
|
||||||
|
|
||||||
// Refresh display
|
// Refresh display
|
||||||
[self.tableView reloadData];
|
[self.tableView reloadData];
|
||||||
}
|
}
|
||||||
|
@ -795,6 +805,53 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (indexPath.section == participantsSection)
|
||||||
|
{
|
||||||
|
Contact *contact;
|
||||||
|
|
||||||
|
// oneself dedicated cell
|
||||||
|
if (userMatrixId && indexPath.row == 0)
|
||||||
|
{
|
||||||
|
contact = [mxkContactsById objectForKey:userMatrixId];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NSInteger index = indexPath.row;
|
||||||
|
|
||||||
|
if (userMatrixId)
|
||||||
|
{
|
||||||
|
index --;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index < mutableParticipants.count)
|
||||||
|
{
|
||||||
|
NSString *userId = mutableParticipants[index];
|
||||||
|
contact = [mxkContactsById objectForKey:userId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (contact)
|
||||||
|
{
|
||||||
|
detailsViewController = [RoomMemberDetailsViewController roomMemberDetailsViewController];
|
||||||
|
[detailsViewController displayRoomMember:contact.mxMember withMatrixRoom:self.mxRoom];
|
||||||
|
|
||||||
|
// Check whether the view controller is displayed inside a segmented one.
|
||||||
|
if (self.segmentedViewController)
|
||||||
|
{
|
||||||
|
// Hide back button title
|
||||||
|
self.segmentedViewController.navigationItem.backBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
|
||||||
|
|
||||||
|
[self.segmentedViewController.navigationController pushViewController:detailsViewController animated:YES];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Hide back button title
|
||||||
|
self.navigationItem.backBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
|
||||||
|
|
||||||
|
[self.navigationController pushViewController:detailsViewController animated:YES];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||||
}
|
}
|
||||||
|
|
|
@ -937,6 +937,7 @@
|
||||||
|
|
||||||
RoomParticipantsViewController* participantsViewController = [[RoomParticipantsViewController alloc] init];
|
RoomParticipantsViewController* participantsViewController = [[RoomParticipantsViewController alloc] init];
|
||||||
participantsViewController.mxRoom = [session roomWithRoomId:roomid];
|
participantsViewController.mxRoom = [session roomWithRoomId:roomid];
|
||||||
|
participantsViewController.segmentedViewController = segmentedViewController;
|
||||||
[viewControllers addObject:participantsViewController];
|
[viewControllers addObject:participantsViewController];
|
||||||
|
|
||||||
[titles addObject: NSLocalizedStringFromTable(@"room_details_settings", @"Vector", nil)];
|
[titles addObject: NSLocalizedStringFromTable(@"room_details_settings", @"Vector", nil)];
|
||||||
|
|
40
Vector/Views/RoomMember/RoomMemberTitleView.h
Normal file
40
Vector/Views/RoomMember/RoomMemberTitleView.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
Copyright 2016 OpenMarket Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import <MatrixKit/MatrixKit.h>
|
||||||
|
|
||||||
|
@interface RoomMemberTitleView : UIView
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the `UINib` object initialized for the room member title view.
|
||||||
|
*
|
||||||
|
* @return The initialized `UINib` object or `nil` if there were errors during
|
||||||
|
* initialization or the nib file could not be located.
|
||||||
|
*/
|
||||||
|
+ (UINib *)nib;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Creates and returns a new `RoomMemberTitleView-inherited` object.
|
||||||
|
|
||||||
|
@discussion This is the designated initializer for programmatic instantiation.
|
||||||
|
@return An initialized `RoomMemberTitleView-inherited` object if successful, `nil` otherwise.
|
||||||
|
*/
|
||||||
|
+ (instancetype)roomMemberTitleView;
|
||||||
|
|
||||||
|
@property (weak, nonatomic) IBOutlet MXKImageView *memberAvatar;
|
||||||
|
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *memberAvatarCenterXConstraint;
|
||||||
|
|
||||||
|
@end
|
69
Vector/Views/RoomMember/RoomMemberTitleView.m
Normal file
69
Vector/Views/RoomMember/RoomMemberTitleView.m
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
Copyright 2016 OpenMarket Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "RoomMemberTitleView.h"
|
||||||
|
|
||||||
|
@implementation RoomMemberTitleView
|
||||||
|
|
||||||
|
+ (UINib *)nib
|
||||||
|
{
|
||||||
|
return [UINib nibWithNibName:NSStringFromClass([self class])
|
||||||
|
bundle:[NSBundle bundleForClass:[self class]]];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (instancetype)roomMemberTitleView
|
||||||
|
{
|
||||||
|
return [[[self class] nib] instantiateWithOwner:nil options:nil].firstObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)awakeFromNib
|
||||||
|
{
|
||||||
|
[super awakeFromNib];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)layoutSubviews
|
||||||
|
{
|
||||||
|
[super layoutSubviews];
|
||||||
|
|
||||||
|
if (self.superview)
|
||||||
|
{
|
||||||
|
|
||||||
|
// Center horizontally the avatar into the navigation bar
|
||||||
|
CGRect frame = self.superview.frame;
|
||||||
|
UINavigationBar *navigationBar;
|
||||||
|
UIView *superView = self;
|
||||||
|
while (superView.superview)
|
||||||
|
{
|
||||||
|
if ([superView.superview isKindOfClass:[UINavigationBar class]])
|
||||||
|
{
|
||||||
|
navigationBar = (UINavigationBar*)superView.superview;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
superView = superView.superview;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (navigationBar)
|
||||||
|
{
|
||||||
|
CGSize navBarSize = navigationBar.frame.size;
|
||||||
|
CGFloat superviewCenterX = frame.origin.x + (frame.size.width / 2);
|
||||||
|
|
||||||
|
self.memberAvatarCenterXConstraint.constant = (navBarSize.width / 2) - superviewCenterX;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
36
Vector/Views/RoomMember/RoomMemberTitleView.xib
Normal file
36
Vector/Views/RoomMember/RoomMemberTitleView.xib
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9532" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9532"/>
|
||||||
|
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||||
|
<view contentMode="scaleToFill" id="BkF-x3-7fX" customClass="RoomMemberTitleView">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="600" height="240"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7U9-Y6-cEm" customClass="MXKImageView">
|
||||||
|
<rect key="frame" x="258" y="13" width="84" height="84"/>
|
||||||
|
<color key="backgroundColor" red="0.6886889638" green="1" blue="0.74383144840000004" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="width" secondItem="7U9-Y6-cEm" secondAttribute="height" multiplier="1:1" id="9ct-O9-7am"/>
|
||||||
|
<constraint firstAttribute="width" constant="84" id="BeT-JY-cq1"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
</subviews>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="7U9-Y6-cEm" firstAttribute="centerX" secondItem="BkF-x3-7fX" secondAttribute="centerX" id="C5g-ho-90L"/>
|
||||||
|
<constraint firstItem="7U9-Y6-cEm" firstAttribute="top" secondItem="BkF-x3-7fX" secondAttribute="top" constant="13" id="Kwt-Sd-REk"/>
|
||||||
|
</constraints>
|
||||||
|
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="memberAvatar" destination="7U9-Y6-cEm" id="8PP-8r-xoI"/>
|
||||||
|
<outlet property="memberAvatarCenterXConstraint" destination="C5g-ho-90L" id="ILx-zG-Dbj"/>
|
||||||
|
</connections>
|
||||||
|
</view>
|
||||||
|
</objects>
|
||||||
|
</document>
|
21
Vector/Views/TableViewCell/TableViewCellWithButton.h
Normal file
21
Vector/Views/TableViewCell/TableViewCellWithButton.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "MXKTableViewCellWithButton.h"
|
||||||
|
|
||||||
|
@interface TableViewCellWithButton : MXKTableViewCellWithButton
|
||||||
|
|
||||||
|
@end
|
22
Vector/Views/TableViewCell/TableViewCellWithButton.m
Normal file
22
Vector/Views/TableViewCell/TableViewCellWithButton.m
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "TableViewCellWithButton.h"
|
||||||
|
|
||||||
|
@implementation TableViewCellWithButton
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
38
Vector/Views/TableViewCell/TableViewCellWithButton.xib
Normal file
38
Vector/Views/TableViewCell/TableViewCellWithButton.xib
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9532" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9530"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||||
|
<tableViewCell contentMode="scaleToFill" selectionStyle="none" indentationWidth="10" id="20U-7H-xmi" customClass="TableViewCellWithButton">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="20U-7H-xmi" id="cFw-g7-Cgn">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="600" height="43"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ycy-33-7Zq">
|
||||||
|
<rect key="frame" x="15" y="6" width="55" height="30"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<state key="normal" title="Submit">
|
||||||
|
<color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||||
|
</state>
|
||||||
|
</button>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Ycy-33-7Zq" secondAttribute="trailing" constant="15" id="MQb-Pf-iyH"/>
|
||||||
|
<constraint firstItem="Ycy-33-7Zq" firstAttribute="leading" secondItem="cFw-g7-Cgn" secondAttribute="leading" constant="15" id="gXR-S8-WYt"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="Ycy-33-7Zq" secondAttribute="bottom" constant="7" id="roU-6C-3dH"/>
|
||||||
|
<constraint firstItem="Ycy-33-7Zq" firstAttribute="top" secondItem="cFw-g7-Cgn" secondAttribute="top" constant="6" id="zIU-sw-6ea"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<connections>
|
||||||
|
<outlet property="mxkButton" destination="Ycy-33-7Zq" id="rQt-Th-xOb"/>
|
||||||
|
</connections>
|
||||||
|
</tableViewCell>
|
||||||
|
</objects>
|
||||||
|
</document>
|
Loading…
Reference in a new issue