Merge branch 'develop' into element_4173
|
@ -85,6 +85,7 @@ Changes in 1.2.6 (2021-03-11)
|
|||
✨ Features
|
||||
* Improve the status of send messages (sending, sent, received, failed) (#4014)
|
||||
* Retrying & deleting failed messages (#4013)
|
||||
* Composer Update - Typing and sending a message (#4085)
|
||||
|
||||
🙌 Improvements
|
||||
*
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="H1p-Uh-vWS">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="H1p-Uh-vWS">
|
||||
<device id="retina4_7" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
|
@ -34,14 +34,6 @@
|
|||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</view>
|
||||
<rightBarButtonItems>
|
||||
<barButtonItem image="search_icon" id="wyR-qv-IxC" userLabel="Menu Bar Button Item">
|
||||
<inset key="imageInsets" minX="-5" minY="0.0" maxX="5" maxY="0.0"/>
|
||||
</barButtonItem>
|
||||
<barButtonItem image="integrations_icon" id="cal-D0-6Fw">
|
||||
<inset key="imageInsets" minX="10" minY="0.0" maxX="-10" maxY="0.0"/>
|
||||
</barButtonItem>
|
||||
</rightBarButtonItems>
|
||||
</navigationItem>
|
||||
<connections>
|
||||
<outlet property="roomTitleViewContainer" destination="aas-th-FW1" id="SFz-1s-ywg"/>
|
||||
|
@ -96,7 +88,7 @@
|
|||
<!--Room Search View Controller-->
|
||||
<scene sceneID="rUg-1s-vHX">
|
||||
<objects>
|
||||
<viewController id="KDg-aD-xlK" customClass="RoomSearchViewController" sceneMemberID="viewController">
|
||||
<viewController storyboardIdentifier="RoomSearch" id="KDg-aD-xlK" customClass="RoomSearchViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="F5n-wr-hGG"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="BxE-Q4-YjP"/>
|
||||
|
@ -320,7 +312,7 @@
|
|||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="egL-pK-Xhr">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
<color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="taU-5Q-sdv" id="Ipf-IM-E39"/>
|
||||
<outlet property="delegate" destination="taU-5Q-sdv" id="kIU-uT-h9Y"/>
|
||||
|
@ -589,11 +581,10 @@
|
|||
</scene>
|
||||
</scenes>
|
||||
<inferredMetricsTieBreakers>
|
||||
<segue reference="mhb-l9-pM3"/>
|
||||
<segue reference="ziz-Xl-QVg"/>
|
||||
<segue reference="Tfl-tq-LQp"/>
|
||||
<segue reference="f5u-Y1-7nt"/>
|
||||
</inferredMetricsTieBreakers>
|
||||
<resources>
|
||||
<image name="integrations_icon" width="24" height="24"/>
|
||||
<image name="launch_screen_logo" width="240" height="240"/>
|
||||
<image name="search_icon" width="24" height="24"/>
|
||||
<image name="settings_icon" width="24" height="24"/>
|
||||
|
@ -602,5 +593,8 @@
|
|||
<image name="tab_home" width="20" height="23.5"/>
|
||||
<image name="tab_people" width="24" height="24"/>
|
||||
<image name="tab_rooms" width="24" height="24"/>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "encryption_normal.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "encryption_normal@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "encryption_normal@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 384 B After Width: | Height: | Size: 339 B |
Before Width: | Height: | Size: 627 B After Width: | Height: | Size: 537 B |
Before Width: | Height: | Size: 913 B After Width: | Height: | Size: 760 B |
|
@ -1,23 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "encryption_trusted.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "encryption_trusted@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "encryption_trusted@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 476 B After Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 804 B After Width: | Height: | Size: 724 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 973 B |
|
@ -1,23 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "encryption_warning.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "encryption_warning@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "encryption_warning@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 423 B After Width: | Height: | Size: 363 B |
Before Width: | Height: | Size: 688 B After Width: | Height: | Size: 601 B |
Before Width: | Height: | Size: 980 B After Width: | Height: | Size: 836 B |
|
@ -19,8 +19,5 @@
|
|||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 733 B After Width: | Height: | Size: 588 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.6 KiB |
23
Riot/Assets/Images.xcassets/Room/Activities/scrolldown_dark.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "scrolldown_dark.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "scrolldown_dark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "scrolldown_dark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/Activities/scrolldown_dark.imageset/scrolldown_dark.png
vendored
Normal file
After Width: | Height: | Size: 776 B |
BIN
Riot/Assets/Images.xcassets/Room/Activities/scrolldown_dark.imageset/scrolldown_dark@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
Riot/Assets/Images.xcassets/Room/Activities/scrolldown_dark.imageset/scrolldown_dark@3x.png
vendored
Normal file
After Width: | Height: | Size: 2 KiB |
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
26
Riot/Assets/Images.xcassets/Room/Input/input_close_icon.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "input_close_icon.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "input_close_icon@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "input_close_icon@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/Input/input_close_icon.imageset/input_close_icon.png
vendored
Normal file
After Width: | Height: | Size: 324 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/input_close_icon.imageset/input_close_icon@2x.png
vendored
Normal file
After Width: | Height: | Size: 429 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/input_close_icon.imageset/input_close_icon@3x.png
vendored
Normal file
After Width: | Height: | Size: 528 B |
26
Riot/Assets/Images.xcassets/Room/Input/input_edit_icon.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "input_edit_icon.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "input_edit_icon@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "input_edit_icon@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/Input/input_edit_icon.imageset/input_edit_icon.png
vendored
Normal file
After Width: | Height: | Size: 304 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/input_edit_icon.imageset/input_edit_icon@2x.png
vendored
Normal file
After Width: | Height: | Size: 465 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/input_edit_icon.imageset/input_edit_icon@3x.png
vendored
Normal file
After Width: | Height: | Size: 635 B |
26
Riot/Assets/Images.xcassets/Room/Input/input_reply_icon.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "input_reply_icon.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "input_reply_icon@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "input_reply_icon@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/Input/input_reply_icon.imageset/input_reply_icon.png
vendored
Normal file
After Width: | Height: | Size: 299 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/input_reply_icon.imageset/input_reply_icon@2x.png
vendored
Normal file
After Width: | Height: | Size: 463 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/input_reply_icon.imageset/input_reply_icon@3x.png
vendored
Normal file
After Width: | Height: | Size: 604 B |
26
Riot/Assets/Images.xcassets/Room/Input/input_text_background.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "input_text_background.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "input_text_background@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "input_text_background@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/Input/input_text_background.imageset/input_text_background.png
vendored
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
Riot/Assets/Images.xcassets/Room/Input/input_text_background.imageset/input_text_background@2x.png
vendored
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
Riot/Assets/Images.xcassets/Room/Input/input_text_background.imageset/input_text_background@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.6 KiB |
23
Riot/Assets/Images.xcassets/Room/Input/save_icon.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "save_icon.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "save_icon@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "save_icon@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/Input/save_icon.imageset/save_icon.png
vendored
Normal file
After Width: | Height: | Size: 876 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/save_icon.imageset/save_icon@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
Riot/Assets/Images.xcassets/Room/Input/save_icon.imageset/save_icon@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.3 KiB |
23
Riot/Assets/Images.xcassets/Room/Input/send_icon.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "send_icon.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "send_icon@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "send_icon@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/Input/send_icon.imageset/send_icon.png
vendored
Normal file
After Width: | Height: | Size: 960 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/send_icon.imageset/send_icon@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
Riot/Assets/Images.xcassets/Room/Input/send_icon.imageset/send_icon@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.5 KiB |
|
@ -19,8 +19,5 @@
|
|||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "template"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 332 B After Width: | Height: | Size: 809 B |
Before Width: | Height: | Size: 615 B After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 918 B After Width: | Height: | Size: 2.1 KiB |
23
Riot/Assets/Images.xcassets/Room/Input/upload_icon_dark.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "upload_icon_dark.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "upload_icon_dark@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "upload_icon_dark@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/Input/upload_icon_dark.imageset/upload_icon_dark.png
vendored
Normal file
After Width: | Height: | Size: 823 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/upload_icon_dark.imageset/upload_icon_dark@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
Riot/Assets/Images.xcassets/Room/Input/upload_icon_dark.imageset/upload_icon_dark@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.2 KiB |
23
Riot/Assets/Images.xcassets/Room/Input/video_call.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "video_call.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "video_call@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "video_call@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
Riot/Assets/Images.xcassets/Room/Input/video_call.imageset/video_call.png
vendored
Normal file
After Width: | Height: | Size: 356 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/video_call.imageset/video_call@2x.png
vendored
Normal file
After Width: | Height: | Size: 512 B |
BIN
Riot/Assets/Images.xcassets/Room/Input/video_call.imageset/video_call@3x.png
vendored
Normal file
After Width: | Height: | Size: 756 B |
|
@ -322,6 +322,8 @@ Tap the + to start adding people.";
|
|||
"room_message_placeholder" = "Send a message (unencrypted)…";
|
||||
"room_message_reply_to_placeholder" = "Send a reply (unencrypted)…";
|
||||
"room_message_unable_open_link_error_message" = "Unable to open the link.";
|
||||
"room_message_editing" = "Editing";
|
||||
"room_message_replying_to" = "Replying to %@";
|
||||
"room_do_not_have_permission_to_post" = "You do not have permission to post to this room";
|
||||
"encrypted_room_message_placeholder" = "Send an encrypted message…";
|
||||
"encrypted_room_message_reply_to_placeholder" = "Send an encrypted reply…";
|
||||
|
@ -389,6 +391,7 @@ Tap the + to start adding people.";
|
|||
"room_accessibility_integrations" = "Integrations";
|
||||
"room_accessibility_upload" = "Upload";
|
||||
"room_accessibility_call" = "Call";
|
||||
"room_accessibility_video_call" = "Video Call";
|
||||
"room_accessibility_hangup" = "Hang up";
|
||||
"room_place_voice_call" = "Voice call";
|
||||
"room_open_dialpad" = "Dial pad";
|
||||
|
@ -684,6 +687,8 @@ Tap the + to start adding people.";
|
|||
"room_details_title_for_dm" = "Details";
|
||||
"room_details_people" = "Members";
|
||||
"room_details_files" = "Uploads";
|
||||
"room_details_search" = "Search room";
|
||||
"room_details_integrations" = "Integrations";
|
||||
"room_details_settings" = "Settings";
|
||||
"room_details_photo" = "Room Photo";
|
||||
"room_details_photo_for_dm" = "Photo";
|
||||
|
|
|
@ -102,6 +102,7 @@ internal enum Asset {
|
|||
internal static let errorMessageTick = ImageAsset(name: "error_message_tick")
|
||||
internal static let roomActivitiesRetry = ImageAsset(name: "room_activities_retry")
|
||||
internal static let scrolldown = ImageAsset(name: "scrolldown")
|
||||
internal static let scrolldownDark = ImageAsset(name: "scrolldown_dark")
|
||||
internal static let sendingMessageTick = ImageAsset(name: "sending_message_tick")
|
||||
internal static let sentMessageTick = ImageAsset(name: "sent_message_tick")
|
||||
internal static let typing = ImageAsset(name: "typing")
|
||||
|
@ -111,7 +112,15 @@ internal enum Asset {
|
|||
internal static let roomContextMenuMore = ImageAsset(name: "room_context_menu_more")
|
||||
internal static let roomContextMenuReply = ImageAsset(name: "room_context_menu_reply")
|
||||
internal static let roomContextMenuRetry = ImageAsset(name: "room_context_menu_retry")
|
||||
internal static let inputCloseIcon = ImageAsset(name: "input_close_icon")
|
||||
internal static let inputEditIcon = ImageAsset(name: "input_edit_icon")
|
||||
internal static let inputReplyIcon = ImageAsset(name: "input_reply_icon")
|
||||
internal static let inputTextBackground = ImageAsset(name: "input_text_background")
|
||||
internal static let saveIcon = ImageAsset(name: "save_icon")
|
||||
internal static let sendIcon = ImageAsset(name: "send_icon")
|
||||
internal static let uploadIcon = ImageAsset(name: "upload_icon")
|
||||
internal static let uploadIconDark = ImageAsset(name: "upload_icon_dark")
|
||||
internal static let videoCall = ImageAsset(name: "video_call")
|
||||
internal static let voiceCallHangonIcon = ImageAsset(name: "voice_call_hangon_icon")
|
||||
internal static let voiceCallHangupIcon = ImageAsset(name: "voice_call_hangup_icon")
|
||||
internal static let addMemberFloatingAction = ImageAsset(name: "add_member_floating_action")
|
||||
|
|
|
@ -2294,6 +2294,10 @@ internal enum VectorL10n {
|
|||
internal static var roomAccessibilityUpload: String {
|
||||
return VectorL10n.tr("Vector", "room_accessibility_upload")
|
||||
}
|
||||
/// Video Call
|
||||
internal static var roomAccessibilityVideoCall: String {
|
||||
return VectorL10n.tr("Vector", "room_accessibility_video_call")
|
||||
}
|
||||
/// Scroll to bottom
|
||||
internal static var roomAccessiblityScrollToBottom: String {
|
||||
return VectorL10n.tr("Vector", "room_accessiblity_scroll_to_bottom")
|
||||
|
@ -2614,6 +2618,10 @@ internal enum VectorL10n {
|
|||
internal static var roomDetailsHistorySectionPromptTitle: String {
|
||||
return VectorL10n.tr("Vector", "room_details_history_section_prompt_title")
|
||||
}
|
||||
/// Integrations
|
||||
internal static var roomDetailsIntegrations: String {
|
||||
return VectorL10n.tr("Vector", "room_details_integrations")
|
||||
}
|
||||
/// Low priority
|
||||
internal static var roomDetailsLowPriorityTag: String {
|
||||
return VectorL10n.tr("Vector", "room_details_low_priority_tag")
|
||||
|
@ -2666,6 +2674,10 @@ internal enum VectorL10n {
|
|||
internal static var roomDetailsSaveChangesPrompt: String {
|
||||
return VectorL10n.tr("Vector", "room_details_save_changes_prompt")
|
||||
}
|
||||
/// Search room
|
||||
internal static var roomDetailsSearch: String {
|
||||
return VectorL10n.tr("Vector", "room_details_search")
|
||||
}
|
||||
/// Set as Main Address
|
||||
internal static var roomDetailsSetMainAddress: String {
|
||||
return VectorL10n.tr("Vector", "room_details_set_main_address")
|
||||
|
@ -2894,6 +2906,10 @@ internal enum VectorL10n {
|
|||
internal static var roomMemberPowerLevelShortModerator: String {
|
||||
return VectorL10n.tr("Vector", "room_member_power_level_short_moderator")
|
||||
}
|
||||
/// Editing
|
||||
internal static var roomMessageEditing: String {
|
||||
return VectorL10n.tr("Vector", "room_message_editing")
|
||||
}
|
||||
/// Message edits
|
||||
internal static var roomMessageEditsHistoryTitle: String {
|
||||
return VectorL10n.tr("Vector", "room_message_edits_history_title")
|
||||
|
@ -2910,6 +2926,10 @@ internal enum VectorL10n {
|
|||
internal static var roomMessageReplyToShortPlaceholder: String {
|
||||
return VectorL10n.tr("Vector", "room_message_reply_to_short_placeholder")
|
||||
}
|
||||
/// Replying to %@
|
||||
internal static func roomMessageReplyingTo(_ p1: String) -> String {
|
||||
return VectorL10n.tr("Vector", "room_message_replying_to", p1)
|
||||
}
|
||||
/// Send a message…
|
||||
internal static var roomMessageShortPlaceholder: String {
|
||||
return VectorL10n.tr("Vector", "room_message_short_placeholder")
|
||||
|
|
|
@ -70,6 +70,7 @@ import UIKit
|
|||
|
||||
// MARK: - Appearance and style
|
||||
|
||||
var roomInputTextBorder: UIColor { get }
|
||||
|
||||
/// Status bar style to use
|
||||
var statusBarStyle: UIStatusBarStyle { get }
|
||||
|
|
|
@ -52,6 +52,8 @@ class DarkTheme: NSObject, Theme {
|
|||
var noticeSecondaryColor: UIColor = UIColor(rgb: 0x61708B)
|
||||
|
||||
var warningColor: UIColor = UIColor(rgb: 0xFF4B55)
|
||||
|
||||
var roomInputTextBorder: UIColor = UIColor(rgb: 0x8D97A5).withAlphaComponent(0.2)
|
||||
|
||||
var avatarColors: [UIColor] = [
|
||||
UIColor(rgb: 0x03B381),
|
||||
|
|
|
@ -52,8 +52,8 @@ class DefaultTheme: NSObject, Theme {
|
|||
var noticeSecondaryColor: UIColor = UIColor(rgb: 0x61708B)
|
||||
|
||||
var warningColor: UIColor = UIColor(rgb: 0xFF4B55)
|
||||
|
||||
var messageTickColor: UIColor = UIColor(rgb: 0xC1C6CD)
|
||||
|
||||
var roomInputTextBorder: UIColor = UIColor(rgb: 0xE3E8F0)
|
||||
|
||||
var avatarColors: [UIColor] = [
|
||||
UIColor(rgb: 0x03B381),
|
||||
|
|
|
@ -40,7 +40,7 @@ class BadgeLabel: UILabel {
|
|||
}
|
||||
}
|
||||
|
||||
@IBInspectable var padding: CGSize = CGSize(width: 10, height: 2) {
|
||||
@IBInspectable var padding: CGSize = CGSize(width: 10, height: 3) {
|
||||
didSet {
|
||||
invalidateIntrinsicContentSize()
|
||||
}
|
||||
|
|
|
@ -86,8 +86,13 @@ final class RoomInfoCoordinator: NSObject, RoomInfoCoordinatorType {
|
|||
|
||||
// MARK: - Setup
|
||||
|
||||
init(parameters: RoomInfoCoordinatorParameters) {
|
||||
self.navigationRouter = NavigationRouter(navigationController: RiotNavigationController())
|
||||
init(parameters: RoomInfoCoordinatorParameters, navigationRouter: NavigationRouterType? = nil) {
|
||||
if let navigationRouter = navigationRouter {
|
||||
self.navigationRouter = navigationRouter
|
||||
} else {
|
||||
self.navigationRouter = NavigationRouter(navigationController: RiotNavigationController())
|
||||
}
|
||||
|
||||
self.session = parameters.session
|
||||
self.room = parameters.room
|
||||
self.initialSection = parameters.initialSection
|
||||
|
@ -102,8 +107,12 @@ final class RoomInfoCoordinator: NSObject, RoomInfoCoordinatorType {
|
|||
|
||||
self.add(childCoordinator: rootCoordinator)
|
||||
|
||||
self.navigationRouter.setRootModule(rootCoordinator)
|
||||
|
||||
if self.navigationRouter.modules.isEmpty == false {
|
||||
self.navigationRouter.push(rootCoordinator.toPresentable(), animated: true, popCompletion: nil)
|
||||
} else {
|
||||
self.navigationRouter.setRootModule(rootCoordinator)
|
||||
}
|
||||
|
||||
switch initialSection {
|
||||
case .addParticipants:
|
||||
self.showRoomDetails(with: .members, animated: false)
|
||||
|
@ -129,13 +138,29 @@ final class RoomInfoCoordinator: NSObject, RoomInfoCoordinatorType {
|
|||
}
|
||||
|
||||
private func showRoomDetails(with target: RoomInfoListTarget, animated: Bool) {
|
||||
segmentedViewController.selectedIndex = target.tabIndex
|
||||
|
||||
if case .settings(let roomSettingsField) = target {
|
||||
roomSettingsViewController?.selectedRoomSettingsField = roomSettingsField
|
||||
switch target {
|
||||
case .integrations:
|
||||
if let modularVC = IntegrationManagerViewController(for: session, inRoom: room.roomId, screen: kIntegrationManagerMainScreen, widgetId: nil) {
|
||||
navigationRouter.present(modularVC, animated: true)
|
||||
}
|
||||
case .search:
|
||||
MXKRoomDataSourceManager.sharedManager(forMatrixSession: session)?.roomDataSource(forRoom: self.room.roomId, create: false, onComplete: { (roomDataSource) in
|
||||
guard let dataSource = roomDataSource else { return }
|
||||
let storyboard = UIStoryboard(name: "Main", bundle: nil)
|
||||
if let search = storyboard.instantiateViewController(withIdentifier: "RoomSearch") as? RoomSearchViewController {
|
||||
search.roomDataSource = dataSource
|
||||
self.navigationRouter.push(search, animated: animated, popCompletion: nil)
|
||||
}
|
||||
})
|
||||
default:
|
||||
segmentedViewController.selectedIndex = target.tabIndex
|
||||
|
||||
if case .settings(let roomSettingsField) = target {
|
||||
roomSettingsViewController?.selectedRoomSettingsField = roomSettingsField
|
||||
}
|
||||
|
||||
navigationRouter.push(segmentedViewController, animated: animated, popCompletion: nil)
|
||||
}
|
||||
|
||||
navigationRouter.push(segmentedViewController, animated: animated, popCompletion: nil)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,6 +63,16 @@ final class RoomInfoCoordinatorBridgePresenter: NSObject {
|
|||
self.coordinator = roomInfoCoordinator
|
||||
}
|
||||
|
||||
func push(from navigationController: UINavigationController, animated: Bool) {
|
||||
let navigationRouter = NavigationRouter(navigationController: navigationController)
|
||||
|
||||
let roomInfoCoordinator = RoomInfoCoordinator(parameters: self.coordinatorParameters, navigationRouter: navigationRouter)
|
||||
roomInfoCoordinator.delegate = self
|
||||
roomInfoCoordinator.start()
|
||||
|
||||
self.coordinator = roomInfoCoordinator
|
||||
}
|
||||
|
||||
func dismiss(animated: Bool, completion: (() -> Void)?) {
|
||||
guard let coordinator = self.coordinator else {
|
||||
return
|
||||
|
|
|
@ -18,11 +18,13 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
enum RoomInfoListTarget {
|
||||
enum RoomInfoListTarget: Equatable {
|
||||
case settings(_ field: RoomSettingsViewControllerField = RoomSettingsViewControllerFieldNone)
|
||||
case members
|
||||
case uploads
|
||||
|
||||
case integrations
|
||||
case search
|
||||
|
||||
var tabIndex: UInt {
|
||||
let tabIndex: UInt
|
||||
|
||||
|
@ -33,6 +35,10 @@ enum RoomInfoListTarget {
|
|||
tabIndex = 1
|
||||
case .settings:
|
||||
tabIndex = 2
|
||||
case .integrations:
|
||||
tabIndex = 3
|
||||
case .search:
|
||||
tabIndex = 4
|
||||
}
|
||||
|
||||
return tabIndex
|
||||
|
|
|
@ -157,11 +157,19 @@ final class RoomInfoListViewController: UIViewController {
|
|||
let rowUploads = Row(type: .default, icon: Asset.Images.scrollup.image, text: VectorL10n.roomDetailsFiles, accessoryType: .disclosureIndicator) {
|
||||
self.viewModel.process(viewAction: .navigate(target: .uploads))
|
||||
}
|
||||
let rowSearch = Row(type: .default, icon: Asset.Images.searchIcon.image, text: VectorL10n.roomDetailsSearch, accessoryType: .disclosureIndicator) {
|
||||
self.viewModel.process(viewAction: .navigate(target: .search))
|
||||
}
|
||||
let rowIntegrations = Row(type: .default, icon: Asset.Images.integrationsIcon.image, text: VectorL10n.roomDetailsIntegrations, accessoryType: .disclosureIndicator) {
|
||||
self.viewModel.process(viewAction: .navigate(target: .integrations))
|
||||
}
|
||||
|
||||
let sectionSettings = Section(header: VectorL10n.roomInfoListSectionOther,
|
||||
rows: [rowSettings,
|
||||
rowIntegrations,
|
||||
rowMembers,
|
||||
rowUploads],
|
||||
rowUploads,
|
||||
rowSearch],
|
||||
footer: nil)
|
||||
|
||||
let leaveTitle = viewData.basicInfoViewData.isDirect ?
|
||||
|
@ -205,7 +213,9 @@ final class RoomInfoListViewController: UIViewController {
|
|||
}
|
||||
|
||||
private func setupViews() {
|
||||
self.navigationItem.rightBarButtonItem = MXKBarButtonItem(customView: closeButton)
|
||||
if navigationController?.viewControllers.count ?? 0 <= 1 {
|
||||
self.navigationItem.rightBarButtonItem = MXKBarButtonItem(customView: closeButton)
|
||||
}
|
||||
|
||||
self.title = ""
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
|
||||
#import "UIViewController+RiotSearch.h"
|
||||
|
||||
@class BadgeLabel;
|
||||
|
||||
/**
|
||||
Notification string used to indicate call tile tapped in a room. Notification object will be the `RoomBubbleCellData` object.
|
||||
*/
|
||||
|
@ -46,6 +48,9 @@ extern NSNotificationName const RoomCallTileTappedNotification;
|
|||
@property (weak, nonatomic) IBOutlet UILabel *jumpToLastUnreadLabel;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *resetReadMarkerButton;
|
||||
@property (weak, nonatomic) IBOutlet UIView *jumpToLastUnreadBannerSeparatorView;
|
||||
@property (weak, nonatomic) IBOutlet UIView *inputBackgroundView;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *scrollToBottomButton;
|
||||
@property (weak, nonatomic) IBOutlet BadgeLabel *scrollToBottomBadgeLabel;
|
||||
|
||||
/**
|
||||
Preview data for a room invitation received by email, or a link to a room.
|
||||
|
@ -72,5 +77,7 @@ extern NSNotificationName const RoomCallTileTappedNotification;
|
|||
*/
|
||||
- (IBAction)onButtonPressed:(id)sender;
|
||||
|
||||
- (IBAction)scrollToBottomAction:(id)sender;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||
<device id="retina4_7" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
@ -13,6 +14,7 @@
|
|||
<outlet property="bubblesTableView" destination="BGD-sd-SQR" id="OG4-Tw-Ovt"/>
|
||||
<outlet property="bubblesTableViewBottomConstraint" destination="1SD-y2-oTg" id="n8D-hT-eqt"/>
|
||||
<outlet property="bubblesTableViewTopConstraint" destination="bFw-dg-qEr" id="KxM-H0-h2y"/>
|
||||
<outlet property="inputBackgroundView" destination="Xt7-83-dQh" id="xoG-eb-zFB"/>
|
||||
<outlet property="jumpToLastUnreadBannerContainer" destination="S6r-bo-jxw" id="Ady-Eh-4E0"/>
|
||||
<outlet property="jumpToLastUnreadBannerContainerTopConstraint" destination="5eM-eJ-khq" id="b1J-aM-ZcT"/>
|
||||
<outlet property="jumpToLastUnreadBannerSeparatorView" destination="knN-q1-QkJ" id="hHJ-c8-QfN"/>
|
||||
|
@ -28,6 +30,8 @@
|
|||
<outlet property="roomInputToolbarContainer" destination="nLd-BP-JAE" id="1dp-P1-0js"/>
|
||||
<outlet property="roomInputToolbarContainerBottomConstraint" destination="omU-sm-3bK" id="qaT-Ej-BdE"/>
|
||||
<outlet property="roomInputToolbarContainerHeightConstraint" destination="5eD-Fm-RDb" id="6ny-5w-1UA"/>
|
||||
<outlet property="scrollToBottomBadgeLabel" destination="QHs-rM-UU8" id="wk7-PQ-9Jm"/>
|
||||
<outlet property="scrollToBottomButton" destination="Ih9-EU-BOU" id="Wwg-gS-Sfp"/>
|
||||
<outlet property="view" destination="iN0-l3-epB" id="ieV-u7-rXU"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
|
@ -36,7 +40,7 @@
|
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" style="plain" separatorStyle="none" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="BGD-sd-SQR">
|
||||
<tableView contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" style="plain" separatorStyle="none" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="BGD-sd-SQR">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="626"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<userDefinedRuntimeAttributes>
|
||||
|
@ -54,7 +58,7 @@
|
|||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="S6r-bo-jxw">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ISb-UT-u0O">
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ISb-UT-u0O">
|
||||
<rect key="frame" x="5" y="0.0" width="51" height="44"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="44" id="XgY-bC-cpU"/>
|
||||
|
@ -76,7 +80,7 @@
|
|||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="c4g-BY-xOo">
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="c4g-BY-xOo">
|
||||
<rect key="frame" x="335" y="0.0" width="44" height="44"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="44" id="2YD-H9-DyP"/>
|
||||
|
@ -121,12 +125,29 @@
|
|||
<constraint firstItem="ISb-UT-u0O" firstAttribute="centerY" secondItem="Vlz-UJ-Jz8" secondAttribute="centerY" id="w7t-WC-VjP"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" alpha="0.0" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ih9-EU-BOU" userLabel="scroll Button">
|
||||
<rect key="frame" x="327" y="570" width="32" height="32"/>
|
||||
<state key="normal" image="scrolldown"/>
|
||||
<connections>
|
||||
<action selector="scrollToBottomAction:" destination="-1" eventType="touchUpInside" id="TOf-aY-J6a"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" alpha="0.0" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QHs-rM-UU8" userLabel="scroll badge" customClass="BadgeLabel" customModule="Riot" customModuleProvider="target">
|
||||
<rect key="frame" x="334.5" y="562" width="17.5" height="16.5"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="11"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xt7-83-dQh" userLabel="Input Background View">
|
||||
<rect key="frame" x="0.0" y="626" width="375" height="41"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
</view>
|
||||
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XX4-n6-hCm" userLabel="Activities Container">
|
||||
<rect key="frame" x="0.0" y="606" width="375" height="20"/>
|
||||
<rect key="frame" x="0.0" y="626" width="375" height="0.0"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="RoomVCActivitiesContainer"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="E8v-l2-8eV"/>
|
||||
<constraint firstAttribute="height" id="E8v-l2-8eV"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nLd-BP-JAE" userLabel="Room Input Toolbar Container">
|
||||
|
@ -142,16 +163,23 @@
|
|||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="QpJ-1u-4ii"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="RoomVCView"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="BGD-sd-SQR" secondAttribute="bottom" constant="41" id="1SD-y2-oTg"/>
|
||||
<constraint firstItem="S6r-bo-jxw" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="5eM-eJ-khq"/>
|
||||
<constraint firstItem="Xt7-83-dQh" firstAttribute="leading" secondItem="QpJ-1u-4ii" secondAttribute="leading" id="6lr-Tx-pEb"/>
|
||||
<constraint firstItem="QpJ-1u-4ii" firstAttribute="trailing" secondItem="Ih9-EU-BOU" secondAttribute="trailing" constant="16" id="6rq-lR-0sB"/>
|
||||
<constraint firstItem="54r-18-K1g" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="7Ft-EV-Br0"/>
|
||||
<constraint firstItem="gt1-EO-UVY" firstAttribute="leading" secondItem="QpJ-1u-4ii" secondAttribute="leading" id="8Ff-Ot-h3F"/>
|
||||
<constraint firstItem="Xt7-83-dQh" firstAttribute="bottom" secondItem="iN0-l3-epB" secondAttribute="bottom" id="9g2-wm-4M9"/>
|
||||
<constraint firstItem="S6r-bo-jxw" firstAttribute="leading" secondItem="QpJ-1u-4ii" secondAttribute="leading" id="Bcq-e4-B0D"/>
|
||||
<constraint firstItem="BGD-sd-SQR" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="ECb-mP-EOG"/>
|
||||
<constraint firstAttribute="trailing" secondItem="BGD-sd-SQR" secondAttribute="trailing" id="EGD-cX-OGq"/>
|
||||
<constraint firstItem="XX4-n6-hCm" firstAttribute="top" secondItem="Ih9-EU-BOU" secondAttribute="bottom" constant="24" id="GUp-ZU-6h3"/>
|
||||
<constraint firstItem="QHs-rM-UU8" firstAttribute="centerX" secondItem="Ih9-EU-BOU" secondAttribute="centerX" id="K8X-wJ-hkh"/>
|
||||
<constraint firstItem="QHs-rM-UU8" firstAttribute="centerY" secondItem="Ih9-EU-BOU" secondAttribute="top" id="KL4-OU-cP6"/>
|
||||
<constraint firstItem="gt1-EO-UVY" firstAttribute="trailing" secondItem="QpJ-1u-4ii" secondAttribute="trailing" id="L9A-P5-xeT"/>
|
||||
<constraint firstItem="XX4-n6-hCm" firstAttribute="leading" secondItem="QpJ-1u-4ii" secondAttribute="leading" id="Os4-cU-eQb"/>
|
||||
<constraint firstItem="XX4-n6-hCm" firstAttribute="bottom" secondItem="nLd-BP-JAE" secondAttribute="top" id="QO8-nF-xys"/>
|
||||
|
@ -159,21 +187,30 @@
|
|||
<constraint firstItem="XX4-n6-hCm" firstAttribute="trailing" secondItem="QpJ-1u-4ii" secondAttribute="trailing" id="Tij-mR-KZp"/>
|
||||
<constraint firstItem="S6r-bo-jxw" firstAttribute="trailing" secondItem="QpJ-1u-4ii" secondAttribute="trailing" id="VVn-vW-lbm"/>
|
||||
<constraint firstItem="gt1-EO-UVY" firstAttribute="top" secondItem="QpJ-1u-4ii" secondAttribute="top" id="YfN-0Z-0bc"/>
|
||||
<constraint firstItem="S6r-bo-jxw" firstAttribute="centerX" secondItem="BGD-sd-SQR" secondAttribute="centerX" id="a2s-5o-q2d"/>
|
||||
<constraint firstItem="54r-18-K1g" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="aR5-rp-1Cp"/>
|
||||
<constraint firstItem="gt1-EO-UVY" firstAttribute="bottom" secondItem="nLd-BP-JAE" secondAttribute="bottom" id="acJ-g8-R7x"/>
|
||||
<constraint firstItem="BGD-sd-SQR" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="bFw-dg-qEr"/>
|
||||
<constraint firstAttribute="bottom" secondItem="nLd-BP-JAE" secondAttribute="bottom" id="omU-sm-3bK"/>
|
||||
<constraint firstItem="nLd-BP-JAE" firstAttribute="trailing" secondItem="QpJ-1u-4ii" secondAttribute="trailing" id="pRw-S0-6WL"/>
|
||||
<constraint firstItem="Xt7-83-dQh" firstAttribute="trailing" secondItem="QpJ-1u-4ii" secondAttribute="trailing" id="tAK-09-gTA"/>
|
||||
<constraint firstAttribute="trailing" secondItem="54r-18-K1g" secondAttribute="trailing" id="wOi-Ih-yfq"/>
|
||||
<constraint firstItem="Xt7-83-dQh" firstAttribute="top" secondItem="XX4-n6-hCm" secondAttribute="top" id="xHx-En-Ppf"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<viewLayoutGuide key="safeArea" id="QpJ-1u-4ii"/>
|
||||
<point key="canvasLocation" x="138" y="153"/>
|
||||
<point key="canvasLocation" x="136.80000000000001" y="152.47376311844079"/>
|
||||
</view>
|
||||
</objects>
|
||||
<designables>
|
||||
<designable name="QHs-rM-UU8">
|
||||
<size key="intrinsicContentSize" width="17.5" height="16.5"/>
|
||||
</designable>
|
||||
</designables>
|
||||
<resources>
|
||||
<image name="cancel" width="20" height="20"/>
|
||||
<image name="scrolldown" width="32" height="32"/>
|
||||
<image name="scrollup" width="30" height="30"/>
|
||||
<systemColor name="systemBackgroundColor">
|
||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
@ -73,16 +73,6 @@
|
|||
*/
|
||||
- (void)displayOngoingConferenceCall:(void (^)(BOOL video))ongoingConferenceCallPressed onClosePressed:(void (^)(void))ongoingConferenceCallClosePressed;
|
||||
|
||||
/**
|
||||
Display a "scroll to bottom" icon.
|
||||
Replace the current notification if any.
|
||||
|
||||
@param newMessagesCount the count of the unread messages.
|
||||
@param onIconTapGesture block called when user taps on notification icon.
|
||||
*/
|
||||
- (void)displayScrollToBottomIcon:(NSUInteger)newMessagesCount onIconTapGesture:(void (^)(void))onIconTapGesture;
|
||||
|
||||
|
||||
/**
|
||||
Notify that the a room is obsolete and a replacement room is available.
|
||||
|
||||
|
|
|
@ -268,59 +268,6 @@
|
|||
[self checkHeight:YES];
|
||||
}
|
||||
|
||||
- (void)displayScrollToBottomIcon:(NSUInteger)newMessagesCount onIconTapGesture:(void (^)(void))onIconTapGesture
|
||||
{
|
||||
if (newMessagesCount)
|
||||
{
|
||||
[self reset];
|
||||
|
||||
self.iconImageView.image = [UIImage imageNamed:@"scrolldown"];
|
||||
self.iconImageView.tintColor = ThemeService.shared.theme.noticeColor;
|
||||
|
||||
NSString *notification;
|
||||
if (newMessagesCount > 1)
|
||||
{
|
||||
notification = NSLocalizedStringFromTable(@"room_new_messages_notification", @"Vector", nil);
|
||||
}
|
||||
else
|
||||
{
|
||||
notification = NSLocalizedStringFromTable(@"room_new_message_notification", @"Vector", nil);
|
||||
}
|
||||
self.messageLabel.text = [NSString stringWithFormat:notification, newMessagesCount];
|
||||
self.messageLabel.textColor = ThemeService.shared.theme.warningColor;
|
||||
self.messageLabel.hidden = NO;
|
||||
}
|
||||
else
|
||||
{
|
||||
// We keep the current message if any
|
||||
[self resetIcon];
|
||||
|
||||
self.iconImageView.image = [UIImage imageNamed:@"scrolldown"];
|
||||
self.iconImageView.tintColor = ThemeService.shared.theme.textPrimaryColor;
|
||||
}
|
||||
self.iconImageView.hidden = NO;
|
||||
|
||||
// Make VoiceOver consider it as a button
|
||||
self.iconImageView.accessibilityLabel = NSLocalizedStringFromTable(@"room_accessiblity_scroll_to_bottom", @"Vector", nil);
|
||||
self.iconImageView.isAccessibilityElement = YES;
|
||||
self.iconImageView.accessibilityTraits = UIAccessibilityTraitButton;
|
||||
|
||||
if (onIconTapGesture)
|
||||
{
|
||||
objc_setAssociatedObject(self.iconImageView, "onIconTapGesture", [onIconTapGesture copy], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||
|
||||
// Listen to icon tap
|
||||
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onIconTap:)];
|
||||
[tapGesture setNumberOfTouchesRequired:1];
|
||||
[tapGesture setNumberOfTapsRequired:1];
|
||||
[tapGesture setDelegate:self];
|
||||
[self.iconImageView addGestureRecognizer:tapGesture];
|
||||
self.iconImageView.userInteractionEnabled = YES;
|
||||
}
|
||||
|
||||
[self checkHeight:YES];
|
||||
}
|
||||
|
||||
- (void)displayRoomReplacementWithRoomLinkTappedHandler:(void (^)(void))onRoomReplacementLinkTapped
|
||||
{
|
||||
[self reset];
|
||||
|
|
|
@ -128,7 +128,7 @@
|
|||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="RoomExtrasInfosView"/>
|
||||
<constraints>
|
||||
<constraint firstItem="qhJ-5H-64e" firstAttribute="width" secondItem="iN0-l3-epB" secondAttribute="width" id="4o2-V9-a4L"/>
|
||||
|
|
|
@ -59,6 +59,13 @@ typedef enum : NSUInteger
|
|||
*/
|
||||
- (void)roomInputToolbarViewDidTapMediaLibrary:(MXKRoomInputToolbarView*)toolbarView;
|
||||
|
||||
/**
|
||||
Tells the delegate that the user wants to cancel the current edition / reply.
|
||||
|
||||
@param toolbarView the room input toolbar view
|
||||
*/
|
||||
- (void)roomInputToolbarViewDidTapCancel:(MXKRoomInputToolbarView*)toolbarView;
|
||||
|
||||
@end
|
||||
|
||||
/**
|
||||
|
@ -74,11 +81,6 @@ typedef enum : NSUInteger
|
|||
|
||||
@property (weak, nonatomic) IBOutlet UIView *mainToolbarView;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView *separatorView;
|
||||
@property (strong, nonatomic) IBOutlet MXKImageView *pictureView;
|
||||
|
||||
@property (strong, nonatomic) IBOutlet UIImageView *encryptedRoomIcon;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *mainToolbarMinHeightConstraint;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *mainToolbarHeightConstraint;
|
||||
|
||||
|
@ -86,29 +88,27 @@ typedef enum : NSUInteger
|
|||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *messageComposerContainerTrailingConstraint;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *attachMediaButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *voiceCallButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *hangupCallButton;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *voiceCallButtonWidthConstraint;
|
||||
@property (weak, nonatomic) IBOutlet UIImageView *inputTextBackgroundView;
|
||||
|
||||
/**
|
||||
Tell whether the call option is supported. YES by default.
|
||||
*/
|
||||
@property (nonatomic) BOOL supportCallOption;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *inputContextViewHeightConstraint;
|
||||
@property (weak, nonatomic) IBOutlet UIImageView *inputContextImageView;
|
||||
@property (weak, nonatomic) IBOutlet UILabel *inputContextLabel;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *inputContextButton;
|
||||
|
||||
/**
|
||||
Tell whether the filled data will be sent encrypted. NO by default.
|
||||
*/
|
||||
@property (nonatomic) BOOL isEncryptionEnabled;
|
||||
|
||||
/**
|
||||
Sender of the event being edited / replied.
|
||||
*/
|
||||
@property (nonatomic, strong) NSString *eventSenderDisplayName;
|
||||
|
||||
/**
|
||||
Destination of the message in the composer.
|
||||
*/
|
||||
@property (nonatomic) RoomInputToolbarViewSendMode sendMode;
|
||||
|
||||
/**
|
||||
Tell whether a call is active.
|
||||
*/
|
||||
@property (nonatomic) BOOL activeCall;
|
||||
|
||||
@end
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
#import "WidgetManager.h"
|
||||
#import "IntegrationManagerViewController.h"
|
||||
|
||||
const double RoomInputToolbarViewContextBarHeight = 30;
|
||||
|
||||
@interface RoomInputToolbarView()
|
||||
{
|
||||
// The intermediate action sheet
|
||||
|
@ -60,14 +62,12 @@
|
|||
{
|
||||
[super awakeFromNib];
|
||||
|
||||
_supportCallOption = YES;
|
||||
_sendMode = RoomInputToolbarViewSendModeSend;
|
||||
|
||||
self.rightInputToolbarButton.hidden = YES;
|
||||
|
||||
[self.rightInputToolbarButton setTitleColor:ThemeService.shared.theme.tintColor forState:UIControlStateNormal];
|
||||
[self.rightInputToolbarButton setTitleColor:ThemeService.shared.theme.tintColor forState:UIControlStateHighlighted];
|
||||
|
||||
self.inputContextViewHeightConstraint.constant = 0;
|
||||
|
||||
[self.rightInputToolbarButton setTitle:nil forState:UIControlStateNormal];
|
||||
[self.rightInputToolbarButton setTitle:nil forState:UIControlStateHighlighted];
|
||||
|
||||
self.isEncryptionEnabled = _isEncryptionEnabled;
|
||||
}
|
||||
|
||||
|
@ -80,8 +80,6 @@
|
|||
// Remove default toolbar background color
|
||||
self.backgroundColor = [UIColor clearColor];
|
||||
|
||||
self.separatorView.backgroundColor = ThemeService.shared.theme.lineBreakColor;
|
||||
|
||||
// Custom the growingTextView display
|
||||
growingTextView.layer.cornerRadius = 0;
|
||||
growingTextView.layer.borderWidth = 0;
|
||||
|
@ -90,6 +88,8 @@
|
|||
growingTextView.font = [UIFont systemFontOfSize:15];
|
||||
growingTextView.textColor = ThemeService.shared.theme.textPrimaryColor;
|
||||
growingTextView.tintColor = ThemeService.shared.theme.tintColor;
|
||||
growingTextView.placeholderColor = ThemeService.shared.theme.textTertiaryColor;
|
||||
growingTextView.internalTextView.showsVerticalScrollIndicator = NO;
|
||||
|
||||
growingTextView.internalTextView.keyboardAppearance = ThemeService.shared.theme.keyboardAppearance;
|
||||
if (growingTextView.isFirstResponder)
|
||||
|
@ -99,33 +99,35 @@
|
|||
}
|
||||
|
||||
self.attachMediaButton.accessibilityLabel = NSLocalizedStringFromTable(@"room_accessibility_upload", @"Vector", nil);
|
||||
self.voiceCallButton.accessibilityLabel = NSLocalizedStringFromTable(@"room_accessibility_call", @"Vector", nil);
|
||||
self.hangupCallButton.accessibilityLabel = NSLocalizedStringFromTable(@"room_accessibility_hangup", @"Vector", nil);
|
||||
|
||||
self.hangupCallButton.tintColor = ThemeService.shared.theme.noticeColor;
|
||||
self.voiceCallButton.tintColor = ThemeService.shared.theme.tintColor;
|
||||
self.attachMediaButton.tintColor = ThemeService.shared.theme.tintColor;
|
||||
UIImage *image = [UIImage imageNamed:@"input_text_background"];
|
||||
image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(9, 15, 10, 16)];
|
||||
self.inputTextBackgroundView.image = image;
|
||||
self.inputTextBackgroundView.tintColor = ThemeService.shared.theme.roomInputTextBorder;
|
||||
|
||||
if ([ThemeService.shared.themeId isEqualToString:@"light"])
|
||||
{
|
||||
[self.attachMediaButton setImage:[UIImage imageNamed:@"upload_icon"] forState:UIControlStateNormal];
|
||||
}
|
||||
else if ([ThemeService.shared.themeId isEqualToString:@"dark"] || [ThemeService.shared.themeId isEqualToString:@"black"])
|
||||
{
|
||||
[self.attachMediaButton setImage:[UIImage imageNamed:@"upload_icon_dark"] forState:UIControlStateNormal];
|
||||
}
|
||||
else if (@available(iOS 12.0, *) && ThemeService.shared.theme.userInterfaceStyle == UIUserInterfaceStyleDark) {
|
||||
[self.attachMediaButton setImage:[UIImage imageNamed:@"upload_icon_dark"] forState:UIControlStateNormal];
|
||||
}
|
||||
|
||||
self.inputContextImageView.tintColor = ThemeService.shared.theme.textSecondaryColor;
|
||||
self.inputContextLabel.textColor = ThemeService.shared.theme.textSecondaryColor;
|
||||
self.inputContextButton.tintColor = ThemeService.shared.theme.textSecondaryColor;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (void)setSupportCallOption:(BOOL)supportCallOption
|
||||
- (void)setTextMessage:(NSString *)textMessage
|
||||
{
|
||||
if (_supportCallOption != supportCallOption)
|
||||
{
|
||||
_supportCallOption = supportCallOption;
|
||||
|
||||
if (supportCallOption)
|
||||
{
|
||||
self.voiceCallButtonWidthConstraint.constant = 46;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.voiceCallButtonWidthConstraint.constant = 0;
|
||||
}
|
||||
|
||||
[self setNeedsUpdateConstraints];
|
||||
}
|
||||
[self updateSendButtonWithMessage:textMessage];
|
||||
[super setTextMessage:textMessage];
|
||||
}
|
||||
|
||||
- (void)setIsEncryptionEnabled:(BOOL)isEncryptionEnabled
|
||||
|
@ -137,31 +139,77 @@
|
|||
|
||||
- (void)setSendMode:(RoomInputToolbarViewSendMode)sendMode
|
||||
{
|
||||
RoomInputToolbarViewSendMode previousMode = _sendMode;
|
||||
_sendMode = sendMode;
|
||||
|
||||
[self updatePlaceholder];
|
||||
[self updateToolbarButtonLabel];
|
||||
[self updateToolbarButtonLabelWithPreviousMode: previousMode];
|
||||
}
|
||||
|
||||
- (void)updateToolbarButtonLabel
|
||||
- (void)updateToolbarButtonLabelWithPreviousMode:(RoomInputToolbarViewSendMode)previousMode
|
||||
{
|
||||
NSString *title;
|
||||
UIImage *buttonImage;
|
||||
|
||||
double updatedHeight = self.mainToolbarHeightConstraint.constant;
|
||||
|
||||
switch (_sendMode)
|
||||
{
|
||||
case RoomInputToolbarViewSendModeReply:
|
||||
title = NSLocalizedStringFromTable(@"room_action_reply", @"Vector", nil);
|
||||
buttonImage = [UIImage imageNamed:@"send_icon"];
|
||||
self.inputContextImageView.image = [UIImage imageNamed:@"input_reply_icon"];
|
||||
self.inputContextLabel.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"room_message_replying_to", @"Vector", nil), self.eventSenderDisplayName];
|
||||
|
||||
self.inputContextViewHeightConstraint.constant = RoomInputToolbarViewContextBarHeight;
|
||||
updatedHeight += RoomInputToolbarViewContextBarHeight;
|
||||
self->growingTextView.maxHeight -= RoomInputToolbarViewContextBarHeight;
|
||||
break;
|
||||
case RoomInputToolbarViewSendModeEdit:
|
||||
title = NSLocalizedStringFromTable(@"save", @"Vector", nil);
|
||||
buttonImage = [UIImage imageNamed:@"save_icon"];
|
||||
self.inputContextImageView.image = [UIImage imageNamed:@"input_edit_icon"];
|
||||
self.inputContextLabel.text = NSLocalizedStringFromTable(@"room_message_editing", @"Vector", nil);
|
||||
|
||||
self.inputContextViewHeightConstraint.constant = RoomInputToolbarViewContextBarHeight;
|
||||
updatedHeight += RoomInputToolbarViewContextBarHeight;
|
||||
self->growingTextView.maxHeight -= RoomInputToolbarViewContextBarHeight;
|
||||
break;
|
||||
default:
|
||||
title = [NSBundle mxk_localizedStringForKey:@"send"];
|
||||
buttonImage = [UIImage imageNamed:@"send_icon"];
|
||||
|
||||
if (previousMode != _sendMode)
|
||||
{
|
||||
updatedHeight -= RoomInputToolbarViewContextBarHeight;
|
||||
self->growingTextView.maxHeight += RoomInputToolbarViewContextBarHeight;
|
||||
}
|
||||
self.inputContextViewHeightConstraint.constant = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
[self.rightInputToolbarButton setImage:buttonImage forState:UIControlStateNormal];
|
||||
|
||||
if (self.maxHeight && updatedHeight > self.maxHeight)
|
||||
{
|
||||
growingTextView.maxHeight -= updatedHeight - self.maxHeight;
|
||||
updatedHeight = self.maxHeight;
|
||||
}
|
||||
|
||||
[self.rightInputToolbarButton setTitle:title forState:UIControlStateNormal];
|
||||
[self.rightInputToolbarButton setTitle:title forState:UIControlStateHighlighted];
|
||||
if (updatedHeight < self.mainToolbarMinHeightConstraint.constant)
|
||||
{
|
||||
updatedHeight = self.mainToolbarMinHeightConstraint.constant;
|
||||
}
|
||||
|
||||
if (self.mainToolbarHeightConstraint.constant != updatedHeight)
|
||||
{
|
||||
[UIView animateWithDuration:.3 animations:^{
|
||||
self.mainToolbarHeightConstraint.constant = updatedHeight;
|
||||
[self layoutIfNeeded];
|
||||
|
||||
// Update toolbar superview
|
||||
if ([self.delegate respondsToSelector:@selector(roomInputToolbarView:heightDidChanged:completion:)])
|
||||
{
|
||||
[self.delegate roomInputToolbarView:self heightDidChanged:updatedHeight completion:nil];
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)updatePlaceholder
|
||||
|
@ -219,19 +267,26 @@
|
|||
self.placeholder = placeholder;
|
||||
}
|
||||
|
||||
- (void)setActiveCall:(BOOL)activeCall
|
||||
{
|
||||
if (_activeCall != activeCall)
|
||||
{
|
||||
_activeCall = activeCall;
|
||||
#pragma mark - Actions
|
||||
|
||||
self.voiceCallButton.hidden = (_activeCall || !self.rightInputToolbarButton.hidden);
|
||||
self.hangupCallButton.hidden = (!_activeCall || !self.rightInputToolbarButton.hidden);
|
||||
- (IBAction)cancelAction:(id)sender
|
||||
{
|
||||
if ([self.delegate respondsToSelector:@selector(roomInputToolbarViewDidTapCancel:)])
|
||||
{
|
||||
[self.delegate roomInputToolbarViewDidTapCancel:self];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - HPGrowingTextView delegate
|
||||
|
||||
- (BOOL)growingTextView:(HPGrowingTextView *)growingTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
|
||||
{
|
||||
NSString *newText = [growingTextView.text stringByReplacingCharactersInRange:range withString:text];
|
||||
[self updateSendButtonWithMessage:newText];
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)growingTextViewDidChange:(HPGrowingTextView *)hpGrowingTextView
|
||||
{
|
||||
// Clean the carriage return added on return press
|
||||
|
@ -241,32 +296,19 @@
|
|||
}
|
||||
|
||||
[super growingTextViewDidChange:hpGrowingTextView];
|
||||
|
||||
if (self.rightInputToolbarButton.isEnabled && self.rightInputToolbarButton.isHidden)
|
||||
{
|
||||
self.rightInputToolbarButton.hidden = NO;
|
||||
self.attachMediaButton.hidden = YES;
|
||||
self.voiceCallButton.hidden = YES;
|
||||
self.hangupCallButton.hidden = YES;
|
||||
|
||||
self.messageComposerContainerTrailingConstraint.constant = self.frame.size.width - self.rightInputToolbarButton.frame.origin.x + 4;
|
||||
}
|
||||
else if (!self.rightInputToolbarButton.isEnabled && !self.rightInputToolbarButton.isHidden)
|
||||
{
|
||||
self.rightInputToolbarButton.hidden = YES;
|
||||
self.attachMediaButton.hidden = NO;
|
||||
self.voiceCallButton.hidden = _activeCall;
|
||||
self.hangupCallButton.hidden = !_activeCall;
|
||||
|
||||
self.messageComposerContainerTrailingConstraint.constant = self.frame.size.width - self.attachMediaButton.frame.origin.x + 4;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)growingTextView:(HPGrowingTextView *)hpGrowingTextView willChangeHeight:(float)height
|
||||
{
|
||||
// Update height of the main toolbar (message composer)
|
||||
CGFloat updatedHeight = height + (self.messageComposerContainerTopConstraint.constant + self.messageComposerContainerBottomConstraint.constant);
|
||||
CGFloat updatedHeight = height + (self.messageComposerContainerTopConstraint.constant + self.messageComposerContainerBottomConstraint.constant) + self.inputContextViewHeightConstraint.constant;
|
||||
|
||||
if (self.maxHeight && updatedHeight > self.maxHeight)
|
||||
{
|
||||
hpGrowingTextView.maxHeight -= updatedHeight - self.maxHeight;
|
||||
updatedHeight = self.maxHeight;
|
||||
}
|
||||
|
||||
if (updatedHeight < self.mainToolbarMinHeightConstraint.constant)
|
||||
{
|
||||
updatedHeight = self.mainToolbarMinHeightConstraint.constant;
|
||||
|
@ -374,66 +416,6 @@
|
|||
NSLog(@"[RoomInputToolbarView] Attach media is not supported");
|
||||
}
|
||||
}
|
||||
else if (button == self.voiceCallButton)
|
||||
{
|
||||
if ([self.delegate respondsToSelector:@selector(roomInputToolbarView:placeCallWithVideo:)])
|
||||
{
|
||||
// Ask the user the kind of the call: voice or video?
|
||||
actionSheet = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
|
||||
|
||||
__weak typeof(self) weakSelf = self;
|
||||
[actionSheet addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"voice", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->actionSheet = nil;
|
||||
|
||||
[self.delegate roomInputToolbarView:self placeCallWithVideo:NO];
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[actionSheet addAction:[UIAlertAction actionWithTitle:NSLocalizedStringFromTable(@"video", @"Vector", nil)
|
||||
style:UIAlertActionStyleDefault
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->actionSheet = nil;
|
||||
|
||||
[self.delegate roomInputToolbarView:self placeCallWithVideo:YES];
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[actionSheet addAction:[UIAlertAction actionWithTitle:[NSBundle mxk_localizedStringForKey:@"cancel"]
|
||||
style:UIAlertActionStyleCancel
|
||||
handler:^(UIAlertAction * action) {
|
||||
|
||||
if (weakSelf)
|
||||
{
|
||||
typeof(self) self = weakSelf;
|
||||
self->actionSheet = nil;
|
||||
}
|
||||
|
||||
}]];
|
||||
|
||||
[actionSheet popoverPresentationController].sourceView = self.voiceCallButton;
|
||||
[actionSheet popoverPresentationController].sourceRect = self.voiceCallButton.bounds;
|
||||
[self.window.rootViewController presentViewController:actionSheet animated:YES completion:nil];
|
||||
}
|
||||
}
|
||||
else if (button == self.hangupCallButton)
|
||||
{
|
||||
if ([self.delegate respondsToSelector:@selector(roomInputToolbarViewHangupCall:)])
|
||||
{
|
||||
[self.delegate roomInputToolbarViewHangupCall:self];
|
||||
}
|
||||
}
|
||||
|
||||
[super onTouchUpInside:button];
|
||||
}
|
||||
|
@ -449,6 +431,21 @@
|
|||
[super destroy];
|
||||
}
|
||||
|
||||
- (void)updateSendButtonWithMessage:(NSString *)textMessage
|
||||
{
|
||||
if (textMessage.length)
|
||||
{
|
||||
self.rightInputToolbarButton.alpha = 1;
|
||||
self.messageComposerContainerTrailingConstraint.constant = self.frame.size.width - self.rightInputToolbarButton.frame.origin.x + 12;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.rightInputToolbarButton.alpha = 0;
|
||||
self.messageComposerContainerTrailingConstraint.constant = 12;
|
||||
}
|
||||
[self layoutIfNeeded];
|
||||
}
|
||||
|
||||
#pragma mark - Clipboard - Handle image/data paste from general pasteboard
|
||||
|
||||
- (void)paste:(id)sender
|
||||
|
|
|
@ -1,142 +1,115 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<device id="retina4_7" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="iN0-l3-epB" customClass="RoomInputToolbarView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="46"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="60"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a84-Vc-6ud" userLabel="MainToolBar View">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="46"/>
|
||||
<rect key="frame" x="0.0" y="2" width="600" height="58"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3ln-yI-ef9" userLabel="Separator View">
|
||||
<rect key="frame" x="10" y="0.0" width="580" height="1"/>
|
||||
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Hga-l8-Wua" userLabel="attach Button">
|
||||
<rect key="frame" x="12" y="10" width="36" height="36"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="AttachButton"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="WBM-ts-zPX"/>
|
||||
<constraint firstAttribute="width" constant="36" id="O2T-T8-EjV"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view clipsSubviews="YES" contentMode="scaleAspectFill" translatesAutoresizingMaskIntoConstraints="NO" id="dd4-pE-Es1" userLabel="Picture View" customClass="MXKImageView">
|
||||
<rect key="frame" x="13" y="8" width="30" height="30"/>
|
||||
<color key="backgroundColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="PictureView"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="30" id="gwh-Qs-gY1"/>
|
||||
<constraint firstAttribute="height" constant="30" id="wMB-Ec-D9s"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<imageView userInteractionEnabled="NO" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="e2e_unencrypted" translatesAutoresizingMaskIntoConstraints="NO" id="fRI-9x-jgw">
|
||||
<rect key="frame" x="41" y="7" width="28" height="28"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="EncryptedRoomIcon"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="28" id="JHs-nc-tML"/>
|
||||
<constraint firstAttribute="width" constant="28" id="K0H-Va-ZsL"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<state key="normal" image="upload_icon"/>
|
||||
<connections>
|
||||
<action selector="onTouchUpInside:" destination="iN0-l3-epB" eventType="touchUpInside" id="WbU-WH-gwL"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QWp-NV-uh5" userLabel="Message Composer Container">
|
||||
<rect key="frame" x="62" y="4" width="443" height="38"/>
|
||||
<rect key="frame" x="60" y="9" width="528" height="36"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="input_text_background" translatesAutoresizingMaskIntoConstraints="NO" id="uH7-Q7-hpZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="528" height="36"/>
|
||||
</imageView>
|
||||
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jXI-9E-Bgl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="528" height="32"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="input_edit_icon" translatesAutoresizingMaskIntoConstraints="NO" id="PZ4-0Y-TmL">
|
||||
<rect key="frame" x="12" y="11" width="10.5" height="10"/>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dVr-ZM-kkX">
|
||||
<rect key="frame" x="26.5" y="9" width="461.5" height="14.5"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="12"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="48y-kn-7b5">
|
||||
<rect key="frame" x="492" y="1" width="30" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="I17-S0-9fp"/>
|
||||
<constraint firstAttribute="width" constant="30" id="cCe-RB-ET2"/>
|
||||
</constraints>
|
||||
<state key="normal" image="input_close_icon"/>
|
||||
<connections>
|
||||
<action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Bdx-ld-cWP"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="32" id="KNn-ng-NHK"/>
|
||||
<constraint firstItem="dVr-ZM-kkX" firstAttribute="leading" secondItem="PZ4-0Y-TmL" secondAttribute="trailing" constant="4" id="RbN-mc-y2P"/>
|
||||
<constraint firstItem="48y-kn-7b5" firstAttribute="centerY" secondItem="jXI-9E-Bgl" secondAttribute="centerY" id="XbN-rm-nDw"/>
|
||||
<constraint firstItem="48y-kn-7b5" firstAttribute="leading" secondItem="dVr-ZM-kkX" secondAttribute="trailing" constant="4" id="bmi-rg-TNM"/>
|
||||
<constraint firstItem="PZ4-0Y-TmL" firstAttribute="centerY" secondItem="jXI-9E-Bgl" secondAttribute="centerY" id="f9O-vU-41g"/>
|
||||
<constraint firstItem="PZ4-0Y-TmL" firstAttribute="leading" secondItem="jXI-9E-Bgl" secondAttribute="leading" constant="12" id="mp0-tl-IIe"/>
|
||||
<constraint firstAttribute="trailing" secondItem="48y-kn-7b5" secondAttribute="trailing" constant="6" id="qPb-EI-csl"/>
|
||||
<constraint firstItem="dVr-ZM-kkX" firstAttribute="centerY" secondItem="jXI-9E-Bgl" secondAttribute="centerY" id="yb4-bq-XNb"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wgb-ON-N29" customClass="KeyboardGrowingTextView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="443" height="38"/>
|
||||
<rect key="frame" x="4" y="33" width="520" height="4"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="GrowingTextView"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="wgb-ON-N29" firstAttribute="top" secondItem="QWp-NV-uh5" secondAttribute="top" id="0jt-Ye-2DW"/>
|
||||
<constraint firstAttribute="trailing" secondItem="wgb-ON-N29" secondAttribute="trailing" id="30f-rE-CKj"/>
|
||||
<constraint firstItem="wgb-ON-N29" firstAttribute="leading" secondItem="QWp-NV-uh5" secondAttribute="leading" id="N7q-ch-iRz"/>
|
||||
<constraint firstAttribute="bottom" secondItem="wgb-ON-N29" secondAttribute="bottom" id="fFG-SH-Hjh"/>
|
||||
<constraint firstAttribute="trailing" secondItem="wgb-ON-N29" secondAttribute="trailing" constant="4" id="30f-rE-CKj"/>
|
||||
<constraint firstAttribute="trailing" secondItem="jXI-9E-Bgl" secondAttribute="trailing" id="3EM-Mc-ZaI"/>
|
||||
<constraint firstItem="jXI-9E-Bgl" firstAttribute="top" secondItem="QWp-NV-uh5" secondAttribute="top" id="Bp8-45-jvJ"/>
|
||||
<constraint firstItem="uH7-Q7-hpZ" firstAttribute="leading" secondItem="QWp-NV-uh5" secondAttribute="leading" id="Fli-kz-OcS"/>
|
||||
<constraint firstItem="uH7-Q7-hpZ" firstAttribute="top" secondItem="QWp-NV-uh5" secondAttribute="top" id="Gqc-ya-F1W"/>
|
||||
<constraint firstItem="wgb-ON-N29" firstAttribute="leading" secondItem="QWp-NV-uh5" secondAttribute="leading" constant="4" id="N7q-ch-iRz"/>
|
||||
<constraint firstItem="wgb-ON-N29" firstAttribute="top" secondItem="jXI-9E-Bgl" secondAttribute="bottom" constant="1" id="UV2-Sh-peE"/>
|
||||
<constraint firstAttribute="bottom" secondItem="uH7-Q7-hpZ" secondAttribute="bottom" id="dAX-uO-gvm"/>
|
||||
<constraint firstAttribute="bottom" secondItem="wgb-ON-N29" secondAttribute="bottom" constant="-1" id="fFG-SH-Hjh"/>
|
||||
<constraint firstItem="jXI-9E-Bgl" firstAttribute="leading" secondItem="QWp-NV-uh5" secondAttribute="leading" id="gfP-dn-HGK"/>
|
||||
<constraint firstAttribute="trailing" secondItem="uH7-Q7-hpZ" secondAttribute="trailing" id="wS9-oU-alv"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="G8Z-CM-tGs" userLabel="send Button">
|
||||
<rect key="frame" x="550" y="0.0" width="46" height="46"/>
|
||||
<button opaque="NO" alpha="0.0" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="G8Z-CM-tGs" userLabel="send Button">
|
||||
<rect key="frame" x="552" y="10" width="36" height="36"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="SendButton"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="46" id="KnT-92-5v2"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
|
||||
<state key="normal" title="Send"/>
|
||||
<state key="normal" image="send_icon"/>
|
||||
<connections>
|
||||
<action selector="onTouchUpInside:" destination="iN0-l3-epB" eventType="touchUpInside" id="Y9g-uz-rAz"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Hga-l8-Wua" userLabel="attach Button">
|
||||
<rect key="frame" x="508" y="0.0" width="46" height="46"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="AttachButton"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="46" id="O2T-T8-EjV"/>
|
||||
<constraint firstAttribute="width" secondItem="Hga-l8-Wua" secondAttribute="height" multiplier="1:1" id="f0T-3f-BJu"/>
|
||||
</constraints>
|
||||
<state key="normal" image="upload_icon"/>
|
||||
<state key="highlighted" image="upload_icon"/>
|
||||
<connections>
|
||||
<action selector="onTouchUpInside:" destination="iN0-l3-epB" eventType="touchUpInside" id="WbU-WH-gwL"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Owf-M8-qJi" userLabel="voice call Button">
|
||||
<rect key="frame" x="554" y="0.0" width="46" height="46"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="VoiceCallButton"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="Owf-M8-qJi" secondAttribute="height" multiplier="1:1" id="1Ni-y7-Nsa"/>
|
||||
<constraint firstAttribute="width" constant="46" id="9FZ-CI-diT"/>
|
||||
</constraints>
|
||||
<state key="normal" image="voice_call_hangon_icon">
|
||||
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</state>
|
||||
<state key="highlighted" image="voice_call_hangon_icon"/>
|
||||
<connections>
|
||||
<action selector="onTouchUpInside:" destination="iN0-l3-epB" eventType="touchUpInside" id="Cxg-BO-TfK"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2nY-YP-BvA" userLabel="hangup call Button">
|
||||
<rect key="frame" x="554" y="0.0" width="46" height="46"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="HangupCallButton"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="2nY-YP-BvA" secondAttribute="height" multiplier="1:1" id="59L-Jf-tXO"/>
|
||||
</constraints>
|
||||
<state key="normal" image="voice_call_hangup_icon">
|
||||
<color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</state>
|
||||
<state key="highlighted" image="voice_call_hangup_icon"/>
|
||||
<connections>
|
||||
<action selector="onTouchUpInside:" destination="iN0-l3-epB" eventType="touchUpInside" id="PB3-d8-Kbf"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="fRI-9x-jgw" firstAttribute="top" secondItem="a84-Vc-6ud" secondAttribute="top" constant="7" id="08y-JY-NN5"/>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="46" id="1FO-iu-urG"/>
|
||||
<constraint firstItem="G8Z-CM-tGs" firstAttribute="top" secondItem="a84-Vc-6ud" secondAttribute="top" id="8cV-eb-Kog"/>
|
||||
<constraint firstItem="3ln-yI-ef9" firstAttribute="leading" secondItem="a84-Vc-6ud" secondAttribute="leading" constant="10" id="BwP-sF-qE1"/>
|
||||
<constraint firstItem="QWp-NV-uh5" firstAttribute="leading" secondItem="a84-Vc-6ud" secondAttribute="leading" constant="62" id="ErD-eB-stF"/>
|
||||
<constraint firstItem="Owf-M8-qJi" firstAttribute="leading" secondItem="Hga-l8-Wua" secondAttribute="trailing" id="GKh-R5-jqV"/>
|
||||
<constraint firstItem="fRI-9x-jgw" firstAttribute="leading" secondItem="a84-Vc-6ud" secondAttribute="leading" constant="41" id="GvU-rY-bWW"/>
|
||||
<constraint firstItem="dd4-pE-Es1" firstAttribute="leading" secondItem="a84-Vc-6ud" secondAttribute="leading" constant="13" id="Jem-U2-oEq"/>
|
||||
<constraint firstAttribute="bottom" secondItem="QWp-NV-uh5" secondAttribute="bottom" constant="4" id="NGr-2o-sOP"/>
|
||||
<constraint firstAttribute="trailing" secondItem="3ln-yI-ef9" secondAttribute="trailing" constant="10" id="RXB-PN-3n8"/>
|
||||
<constraint firstAttribute="trailing" secondItem="G8Z-CM-tGs" secondAttribute="trailing" constant="4" id="Sua-LC-3yW"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Owf-M8-qJi" secondAttribute="bottom" id="Wo7-Qc-PSL"/>
|
||||
<constraint firstItem="QWp-NV-uh5" firstAttribute="top" secondItem="a84-Vc-6ud" secondAttribute="top" constant="4" id="WyZ-3i-OHi"/>
|
||||
<constraint firstAttribute="height" constant="46" id="Yjj-ua-rbe"/>
|
||||
<constraint firstAttribute="bottom" secondItem="2nY-YP-BvA" secondAttribute="bottom" id="asf-hj-bby"/>
|
||||
<constraint firstAttribute="trailing" secondItem="2nY-YP-BvA" secondAttribute="trailing" id="gNM-BS-Uwc"/>
|
||||
<constraint firstAttribute="trailing" secondItem="QWp-NV-uh5" secondAttribute="trailing" constant="95" id="hXO-cY-Jgz"/>
|
||||
<constraint firstItem="2nY-YP-BvA" firstAttribute="width" secondItem="Owf-M8-qJi" secondAttribute="width" id="mHj-eR-atg"/>
|
||||
<constraint firstItem="Hga-l8-Wua" firstAttribute="top" secondItem="a84-Vc-6ud" secondAttribute="top" id="pPH-Fp-phr"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Owf-M8-qJi" secondAttribute="trailing" id="vCd-Md-dvr"/>
|
||||
<constraint firstAttribute="bottom" secondItem="G8Z-CM-tGs" secondAttribute="bottom" id="vpk-lw-TnO"/>
|
||||
<constraint firstItem="dd4-pE-Es1" firstAttribute="top" secondItem="a84-Vc-6ud" secondAttribute="top" constant="8" id="xjT-If-1cd"/>
|
||||
<constraint firstItem="3ln-yI-ef9" firstAttribute="top" secondItem="a84-Vc-6ud" secondAttribute="top" id="yUF-5t-x03"/>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="58" id="1FO-iu-urG"/>
|
||||
<constraint firstItem="Hga-l8-Wua" firstAttribute="leading" secondItem="a84-Vc-6ud" secondAttribute="leading" constant="12" id="31r-fn-347"/>
|
||||
<constraint firstItem="QWp-NV-uh5" firstAttribute="leading" secondItem="Hga-l8-Wua" secondAttribute="trailing" constant="12" id="M9f-je-3zO"/>
|
||||
<constraint firstAttribute="bottom" secondItem="QWp-NV-uh5" secondAttribute="bottom" constant="13" id="NGr-2o-sOP"/>
|
||||
<constraint firstAttribute="trailing" secondItem="G8Z-CM-tGs" secondAttribute="trailing" constant="12" id="Sua-LC-3yW"/>
|
||||
<constraint firstItem="QWp-NV-uh5" firstAttribute="top" secondItem="a84-Vc-6ud" secondAttribute="top" constant="9" id="WyZ-3i-OHi"/>
|
||||
<constraint firstAttribute="bottom" secondItem="G8Z-CM-tGs" secondAttribute="bottom" constant="12" id="Yam-dS-zwr"/>
|
||||
<constraint firstAttribute="height" constant="58" id="Yjj-ua-rbe"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Hga-l8-Wua" secondAttribute="bottom" constant="12" id="b0G-CY-AmP"/>
|
||||
<constraint firstAttribute="trailing" secondItem="QWp-NV-uh5" secondAttribute="trailing" constant="12" id="hXO-cY-Jgz"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
|
@ -153,30 +126,29 @@
|
|||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<connections>
|
||||
<outlet property="attachMediaButton" destination="Hga-l8-Wua" id="Osr-ek-c91"/>
|
||||
<outlet property="encryptedRoomIcon" destination="fRI-9x-jgw" id="cfG-Sr-Fga"/>
|
||||
<outlet property="growingTextView" destination="wgb-ON-N29" id="nwF-uV-Ng9"/>
|
||||
<outlet property="hangupCallButton" destination="2nY-YP-BvA" id="a0m-xv-sVg"/>
|
||||
<outlet property="inputContextButton" destination="48y-kn-7b5" id="yRn-1S-96w"/>
|
||||
<outlet property="inputContextImageView" destination="PZ4-0Y-TmL" id="PMS-K7-aMr"/>
|
||||
<outlet property="inputContextLabel" destination="dVr-ZM-kkX" id="ve6-gY-cV9"/>
|
||||
<outlet property="inputContextViewHeightConstraint" destination="KNn-ng-NHK" id="B9M-tr-SOv"/>
|
||||
<outlet property="inputTextBackgroundView" destination="uH7-Q7-hpZ" id="Wa3-2W-8gN"/>
|
||||
<outlet property="mainToolbarHeightConstraint" destination="Yjj-ua-rbe" id="Lu8-UC-Vbo"/>
|
||||
<outlet property="mainToolbarMinHeightConstraint" destination="1FO-iu-urG" id="2U6-h2-0zQ"/>
|
||||
<outlet property="mainToolbarView" destination="a84-Vc-6ud" id="5p3-Ft-0gv"/>
|
||||
<outlet property="messageComposerContainer" destination="QWp-NV-uh5" id="APR-B5-ogC"/>
|
||||
<outlet property="messageComposerContainerBottomConstraint" destination="NGr-2o-sOP" id="oez-6D-IKA"/>
|
||||
<outlet property="messageComposerContainerLeadingConstraint" destination="ErD-eB-stF" id="Ha9-DG-Nw2"/>
|
||||
<outlet property="messageComposerContainerTopConstraint" destination="WyZ-3i-OHi" id="OcO-1f-bNA"/>
|
||||
<outlet property="messageComposerContainerTrailingConstraint" destination="hXO-cY-Jgz" id="lHZ-MU-vyC"/>
|
||||
<outlet property="pictureView" destination="dd4-pE-Es1" id="rb6-z2-pJ9"/>
|
||||
<outlet property="rightInputToolbarButton" destination="G8Z-CM-tGs" id="NCk-5m-aNF"/>
|
||||
<outlet property="separatorView" destination="3ln-yI-ef9" id="HQ3-B4-Goj"/>
|
||||
<outlet property="voiceCallButton" destination="Owf-M8-qJi" id="krT-w1-mfT"/>
|
||||
<outlet property="voiceCallButtonWidthConstraint" destination="9FZ-CI-diT" id="jYt-Pe-8DY"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="139" y="152"/>
|
||||
<point key="canvasLocation" x="137.59999999999999" y="151.12443778110946"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="e2e_unencrypted" width="14" height="12"/>
|
||||
<image name="upload_icon" width="24" height="24"/>
|
||||
<image name="voice_call_hangon_icon" width="24" height="24"/>
|
||||
<image name="voice_call_hangup_icon" width="24" height="24"/>
|
||||
<image name="input_close_icon" width="12" height="12"/>
|
||||
<image name="input_edit_icon" width="10.5" height="10"/>
|
||||
<image name="input_text_background" width="30" height="20"/>
|
||||
<image name="send_icon" width="36" height="36"/>
|
||||
<image name="upload_icon" width="36" height="36"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
@ -35,9 +35,17 @@
|
|||
@interface RoomTitleView : MXKRoomTitleView <UIGestureRecognizerDelegate>
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView *titleMask;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *displayNameCenterXConstraint;
|
||||
@property (weak, nonatomic) IBOutlet UIImageView *roomDetailsIconImageView;
|
||||
@property (weak, nonatomic) IBOutlet UIImageView *badgeImageView;
|
||||
@property (weak, nonatomic) IBOutlet MXKImageView *pictureView;
|
||||
@property (weak, nonatomic) IBOutlet UILabel *missedDiscussionsBadgeLabel;
|
||||
@property (weak, nonatomic) IBOutlet UILabel *typingLabel;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *displayNameCenterYConstraint;
|
||||
@property (weak, nonatomic) IBOutlet UIView *dotView;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *missedDiscussionsBadgeLabelLeadingConstraint;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *pictureViewHeightConstraint;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *pictureViewWidthConstraint;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *dotViewCenterXConstraint;
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *dotViewCenterYConstraint;
|
||||
|
||||
/**
|
||||
The room preview data may be used when mxRoom instance is not available
|
||||
|
@ -49,9 +57,19 @@
|
|||
*/
|
||||
@property (nonatomic) id<RoomTitleViewTapGestureDelegate> tapGestureDelegate;
|
||||
|
||||
/**
|
||||
the typing notification string to be displayed (default nil if notification is hidden).
|
||||
*/
|
||||
@property (copy, nonatomic) NSString *typingNotificationString;
|
||||
|
||||
/**
|
||||
The method used to handle the gesture recognized by a receiver.
|
||||
*/
|
||||
- (void)reportTapGesture:(UITapGestureRecognizer*)tapGestureRecognizer;
|
||||
|
||||
/**
|
||||
update the layout of the title view according to the target orientation
|
||||
*/
|
||||
- (void)updateLayoutForOrientation:(UIInterfaceOrientation)orientation;
|
||||
|
||||
@end
|
||||
|
|
|
@ -47,6 +47,8 @@
|
|||
[tap setDelegate:self];
|
||||
[self.titleMask addGestureRecognizer:tap];
|
||||
self.titleMask.userInteractionEnabled = YES;
|
||||
self.dotView.layer.masksToBounds = YES;
|
||||
self.dotView.layer.cornerRadius = CGRectGetMidX(self.dotView.bounds);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,8 +56,8 @@
|
|||
{
|
||||
[super layoutSubviews];
|
||||
|
||||
self.roomDetailsIconImageView.image = self.roomDetailsIconImageView.image;
|
||||
|
||||
self.pictureView.layer.cornerRadius = self.pictureView.bounds.size.width / 2.;
|
||||
|
||||
if (self.superview)
|
||||
{
|
||||
// Force the title view layout by adding 2 new constraints on the UINavigationBarContentView instance.
|
||||
|
@ -84,7 +86,9 @@
|
|||
|
||||
self.backgroundColor = UIColor.clearColor;
|
||||
self.displayNameTextField.textColor = (self.mxRoom.summary.displayname.length ? ThemeService.shared.theme.textPrimaryColor : ThemeService.shared.theme.textSecondaryColor);
|
||||
self.roomDetailsIconImageView.tintColor = ThemeService.shared.theme.textPrimaryColor;
|
||||
self.typingLabel.textColor = ThemeService.shared.theme.textSecondaryColor;
|
||||
self.dotView.backgroundColor = ThemeService.shared.theme.warningColor;
|
||||
self.missedDiscussionsBadgeLabel.textColor = ThemeService.shared.theme.tintColor;
|
||||
}
|
||||
|
||||
- (void)setRoomPreviewData:(RoomPreviewData *)roomPreviewData
|
||||
|
@ -133,4 +137,60 @@
|
|||
}
|
||||
}
|
||||
|
||||
- (void)updateLayoutForOrientation:(UIInterfaceOrientation)orientation
|
||||
{
|
||||
if (UIInterfaceOrientationIsLandscape(orientation))
|
||||
{
|
||||
self.missedDiscussionsBadgeLabel.font = [UIFont systemFontOfSize:10];
|
||||
self.missedDiscussionsBadgeLabelLeadingConstraint.constant = -24;
|
||||
self.pictureViewWidthConstraint.constant = 28;
|
||||
self.pictureViewHeightConstraint.constant = 28;
|
||||
self.displayNameTextField.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium];
|
||||
self.typingLabel.font = [UIFont systemFontOfSize:10];
|
||||
self.dotViewCenterXConstraint.constant = 3;
|
||||
self.dotViewCenterYConstraint.constant = -2;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.missedDiscussionsBadgeLabel.font = [UIFont systemFontOfSize:15];
|
||||
self.missedDiscussionsBadgeLabelLeadingConstraint.constant = -32;
|
||||
self.pictureViewWidthConstraint.constant = 32;
|
||||
self.pictureViewHeightConstraint.constant = 32;
|
||||
self.displayNameTextField.font = [UIFont systemFontOfSize:17 weight:UIFontWeightMedium];
|
||||
self.typingLabel.font = [UIFont systemFontOfSize:12];
|
||||
self.dotViewCenterXConstraint.constant = 0;
|
||||
self.dotViewCenterYConstraint.constant = -1;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setTypingNotificationString:(NSString *)typingNotificationString
|
||||
{
|
||||
if (typingNotificationString.length > 0)
|
||||
{
|
||||
self.typingLabel.text = typingNotificationString;
|
||||
[self layoutIfNeeded];
|
||||
|
||||
[UIView animateWithDuration:.1 animations:^{
|
||||
self.typingLabel.alpha = 1;
|
||||
self.displayNameCenterYConstraint.constant = -8;
|
||||
[self layoutIfNeeded];
|
||||
}];
|
||||
}
|
||||
else
|
||||
{
|
||||
[UIView animateWithDuration:.1 animations:^{
|
||||
self.typingLabel.alpha = 0;
|
||||
self.displayNameCenterYConstraint.constant = 0;
|
||||
[self layoutIfNeeded];
|
||||
} completion:^(BOOL finished) {
|
||||
self.typingLabel.text = nil;
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSString *)typingNotificationString
|
||||
{
|
||||
return self.typingLabel.text;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<device id="retina4_7" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
@ -13,69 +14,101 @@
|
|||
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SUm-iW-DRR">
|
||||
<rect key="frame" x="-24" y="22" width="0.0" height="0.0"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yTB-Be-bLN">
|
||||
<rect key="frame" x="-27" y="19" width="6" height="6"/>
|
||||
<color key="backgroundColor" systemColor="systemRedColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="6" id="Ub5-Ec-pJX"/>
|
||||
<constraint firstAttribute="height" constant="6" id="fb2-5k-X2i"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<label opaque="NO" userInteractionEnabled="NO" alpha="0.0" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fIP-Sr-o0e">
|
||||
<rect key="frame" x="50" y="23.5" width="31" height="14.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="12"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LDd-c1-ILP" customClass="MXKImageView">
|
||||
<rect key="frame" x="6" y="6" width="32" height="32"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="32" id="bwy-tq-mM3"/>
|
||||
<constraint firstAttribute="width" constant="32" id="g4Z-ot-kFP"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="encryption_normal" translatesAutoresizingMaskIntoConstraints="NO" id="Ky3-cy-HAx">
|
||||
<rect key="frame" x="231.5" y="13.5" width="14" height="14"/>
|
||||
<rect key="frame" x="31" y="24" width="14" height="14"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="RoomDetailsIconImageView"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="14" id="7xE-aD-sld"/>
|
||||
<constraint firstAttribute="width" secondItem="Ky3-cy-HAx" secondAttribute="height" multiplier="1:1" id="peq-8l-eJv"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="Room Name" textAlignment="center" adjustsFontSizeToFit="NO" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="6uH-I3-RQg">
|
||||
<rect key="frame" x="249.5" y="9" width="101" height="23"/>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="Room Name" adjustsFontSizeToFit="NO" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="6uH-I3-RQg">
|
||||
<rect key="frame" x="50" y="11" width="550" height="22"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="DisplayNameTextField"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
|
||||
<fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
|
||||
<textInputTraits key="textInputTraits" returnKeyType="next"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="BkF-x3-7fX" id="xX7-jB-9va"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="details_icon" translatesAutoresizingMaskIntoConstraints="NO" id="S3Y-wJ-HOe">
|
||||
<rect key="frame" x="357.5" y="14.5" width="6" height="12"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="RoomDetailsIconImageView"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="6" id="XTx-6p-2wB"/>
|
||||
<constraint firstAttribute="height" constant="12" id="tXh-eB-ave"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sD9-l7-azQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="44"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" identifier="RoomTitle"/>
|
||||
<constraints>
|
||||
<constraint firstItem="6uH-I3-RQg" firstAttribute="centerX" secondItem="BkF-x3-7fX" secondAttribute="centerX" id="3uN-6W-rVZ"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="S3Y-wJ-HOe" secondAttribute="trailing" id="3z3-Ye-wh3"/>
|
||||
<constraint firstItem="6uH-I3-RQg" firstAttribute="leading" secondItem="LDd-c1-ILP" secondAttribute="trailing" constant="12" id="0pG-0z-gpD"/>
|
||||
<constraint firstItem="LDd-c1-ILP" firstAttribute="centerY" secondItem="BkF-x3-7fX" secondAttribute="centerY" id="33h-dC-S1U"/>
|
||||
<constraint firstAttribute="bottom" secondItem="sD9-l7-azQ" secondAttribute="bottom" id="4rX-5O-LrO"/>
|
||||
<constraint firstItem="yTB-Be-bLN" firstAttribute="centerX" secondItem="SUm-iW-DRR" secondAttribute="leading" id="7H4-kh-c2g"/>
|
||||
<constraint firstItem="sD9-l7-azQ" firstAttribute="leading" secondItem="BkF-x3-7fX" secondAttribute="leading" id="AJc-Aa-sht"/>
|
||||
<constraint firstItem="S3Y-wJ-HOe" firstAttribute="centerY" secondItem="6uH-I3-RQg" secondAttribute="centerY" id="Jjq-ss-0kj"/>
|
||||
<constraint firstItem="6uH-I3-RQg" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="BkF-x3-7fX" secondAttribute="leading" constant="8" id="KW6-05-QLM"/>
|
||||
<constraint firstItem="6uH-I3-RQg" firstAttribute="leading" secondItem="Ky3-cy-HAx" secondAttribute="trailing" constant="4" id="Kis-Qb-UuJ"/>
|
||||
<constraint firstItem="Ky3-cy-HAx" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="BkF-x3-7fX" secondAttribute="leading" id="MHL-wh-61l"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="6uH-I3-RQg" secondAttribute="trailing" constant="8" id="PUM-di-dAZ"/>
|
||||
<constraint firstItem="6uH-I3-RQg" firstAttribute="top" secondItem="BkF-x3-7fX" secondAttribute="top" constant="9" id="Piq-rp-Pae"/>
|
||||
<constraint firstItem="SUm-iW-DRR" firstAttribute="centerY" secondItem="BkF-x3-7fX" secondAttribute="centerY" id="Blv-SJ-r6v"/>
|
||||
<constraint firstItem="Ky3-cy-HAx" firstAttribute="bottom" secondItem="LDd-c1-ILP" secondAttribute="bottom" id="HZy-1x-eyX"/>
|
||||
<constraint firstAttribute="trailing" secondItem="6uH-I3-RQg" secondAttribute="trailing" id="Kb4-Vb-TTr"/>
|
||||
<constraint firstItem="fIP-Sr-o0e" firstAttribute="bottom" secondItem="LDd-c1-ILP" secondAttribute="bottom" id="Urx-H8-DNp"/>
|
||||
<constraint firstItem="sD9-l7-azQ" firstAttribute="top" secondItem="BkF-x3-7fX" secondAttribute="top" id="YrR-1c-h56"/>
|
||||
<constraint firstItem="Ky3-cy-HAx" firstAttribute="centerY" secondItem="6uH-I3-RQg" secondAttribute="centerY" id="ayN-Hv-q7s"/>
|
||||
<constraint firstItem="yTB-Be-bLN" firstAttribute="centerY" secondItem="SUm-iW-DRR" secondAttribute="top" id="ZVB-7x-P0K"/>
|
||||
<constraint firstItem="SUm-iW-DRR" firstAttribute="leading" secondItem="LDd-c1-ILP" secondAttribute="leading" constant="-30" id="a67-jx-TI9"/>
|
||||
<constraint firstItem="Ky3-cy-HAx" firstAttribute="centerX" secondItem="LDd-c1-ILP" secondAttribute="trailing" id="dFD-E8-CjR"/>
|
||||
<constraint firstItem="LDd-c1-ILP" firstAttribute="leading" secondItem="BkF-x3-7fX" secondAttribute="leading" constant="6" id="dyY-AX-IVc"/>
|
||||
<constraint firstItem="6uH-I3-RQg" firstAttribute="centerY" secondItem="BkF-x3-7fX" secondAttribute="centerY" id="fvR-gc-5Ls"/>
|
||||
<constraint firstAttribute="trailing" secondItem="sD9-l7-azQ" secondAttribute="trailing" id="q9f-Hp-g5N"/>
|
||||
<constraint firstItem="S3Y-wJ-HOe" firstAttribute="leading" secondItem="6uH-I3-RQg" secondAttribute="trailing" constant="7" id="qbS-km-tTO"/>
|
||||
<constraint firstItem="fIP-Sr-o0e" firstAttribute="leading" secondItem="6uH-I3-RQg" secondAttribute="leading" id="uQW-MI-dPz"/>
|
||||
</constraints>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<connections>
|
||||
<outlet property="badgeImageView" destination="Ky3-cy-HAx" id="fhw-3u-04C"/>
|
||||
<outlet property="displayNameCenterXConstraint" destination="3uN-6W-rVZ" id="rck-yU-24s"/>
|
||||
<outlet property="displayNameCenterYConstraint" destination="fvR-gc-5Ls" id="hzE-KD-Am7"/>
|
||||
<outlet property="displayNameTextField" destination="6uH-I3-RQg" id="MfX-LQ-C2K"/>
|
||||
<outlet property="displayNameTextFieldTopConstraint" destination="Piq-rp-Pae" id="jnL-Hz-TWn"/>
|
||||
<outlet property="roomDetailsIconImageView" destination="S3Y-wJ-HOe" id="bhR-6E-8St"/>
|
||||
<outlet property="dotView" destination="yTB-Be-bLN" id="nr1-Tf-kms"/>
|
||||
<outlet property="dotViewCenterXConstraint" destination="7H4-kh-c2g" id="bAI-uZ-kp7"/>
|
||||
<outlet property="dotViewCenterYConstraint" destination="ZVB-7x-P0K" id="Byk-Fk-AT0"/>
|
||||
<outlet property="missedDiscussionsBadgeLabel" destination="SUm-iW-DRR" id="rZo-yq-GyJ"/>
|
||||
<outlet property="missedDiscussionsBadgeLabelLeadingConstraint" destination="a67-jx-TI9" id="l0M-sE-q28"/>
|
||||
<outlet property="pictureView" destination="LDd-c1-ILP" id="0bS-2V-Sj7"/>
|
||||
<outlet property="pictureViewHeightConstraint" destination="bwy-tq-mM3" id="aaP-ws-FSY"/>
|
||||
<outlet property="pictureViewWidthConstraint" destination="g4Z-ot-kFP" id="6rx-St-TvA"/>
|
||||
<outlet property="titleMask" destination="sD9-l7-azQ" id="I9b-wF-iNH"/>
|
||||
<outlet property="typingLabel" destination="fIP-Sr-o0e" id="5IK-Gj-Med"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="137.59999999999999" y="153.82308845577214"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="details_icon" width="6" height="11"/>
|
||||
<image name="encryption_normal" width="16" height="16"/>
|
||||
<image name="encryption_normal" width="12" height="12"/>
|
||||
<systemColor name="systemRedColor">
|
||||
<color red="1" green="0.23137254901960785" blue="0.18823529411764706" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
#import "DirectoryServerPickerViewController.h"
|
||||
#import "MXSession+Riot.h"
|
||||
#import "RoomFilesViewController.h"
|
||||
#import "RoomSearchViewController.h"
|
||||
#import "IntegrationManagerViewController.h"
|
||||
#import "RoomSettingsViewController.h"
|
||||
#import "JitsiWidgetData.h"
|
||||
#import "InviteRecentTableViewCell.h"
|
||||
|
|