Skip to content

Commit 03870a8

Browse files
committed
Little UI Improvements
1 parent d7aef7d commit 03870a8

File tree

10 files changed

+99
-46
lines changed

10 files changed

+99
-46
lines changed

PlaneTalk.xcodeproj/project.pbxproj

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
6E1DB080262991EA00D49B7A /* BroadcastMessageFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1DB07F262991EA00D49B7A /* BroadcastMessageFactory.swift */; };
1212
6E3ECB86262B956400F9EE92 /* ConnectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E3ECB85262B956400F9EE92 /* ConnectView.swift */; };
1313
6E3ECB89262B956F00F9EE92 /* ConnectView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6E3ECB88262B956F00F9EE92 /* ConnectView.xib */; };
14+
6E3ECB8C262BAC6900F9EE92 /* UIColor+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E3ECB8B262BAC6900F9EE92 /* UIColor+Ext.swift */; };
1415
6E6AC0A52624F52900A273B4 /* NetworkInterfaceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6AC0A42624F52900A273B4 /* NetworkInterfaceType.swift */; };
1516
6E8766FB2626595500FB80DA /* BroadcastManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8766FA2626595500FB80DA /* BroadcastManager.swift */; };
1617
6E8766FF26265BF600FB80DA /* ClientCommunicationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8766FE26265BF600FB80DA /* ClientCommunicationManager.swift */; };
@@ -54,6 +55,7 @@
5455
6E1DB07F262991EA00D49B7A /* BroadcastMessageFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BroadcastMessageFactory.swift; sourceTree = "<group>"; };
5556
6E3ECB85262B956400F9EE92 /* ConnectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ConnectView.swift; path = PlaneTalk/UI/ConnectView.swift; sourceTree = SOURCE_ROOT; };
5657
6E3ECB88262B956F00F9EE92 /* ConnectView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ConnectView.xib; sourceTree = "<group>"; };
58+
6E3ECB8B262BAC6900F9EE92 /* UIColor+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Ext.swift"; sourceTree = "<group>"; };
5759
6E6AC0A42624F52900A273B4 /* NetworkInterfaceType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInterfaceType.swift; sourceTree = "<group>"; };
5860
6E8766FA2626595500FB80DA /* BroadcastManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BroadcastManager.swift; sourceTree = "<group>"; };
5961
6E8766FE26265BF600FB80DA /* ClientCommunicationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientCommunicationManager.swift; sourceTree = "<group>"; };
@@ -159,6 +161,7 @@
159161
EF9C42E6241A899C00564AC2 /* Collection+Ext.swift */,
160162
EF9C42E8241A89B200564AC2 /* UIView+Ext.swift */,
161163
EF95F80B2402D5D20002C047 /* Notification+Ext.swift */,
164+
6E3ECB8B262BAC6900F9EE92 /* UIColor+Ext.swift */,
162165
);
163166
path = Extensions;
164167
sourceTree = "<group>";
@@ -254,17 +257,17 @@
254257
6E87670826265E1C00FB80DA /* Network */,
255258
EF3D9D9B241D1603009079FC /* Delegate */,
256259
EF50585F23FF0BEB001020FD /* Devices */,
260+
EF8CBE61241ABDCD009AB2D0 /* ChatMessage.swift */,
257261
);
258262
path = Model;
259263
sourceTree = "<group>";
260264
};
261265
EF95F85A2403398F0002C047 /* UI */ = {
262266
isa = PBXGroup;
263267
children = (
268+
EF37DFEA24354F97009F1E29 /* UIChatTableView.swift */,
264269
6E3ECB85262B956400F9EE92 /* ConnectView.swift */,
265270
6E3ECB88262B956F00F9EE92 /* ConnectView.xib */,
266-
EF37DFEA24354F97009F1E29 /* UIChatTableView.swift */,
267-
EF8CBE61241ABDCD009AB2D0 /* ChatMessage.swift */,
268271
EF95F82E240309370002C047 /* MessageTableViewCell.swift */,
269272
EF95F82F240309370002C047 /* MessageTableViewCell.xib */,
270273
EF9C42E0241A858F00564AC2 /* TextBoardView.swift */,
@@ -354,6 +357,7 @@
354357
6E6AC0A52624F52900A273B4 /* NetworkInterfaceType.swift in Sources */,
355358
EF37DFEB24354F97009F1E29 /* UIChatTableView.swift in Sources */,
356359
6E87670426265CF100FB80DA /* ServerCommunicationManager.swift in Sources */,
360+
6E3ECB8C262BAC6900F9EE92 /* UIColor+Ext.swift in Sources */,
357361
EF3D9DA3241D1682009079FC /* ClientCommunicationDelegate.swift in Sources */,
358362
EF50585623FEDC84001020FD /* NetworkInterface.swift in Sources */,
359363
EF8CBE5E241AB547009AB2D0 /* Reusable.swift in Sources */,

PlaneTalk/ChatViewController.swift

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ final class ChatViewController: UIViewController {
1212
private enum Constant {
1313
static let navigatioBarBackgroundColor = UIColor(white: 0.96, alpha: 1)
1414
static let keyboardGap: CGFloat = 38
15-
static let viewBackgroundColor = UIColor(red: 246/255, green: 245/255, blue: 246/255, alpha: 1)
15+
static let viewBackgroundColor = UIColor(r: 246, g: 245, b: 246)
16+
static let cornerRadiusRatio: CGFloat = 0.08
1617
}
1718

1819
@IBOutlet private var tableView: UIChatTableView!
@@ -24,18 +25,15 @@ final class ChatViewController: UIViewController {
2425
}
2526
}
2627

28+
// Initial views for connecting
29+
private lazy var connectView: ConnectView = ConnectView.instantiateFromNib()
2730
@IBOutlet private var overlayView: UIView!
28-
@IBOutlet weak var connectViewContainerView: UIView! {
31+
@IBOutlet private var connectViewContainerView: UIView! {
2932
didSet {
3033
connectView.embed(into: connectViewContainerView)
3134
}
3235
}
3336

34-
private lazy var connectView: ConnectView = {
35-
let connectView = UINib(nibName: "ConnectView", bundle: .main).instantiate(withOwner: nil, options: nil).first as! ConnectView
36-
return connectView
37-
}()
38-
3937
private var textBoardView = TextBoardView.instantiateFromNib()
4038
private var viewModel: ChatViewModelInterface?
4139

@@ -135,6 +133,11 @@ final class ChatViewController: UIViewController {
135133
UIView.animate(withDuration: duration, animations: {
136134
self.textBoardViewContainerBottomConstraint.constant = newBottomConstant
137135
self.view.layoutIfNeeded()
136+
let messagesCount = self.messages.count
137+
guard messagesCount > 0 else {
138+
return
139+
}
140+
self.tableView.scrollToRow(at: IndexPath(row: messagesCount - 1, section: 0), at: .bottom, animated: false)
138141
})
139142
}
140143

@@ -149,13 +152,15 @@ final class ChatViewController: UIViewController {
149152
tableView.delegate = self
150153
tableView.dataSource = self
151154

155+
connectViewContainerView.layer.masksToBounds = true
156+
152157
view.backgroundColor = Constant.viewBackgroundColor
153158
navigationController?.navigationBar.backgroundColor = Constant.navigatioBarBackgroundColor
154159

155160
let searchButtonViewData = ConnectView.ViewData.ButtonViewData(
156161
title: "Search server",
157162
color: .white,
158-
backgroundColor: .init(red: 32/255, green: 99/255, blue: 155/255, alpha: 1),
163+
backgroundColor: .init(r: 32, g: 99, b: 155),
159164
tapHanlder: { [weak self] in
160165
self?.connectView.showActivityIndicator(true)
161166
self?.viewModel?.searchServer()
@@ -165,7 +170,7 @@ final class ChatViewController: UIViewController {
165170
let serverButtonViewData = ConnectView.ViewData.ButtonViewData(
166171
title: "Become server",
167172
color: .white,
168-
backgroundColor: .init(red: 32/255, green: 99/255, blue: 155/255, alpha: 1),
173+
backgroundColor: .init(r: 32, g: 99, b: 155),
169174
tapHanlder: { [weak self] in
170175
self?.viewModel?.askServerPermissions()
171176
self?.hideOverlay()
@@ -181,13 +186,23 @@ final class ChatViewController: UIViewController {
181186
}
182187

183188
private func hideOverlay() {
184-
overlayView.isHidden = true
185-
connectViewContainerView.isHidden = true
189+
UIView.animate(withDuration: 0.35, animations: {
190+
self.overlayView.alpha = 0
191+
self.connectViewContainerView.alpha = 0
192+
}, completion: { _ in
193+
self.overlayView.isHidden = true
194+
self.connectViewContainerView.isHidden = true
195+
})
186196
}
187197

188198
@objc private func didTapOnTableview() {
189199
view.endEditing(true)
190200
}
201+
202+
override func viewDidLayoutSubviews() {
203+
super.viewDidLayoutSubviews()
204+
connectViewContainerView.layer.cornerRadius = connectViewContainerView.frame.height * Constant.cornerRadiusRatio
205+
}
191206
}
192207

193208
extension ChatViewController: UITableViewDelegate, UITableViewDataSource {
@@ -226,21 +241,20 @@ extension ChatViewController: MessagePresenter {
226241
extension ChatViewController: TextBoardViewDelegate {
227242
func textBoard(_ textBoard: TextBoardView, didPressSendButtonWith text: String) {
228243
viewModel?.send(text)
229-
view.endEditing(true)
230244
}
231245
}
232246

233247
extension MessageTableViewCell.ViewData {
234248
static func from(_ chatMessage: ChatMessage) -> MessageTableViewCell.ViewData {
235-
let textColor = chatMessage.isMyMessage ? MessageTableViewCell.Constant.outgoingMessageTextColor : MessageTableViewCell.Constant.incomingMessageTextColor
236-
let backgroundColor = chatMessage.isMyMessage ? MessageTableViewCell.Constant.outgoingMessageBubbleColor : MessageTableViewCell.Constant.incomingMessageBubbleColor
249+
let textColor: UIColor = chatMessage.isSentByMe ? .outgoingMessageTextColor : .incomingMessageTextColor
250+
let backgroundColor: UIColor = chatMessage.isSentByMe ? .outgoingMessageBubbleColor : .incomingMessageBubbleColor
237251

238252
return MessageTableViewCell.ViewData(
239253
sender: chatMessage.senderAlias,
240254
text: chatMessage.text,
241255
textColor: textColor,
242256
backgroundColor: backgroundColor,
243-
alignment: chatMessage.isMyMessage ? .right : .left
257+
alignment: chatMessage.isSentByMe ? .right : .left
244258
)
245259
}
246260
}

PlaneTalk/ChatViewModel.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ extension ChatViewModel: ServerCommunicationDelegate {
7878
// Server did send its text
7979
func serverDidSendItsText(_ text: String) {
8080
let senderAndText = text.components(separatedBy: Constant.separator)
81-
let chatMessage = ChatMessage(text: senderAndText[1], senderAlias: "Me", isMyMessage: true)
81+
let chatMessage = ChatMessage(text: senderAndText[1], senderAlias: "Me", isSentByMe: true)
8282
presentMessage(chatMessage: chatMessage)
8383
}
8484

8585
// Server did send a client text
8686
func serverDidSendClientText(_ text: String, senderIP: String) {
8787
print("Showing \(text)")
88-
let chatMessage = ChatMessage(text: text, senderAlias: senderIP, isMyMessage: false)
88+
let chatMessage = ChatMessage(text: text, senderAlias: senderIP, isSentByMe: false)
8989
presentMessage(chatMessage: chatMessage)
9090
}
9191
}
@@ -95,12 +95,12 @@ extension ChatViewModel: ClientCommunicationDelegate {
9595
let senderAndText = text.components(separatedBy: Constant.separator)
9696
let sender = senderAndText[0]
9797
let text = senderAndText[1]
98-
let chatMessage = ChatMessage(text: text, senderAlias: sender, isMyMessage: false)
98+
let chatMessage = ChatMessage(text: text, senderAlias: sender, isSentByMe: false)
9999
presentMessage(chatMessage: chatMessage)
100100
}
101101

102102
func clientDidSendMessage(_ text: String) {
103-
let chatMessage = ChatMessage(text: text, senderAlias: "Me", isMyMessage: true)
103+
let chatMessage = ChatMessage(text: text, senderAlias: "Me", isSentByMe: true)
104104
presentMessage(chatMessage: chatMessage)
105105
}
106106

PlaneTalk/UI/ChatMessage.swift renamed to PlaneTalk/Model/ChatMessage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ import Foundation
1111
struct ChatMessage {
1212
let text: String
1313
let senderAlias: String
14-
let isMyMessage: Bool
14+
let isSentByMe: Bool
1515
}

PlaneTalk/Supporting Files/Base.lproj/Main.storyboard

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
<color key="backgroundColor" white="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
3737
</view>
3838
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lnw-Yw-Iod">
39-
<rect key="frame" x="84.5" y="356" width="245" height="238"/>
39+
<rect key="frame" x="62" y="308.5" width="290" height="282"/>
4040
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
4141
<constraints>
4242
<constraint firstAttribute="width" secondItem="lnw-Yw-Iod" secondAttribute="height" multiplier="35:34" id="YJc-zj-7pd"/>
@@ -53,15 +53,14 @@
5353
<constraint firstItem="yD8-M3-ayF" firstAttribute="leading" secondItem="eEe-gg-iTk" secondAttribute="leading" id="1xS-f4-wrg"/>
5454
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="eEe-gg-iTk" secondAttribute="trailing" id="49C-Na-m0b"/>
5555
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="TvX-CB-EWj" secondAttribute="trailing" id="6AH-rr-piI"/>
56-
<constraint firstItem="lnw-Yw-Iod" firstAttribute="centerX" secondItem="6Tk-OE-BBY" secondAttribute="centerX" id="CTS-wf-2TP"/>
56+
<constraint firstItem="lnw-Yw-Iod" firstAttribute="centerX" secondItem="eEe-gg-iTk" secondAttribute="centerX" id="DnM-PY-d5y"/>
5757
<constraint firstItem="QVb-z5-bmW" firstAttribute="top" secondItem="eEe-gg-iTk" secondAttribute="bottom" id="Lgg-7L-RPz"/>
5858
<constraint firstItem="yD8-M3-ayF" firstAttribute="trailing" secondItem="eEe-gg-iTk" secondAttribute="trailing" id="Q6F-ky-wyk"/>
5959
<constraint firstItem="yD8-M3-ayF" firstAttribute="bottom" secondItem="eEe-gg-iTk" secondAttribute="bottom" id="Qvn-hm-Wtd"/>
6060
<constraint firstItem="yD8-M3-ayF" firstAttribute="top" secondItem="eEe-gg-iTk" secondAttribute="top" id="VfW-Hc-bA5"/>
6161
<constraint firstItem="eEe-gg-iTk" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="WL1-nn-a3t"/>
62-
<constraint firstItem="lnw-Yw-Iod" firstAttribute="width" secondItem="6Tk-OE-BBY" secondAttribute="width" multiplier="0.591787" id="WxL-ht-Top"/>
62+
<constraint firstItem="lnw-Yw-Iod" firstAttribute="width" secondItem="6Tk-OE-BBY" secondAttribute="width" multiplier="0.7" id="WxL-ht-Top"/>
6363
<constraint firstItem="TvX-CB-EWj" firstAttribute="top" secondItem="QVb-z5-bmW" secondAttribute="bottom" id="ayd-jY-bT5"/>
64-
<constraint firstItem="lnw-Yw-Iod" firstAttribute="centerY" secondItem="6Tk-OE-BBY" secondAttribute="centerY" id="bRk-8v-y4R"/>
6564
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="QVb-z5-bmW" secondAttribute="trailing" id="iHS-dh-CTM"/>
6665
<constraint firstItem="QVb-z5-bmW" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="irb-Ek-zZb"/>
6766
<constraint firstItem="TvX-CB-EWj" firstAttribute="bottom" secondItem="6Tk-OE-BBY" secondAttribute="bottom" id="l8h-JL-NtG"/>
@@ -71,6 +70,7 @@
7170
<constraint firstItem="Pir-OO-isj" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="qyJ-6J-EXv"/>
7271
<constraint firstItem="QVb-z5-bmW" firstAttribute="top" secondItem="Pir-OO-isj" secondAttribute="bottom" id="sMD-iu-rlZ"/>
7372
<constraint firstItem="Pir-OO-isj" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" id="tzU-r6-Lb4"/>
73+
<constraint firstItem="lnw-Yw-Iod" firstAttribute="centerY" secondItem="eEe-gg-iTk" secondAttribute="centerY" id="zuf-8t-yMh"/>
7474
</constraints>
7575
</view>
7676
<navigationItem key="navigationItem" title="Plane Talk" id="eE5-AF-IFz"/>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// UIColor+Ext.swift
3+
// PlaneTalk
4+
//
5+
// Created by Annino De Petra on 18/04/2021.
6+
// Copyright © 2021 Annino De Petra. All rights reserved.
7+
//
8+
9+
import UIKit
10+
11+
extension UIColor {
12+
convenience init(r: CGFloat, g: CGFloat, b: CGFloat, alpha: CGFloat = 1) {
13+
self.init(red: r/255, green: g/255, blue: b/255, alpha: alpha)
14+
}
15+
}
16+
17+
extension UIColor {
18+
static let outgoingMessageBubbleColor = UIColor(r: 70, g: 181, b: 85)
19+
static let incomingMessageBubbleColor = UIColor(white: 0.972, alpha: 1)
20+
static let outgoingMessageTextColor = UIColor.white
21+
static let incomingMessageTextColor = UIColor.black
22+
}

PlaneTalk/UI/ConnectView.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88

99
import UIKit
1010

11-
final class ConnectView: UIView, ViewDataConfigurable {
11+
final class ConnectView: UIView, ViewDataConfigurable, NibLoadable {
12+
private enum Constant {
13+
static let cornerRadiusRatio: CGFloat = 0.08
14+
}
15+
1216
struct ViewData: Equatable {
1317
struct ButtonViewData: Equatable {
1418
static func == (lhs: ConnectView.ViewData.ButtonViewData, rhs: ConnectView.ViewData.ButtonViewData) -> Bool {
@@ -48,6 +52,15 @@ final class ConnectView: UIView, ViewDataConfigurable {
4852
serverActionHandler = serverButtonViewData.tapHanlder
4953
}
5054

55+
override func layoutSubviews() {
56+
super.layoutSubviews()
57+
58+
searchServerButton.layer.cornerRadius = searchServerButton.frame.height * Constant.cornerRadiusRatio
59+
searchServerButton.layer.masksToBounds = true
60+
becomeServerButton.layer.cornerRadius = searchServerButton.frame.height * Constant.cornerRadiusRatio
61+
becomeServerButton.layer.masksToBounds = true
62+
}
63+
5164
func showActivityIndicator(_ shouldShow: Bool) {
5265
shouldShow ? activityIndicator.startAnimating() : activityIndicator.stopAnimating()
5366
}

0 commit comments

Comments
 (0)