Retrying & deleting failed messages

- Display an exclamation mark (on a red background). In case of a multi-line message
- When a message with an error is selected, show a bottom bar with the 4 following actions: Retry - Delete - Edit - Copy
- If users press on Delete, a confirmation dialog is displayed
- When error messages occur, a general error message appears above the composer. Selecting Delete will delete all error messages. Pressing on Retry will attempt to resend error messages
- If users press on Delete, a confirmation dialog is displayed
- In room lists, decorate rooms with errored messages with the error icon. Rooms with errors should be sorted first
This commit is contained in:
Gil Eluard
2021-03-02 21:56:50 +01:00
parent 380ef917c0
commit 5cb904d2ee
47 changed files with 625 additions and 201 deletions
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<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="14088"/>
<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>
@@ -56,16 +55,71 @@
<outlet property="delegate" destination="iN0-l3-epB" id="ZAk-sC-QpQ"/>
</connections>
</textView>
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="l7B-JK-ZKf">
<rect key="frame" x="0.0" y="1" width="600" height="52"/>
<subviews>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="error_icon" translatesAutoresizingMaskIntoConstraints="NO" id="f50-cK-AVb">
<rect key="frame" x="13" y="18" width="16" height="16"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Messages failed to send" textAlignment="natural" lineBreakMode="wordWrap" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZD8-X6-qAB" userLabel="Message Label">
<rect key="frame" x="41" y="17" width="166" height="18"/>
<accessibility key="accessibilityConfiguration" identifier="RoomActivitiesViewMessageLabel"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<color key="textColor" red="0.66666666669999997" green="0.66666666669999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="UwY-F8-8nJ">
<rect key="frame" x="467" y="14" width="24" height="24"/>
<state key="normal" image="room_context_menu_delete"/>
<connections>
<action selector="onCancelSendingPressed:" destination="iN0-l3-epB" eventType="touchUpInside" id="nCu-h1-Hek"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="d0g-ev-lDj">
<rect key="frame" x="503" y="12" width="85" height="28"/>
<color key="backgroundColor" red="0.028153735480000001" green="0.82494870580000002" blue="0.051896891280000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration" identifier="LeftButton"/>
<constraints>
<constraint firstAttribute="height" constant="28" id="LhJ-4D-OZI"/>
<constraint firstAttribute="width" constant="85" id="n0H-1z-udV"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="16"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="6" maxY="0.0"/>
<state key="normal" title="Retry" image="room_activities_retry">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="onResendMessagesPressed:" destination="iN0-l3-epB" eventType="touchUpInside" id="Aj1-oT-c0C"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="d0g-ev-lDj" firstAttribute="leading" secondItem="UwY-F8-8nJ" secondAttribute="trailing" constant="12" id="IZZ-du-a29"/>
<constraint firstItem="d0g-ev-lDj" firstAttribute="centerY" secondItem="l7B-JK-ZKf" secondAttribute="centerY" id="Uos-j3-ARf"/>
<constraint firstItem="ZD8-X6-qAB" firstAttribute="centerY" secondItem="l7B-JK-ZKf" secondAttribute="centerY" id="YCs-5T-5kQ"/>
<constraint firstItem="UwY-F8-8nJ" firstAttribute="centerY" secondItem="l7B-JK-ZKf" secondAttribute="centerY" id="YRY-fg-2qs"/>
<constraint firstItem="f50-cK-AVb" firstAttribute="leading" secondItem="l7B-JK-ZKf" secondAttribute="leading" constant="13" id="da5-bp-l7B"/>
<constraint firstAttribute="trailing" secondItem="d0g-ev-lDj" secondAttribute="trailing" constant="12" id="foj-YD-tjx"/>
<constraint firstItem="UwY-F8-8nJ" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="ZD8-X6-qAB" secondAttribute="trailing" constant="12" id="mPP-0E-MHa"/>
<constraint firstItem="ZD8-X6-qAB" firstAttribute="leading" secondItem="f50-cK-AVb" secondAttribute="trailing" constant="12" id="tWy-Tu-kM5"/>
<constraint firstItem="f50-cK-AVb" firstAttribute="centerY" secondItem="l7B-JK-ZKf" secondAttribute="centerY" id="zea-t6-SnQ"/>
</constraints>
</view>
</subviews>
<constraints>
<constraint firstItem="1Mq-77-vvo" firstAttribute="leading" secondItem="qhJ-5H-64e" secondAttribute="leading" constant="13" id="2S8-TD-jHO"/>
<constraint firstItem="7bS-1u-GUX" firstAttribute="leading" secondItem="d6j-oN-9uA" secondAttribute="trailing" constant="13" id="6Js-Lq-pKz"/>
<constraint firstAttribute="trailing" secondItem="l7B-JK-ZKf" secondAttribute="trailing" id="6ub-bL-RIw"/>
<constraint firstItem="7bS-1u-GUX" firstAttribute="centerY" secondItem="d6j-oN-9uA" secondAttribute="centerY" id="BIB-uG-AY7"/>
<constraint firstAttribute="bottom" secondItem="l7B-JK-ZKf" secondAttribute="bottom" id="G9G-RU-ftj"/>
<constraint firstAttribute="trailing" secondItem="1Mq-77-vvo" secondAttribute="trailing" constant="10" id="YBp-az-maq"/>
<constraint firstItem="d6j-oN-9uA" firstAttribute="leading" secondItem="qhJ-5H-64e" secondAttribute="leading" constant="13" id="YYC-Q1-IoC"/>
<constraint firstItem="6ND-Cq-ABj" firstAttribute="leading" secondItem="d6j-oN-9uA" secondAttribute="trailing" constant="13" id="ZdK-4Z-Yfz"/>
<constraint firstItem="6ND-Cq-ABj" firstAttribute="top" secondItem="qhJ-5H-64e" secondAttribute="top" constant="10" id="j7I-pC-7fV"/>
<constraint firstItem="l7B-JK-ZKf" firstAttribute="leading" secondItem="qhJ-5H-64e" secondAttribute="leading" id="k98-cf-ItU"/>
<constraint firstAttribute="bottom" secondItem="6ND-Cq-ABj" secondAttribute="bottom" constant="10" id="m0j-16-mJw"/>
<constraint firstItem="l7B-JK-ZKf" firstAttribute="top" secondItem="1Mq-77-vvo" secondAttribute="bottom" id="qLJ-nv-QD0"/>
<constraint firstItem="d6j-oN-9uA" firstAttribute="centerY" secondItem="qhJ-5H-64e" secondAttribute="centerY" id="rEU-px-J59"/>
<constraint firstItem="1Mq-77-vvo" firstAttribute="top" secondItem="qhJ-5H-64e" secondAttribute="top" id="stG-o2-SK4"/>
<constraint firstAttribute="trailing" secondItem="7bS-1u-GUX" secondAttribute="trailing" constant="30" id="tCW-EI-6Yt"/>
@@ -87,15 +141,26 @@
<nil key="simulatedBottomBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="deleteButton" destination="UwY-F8-8nJ" id="aV5-96-x5E"/>
<outlet property="iconImageView" destination="d6j-oN-9uA" id="Qhw-fw-uGc"/>
<outlet property="mainHeightConstraint" destination="xPK-Yw-hQ9" id="dJ5-pI-KyT"/>
<outlet property="messageLabel" destination="7bS-1u-GUX" id="5c1-hT-y49"/>
<outlet property="messageTextView" destination="6ND-Cq-ABj" id="xWk-ga-9xS"/>
<outlet property="resendButton" destination="d0g-ev-lDj" id="iQ1-LZ-cZh"/>
<outlet property="separatorView" destination="1Mq-77-vvo" id="8fc-AO-8hF"/>
<outlet property="unsentMessageLabel" destination="ZD8-X6-qAB" id="0FN-Nu-lfo"/>
<outlet property="unsentMessagesContentView" destination="l7B-JK-ZKf" id="6aW-n4-Bc5"/>
</connections>
<point key="canvasLocation" x="-390.39999999999998" y="80.50974512743629"/>
</view>
</objects>
<resources>
<image name="typing" width="31" height="30"/>
<image name="error_icon" width="16" height="16"/>
<image name="room_activities_retry" width="16" height="16"/>
<image name="room_context_menu_delete" width="24" height="24"/>
<image name="typing" width="30" height="30"/>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>