Apply design changes to home view.

This commit is contained in:
Matthew Chen 2018-04-10 13:02:33 -04:00
parent 0b7c025c57
commit b8f8a3017a
9 changed files with 257 additions and 185 deletions

View file

@ -49,6 +49,8 @@
34330A5E1E787BD800DF2FB9 /* ElegantIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5D1E787BD800DF2FB9 /* ElegantIcons.ttf */; }; 34330A5E1E787BD800DF2FB9 /* ElegantIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 34330A5D1E787BD800DF2FB9 /* ElegantIcons.ttf */; };
34330AA31E79686200DF2FB9 /* OWSProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34330AA21E79686200DF2FB9 /* OWSProgressView.m */; }; 34330AA31E79686200DF2FB9 /* OWSProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34330AA21E79686200DF2FB9 /* OWSProgressView.m */; };
34386A54207D271D009F5D9C /* NeverClearView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34386A53207D271C009F5D9C /* NeverClearView.swift */; }; 34386A54207D271D009F5D9C /* NeverClearView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34386A53207D271C009F5D9C /* NeverClearView.swift */; };
34386A51207D0C01009F5D9C /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34386A4D207D0C01009F5D9C /* HomeViewController.m */; };
34386A52207D0C01009F5D9C /* HomeViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34386A50207D0C01009F5D9C /* HomeViewCell.m */; };
343A65951FC47D5E000477A1 /* DebugUISyncMessages.m in Sources */ = {isa = PBXBuildFile; fileRef = 343A65941FC47D5E000477A1 /* DebugUISyncMessages.m */; }; 343A65951FC47D5E000477A1 /* DebugUISyncMessages.m in Sources */ = {isa = PBXBuildFile; fileRef = 343A65941FC47D5E000477A1 /* DebugUISyncMessages.m */; };
343A65981FC4CFE7000477A1 /* ConversationScrollButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 343A65961FC4CFE6000477A1 /* ConversationScrollButton.m */; }; 343A65981FC4CFE7000477A1 /* ConversationScrollButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 343A65961FC4CFE6000477A1 /* ConversationScrollButton.m */; };
34480B361FD0929200BC14EF /* ShareAppExtensionContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 34480B351FD0929200BC14EF /* ShareAppExtensionContext.m */; }; 34480B361FD0929200BC14EF /* ShareAppExtensionContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 34480B351FD0929200BC14EF /* ShareAppExtensionContext.m */; };
@ -163,12 +165,10 @@
34B3F8771E8DF1700035BE1A /* ContactsPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F83E1E8DF1700035BE1A /* ContactsPicker.swift */; }; 34B3F8771E8DF1700035BE1A /* ContactsPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F83E1E8DF1700035BE1A /* ContactsPicker.swift */; };
34B3F8781E8DF1700035BE1A /* ContactsPicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34B3F83F1E8DF1700035BE1A /* ContactsPicker.xib */; }; 34B3F8781E8DF1700035BE1A /* ContactsPicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34B3F83F1E8DF1700035BE1A /* ContactsPicker.xib */; };
34B3F87B1E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8441E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift */; }; 34B3F87B1E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8441E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift */; };
34B3F87E1E8DF1700035BE1A /* InboxTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F84A1E8DF1700035BE1A /* InboxTableViewCell.m */; };
34B3F8801E8DF1700035BE1A /* InviteFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F84C1E8DF1700035BE1A /* InviteFlow.swift */; }; 34B3F8801E8DF1700035BE1A /* InviteFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F84C1E8DF1700035BE1A /* InviteFlow.swift */; };
34B3F8821E8DF1700035BE1A /* NewContactThreadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8501E8DF1700035BE1A /* NewContactThreadViewController.m */; }; 34B3F8821E8DF1700035BE1A /* NewContactThreadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8501E8DF1700035BE1A /* NewContactThreadViewController.m */; };
34B3F8851E8DF1700035BE1A /* NewGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8551E8DF1700035BE1A /* NewGroupViewController.m */; }; 34B3F8851E8DF1700035BE1A /* NewGroupViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8551E8DF1700035BE1A /* NewGroupViewController.m */; };
34B3F8931E8DF1710035BE1A /* SignalsNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F86E1E8DF1700035BE1A /* SignalsNavigationController.m */; }; 34B3F8931E8DF1710035BE1A /* SignalsNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F86E1E8DF1700035BE1A /* SignalsNavigationController.m */; };
34B3F8941E8DF1710035BE1A /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8701E8DF1700035BE1A /* HomeViewController.m */; };
34BECE2B1F74C12700D7438D /* DebugUIStress.m in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2A1F74C12700D7438D /* DebugUIStress.m */; }; 34BECE2B1F74C12700D7438D /* DebugUIStress.m in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2A1F74C12700D7438D /* DebugUIStress.m */; };
34BECE2E1F7ABCE000D7438D /* GifPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2D1F7ABCE000D7438D /* GifPickerViewController.swift */; }; 34BECE2E1F7ABCE000D7438D /* GifPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2D1F7ABCE000D7438D /* GifPickerViewController.swift */; };
34BECE301F7ABCF800D7438D /* GifPickerLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2F1F7ABCF800D7438D /* GifPickerLayout.swift */; }; 34BECE301F7ABCF800D7438D /* GifPickerLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34BECE2F1F7ABCF800D7438D /* GifPickerLayout.swift */; };
@ -617,6 +617,10 @@
34330AA11E79686200DF2FB9 /* OWSProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSProgressView.h; sourceTree = "<group>"; }; 34330AA11E79686200DF2FB9 /* OWSProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSProgressView.h; sourceTree = "<group>"; };
34330AA21E79686200DF2FB9 /* OWSProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSProgressView.m; sourceTree = "<group>"; }; 34330AA21E79686200DF2FB9 /* OWSProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSProgressView.m; sourceTree = "<group>"; };
34386A53207D271C009F5D9C /* NeverClearView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NeverClearView.swift; sourceTree = "<group>"; }; 34386A53207D271C009F5D9C /* NeverClearView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NeverClearView.swift; sourceTree = "<group>"; };
34386A4D207D0C01009F5D9C /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = "<group>"; };
34386A4E207D0C01009F5D9C /* HomeViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewCell.h; sourceTree = "<group>"; };
34386A4F207D0C01009F5D9C /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = "<group>"; };
34386A50207D0C01009F5D9C /* HomeViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewCell.m; sourceTree = "<group>"; };
343A65931FC47D5D000477A1 /* DebugUISyncMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugUISyncMessages.h; sourceTree = "<group>"; }; 343A65931FC47D5D000477A1 /* DebugUISyncMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugUISyncMessages.h; sourceTree = "<group>"; };
343A65941FC47D5E000477A1 /* DebugUISyncMessages.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUISyncMessages.m; sourceTree = "<group>"; }; 343A65941FC47D5E000477A1 /* DebugUISyncMessages.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DebugUISyncMessages.m; sourceTree = "<group>"; };
343A65961FC4CFE6000477A1 /* ConversationScrollButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConversationScrollButton.m; sourceTree = "<group>"; }; 343A65961FC4CFE6000477A1 /* ConversationScrollButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConversationScrollButton.m; sourceTree = "<group>"; };
@ -748,8 +752,6 @@
34B3F83E1E8DF1700035BE1A /* ContactsPicker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactsPicker.swift; sourceTree = "<group>"; }; 34B3F83E1E8DF1700035BE1A /* ContactsPicker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContactsPicker.swift; sourceTree = "<group>"; };
34B3F83F1E8DF1700035BE1A /* ContactsPicker.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactsPicker.xib; sourceTree = "<group>"; }; 34B3F83F1E8DF1700035BE1A /* ContactsPicker.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactsPicker.xib; sourceTree = "<group>"; };
34B3F8441E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExperienceUpgradesPageViewController.swift; sourceTree = "<group>"; }; 34B3F8441E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExperienceUpgradesPageViewController.swift; sourceTree = "<group>"; };
34B3F8491E8DF1700035BE1A /* InboxTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InboxTableViewCell.h; sourceTree = "<group>"; };
34B3F84A1E8DF1700035BE1A /* InboxTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InboxTableViewCell.m; sourceTree = "<group>"; };
34B3F84C1E8DF1700035BE1A /* InviteFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InviteFlow.swift; sourceTree = "<group>"; }; 34B3F84C1E8DF1700035BE1A /* InviteFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InviteFlow.swift; sourceTree = "<group>"; };
34B3F84F1E8DF1700035BE1A /* NewContactThreadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewContactThreadViewController.h; sourceTree = "<group>"; }; 34B3F84F1E8DF1700035BE1A /* NewContactThreadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewContactThreadViewController.h; sourceTree = "<group>"; };
34B3F8501E8DF1700035BE1A /* NewContactThreadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewContactThreadViewController.m; sourceTree = "<group>"; }; 34B3F8501E8DF1700035BE1A /* NewContactThreadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewContactThreadViewController.m; sourceTree = "<group>"; };
@ -757,8 +759,6 @@
34B3F8551E8DF1700035BE1A /* NewGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewGroupViewController.m; sourceTree = "<group>"; }; 34B3F8551E8DF1700035BE1A /* NewGroupViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewGroupViewController.m; sourceTree = "<group>"; };
34B3F86D1E8DF1700035BE1A /* SignalsNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalsNavigationController.h; sourceTree = "<group>"; }; 34B3F86D1E8DF1700035BE1A /* SignalsNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalsNavigationController.h; sourceTree = "<group>"; };
34B3F86E1E8DF1700035BE1A /* SignalsNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignalsNavigationController.m; sourceTree = "<group>"; }; 34B3F86E1E8DF1700035BE1A /* SignalsNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignalsNavigationController.m; sourceTree = "<group>"; };
34B3F86F1E8DF1700035BE1A /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = "<group>"; };
34B3F8701E8DF1700035BE1A /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = "<group>"; };
34B3F89D1E8DF5490035BE1A /* OWSTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSTableViewController.h; sourceTree = "<group>"; }; 34B3F89D1E8DF5490035BE1A /* OWSTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSTableViewController.h; sourceTree = "<group>"; };
34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSTableViewController.m; sourceTree = "<group>"; }; 34B3F89E1E8DF5490035BE1A /* OWSTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSTableViewController.m; sourceTree = "<group>"; };
34BECE291F74C12700D7438D /* DebugUIStress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugUIStress.h; sourceTree = "<group>"; }; 34BECE291F74C12700D7438D /* DebugUIStress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugUIStress.h; sourceTree = "<group>"; };
@ -1352,6 +1352,17 @@
path = Fonts; path = Fonts;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
34386A4C207D0C01009F5D9C /* HomeView */ = {
isa = PBXGroup;
children = (
34386A4E207D0C01009F5D9C /* HomeViewCell.h */,
34386A50207D0C01009F5D9C /* HomeViewCell.m */,
34386A4F207D0C01009F5D9C /* HomeViewController.h */,
34386A4D207D0C01009F5D9C /* HomeViewController.m */,
);
path = HomeView;
sourceTree = "<group>";
};
34480B2F1FD0921000BC14EF /* utils */ = { 34480B2F1FD0921000BC14EF /* utils */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -1583,10 +1594,7 @@
34D8C0221ED3673300188D7C /* DebugUI */, 34D8C0221ED3673300188D7C /* DebugUI */,
34B3F8441E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift */, 34B3F8441E8DF1700035BE1A /* ExperienceUpgradesPageViewController.swift */,
34BECE2C1F7ABCE000D7438D /* GifPicker */, 34BECE2C1F7ABCE000D7438D /* GifPicker */,
34B3F86F1E8DF1700035BE1A /* HomeViewController.h */, 34386A4C207D0C01009F5D9C /* HomeView */,
34B3F8701E8DF1700035BE1A /* HomeViewController.m */,
34B3F8491E8DF1700035BE1A /* InboxTableViewCell.h */,
34B3F84A1E8DF1700035BE1A /* InboxTableViewCell.m */,
34B3F84C1E8DF1700035BE1A /* InviteFlow.swift */, 34B3F84C1E8DF1700035BE1A /* InviteFlow.swift */,
45B9EE9A200E91FB005D2F2D /* MediaDetailViewController.h */, 45B9EE9A200E91FB005D2F2D /* MediaDetailViewController.h */,
45B9EE9B200E91FB005D2F2D /* MediaDetailViewController.m */, 45B9EE9B200E91FB005D2F2D /* MediaDetailViewController.m */,
@ -3158,6 +3166,7 @@
3461293E1FD1D72B00532771 /* ExperienceUpgradeFinder.swift in Sources */, 3461293E1FD1D72B00532771 /* ExperienceUpgradeFinder.swift in Sources */,
34D1F0BD1F8D108C0066283D /* AttachmentUploadView.m in Sources */, 34D1F0BD1F8D108C0066283D /* AttachmentUploadView.m in Sources */,
452EC6DF205E9E30000E787C /* MediaGalleryViewController.swift in Sources */, 452EC6DF205E9E30000E787C /* MediaGalleryViewController.swift in Sources */,
34386A52207D0C01009F5D9C /* HomeViewCell.m in Sources */,
34DBF007206C3CB200025978 /* OWSBubbleStrokeView.m in Sources */, 34DBF007206C3CB200025978 /* OWSBubbleStrokeView.m in Sources */,
34D1F0BA1F8800D90066283D /* OWSAudioMessageView.m in Sources */, 34D1F0BA1F8800D90066283D /* OWSAudioMessageView.m in Sources */,
34D8C02B1ED3685800188D7C /* DebugUIContacts.m in Sources */, 34D8C02B1ED3685800188D7C /* DebugUIContacts.m in Sources */,
@ -3178,6 +3187,7 @@
34D1F0AB1F867BFC0066283D /* OWSContactOffersCell.m in Sources */, 34D1F0AB1F867BFC0066283D /* OWSContactOffersCell.m in Sources */,
340FC8C7204DE64D007AEB0F /* OWSBackupAPI.swift in Sources */, 340FC8C7204DE64D007AEB0F /* OWSBackupAPI.swift in Sources */,
343A65981FC4CFE7000477A1 /* ConversationScrollButton.m in Sources */, 343A65981FC4CFE7000477A1 /* ConversationScrollButton.m in Sources */,
34386A51207D0C01009F5D9C /* HomeViewController.m in Sources */,
34D1F0A91F867BFC0066283D /* ConversationViewCell.m in Sources */, 34D1F0A91F867BFC0066283D /* ConversationViewCell.m in Sources */,
4505C2BF1E648EA300CEBF41 /* ExperienceUpgrade.swift in Sources */, 4505C2BF1E648EA300CEBF41 /* ExperienceUpgrade.swift in Sources */,
34CCAF381F0C0599004084F4 /* AppUpdateNag.m in Sources */, 34CCAF381F0C0599004084F4 /* AppUpdateNag.m in Sources */,
@ -3298,14 +3308,12 @@
340FC8A8204DAC8D007AEB0F /* CodeVerificationViewController.m in Sources */, 340FC8A8204DAC8D007AEB0F /* CodeVerificationViewController.m in Sources */,
3461299C1FD1EA9E00532771 /* NotificationsManager.m in Sources */, 3461299C1FD1EA9E00532771 /* NotificationsManager.m in Sources */,
4521C3C01F59F3BA00B4C582 /* TextFieldHelper.swift in Sources */, 4521C3C01F59F3BA00B4C582 /* TextFieldHelper.swift in Sources */,
34B3F87E1E8DF1700035BE1A /* InboxTableViewCell.m in Sources */,
34D2CCDF206939B400CB1A14 /* DebugUIMessagesAction.m in Sources */, 34D2CCDF206939B400CB1A14 /* DebugUIMessagesAction.m in Sources */,
340FC8AC204DAC8D007AEB0F /* PrivacySettingsTableViewController.m in Sources */, 340FC8AC204DAC8D007AEB0F /* PrivacySettingsTableViewController.m in Sources */,
34D2CCD4206294B900CB1A14 /* OWSScreenLock.swift in Sources */, 34D2CCD4206294B900CB1A14 /* OWSScreenLock.swift in Sources */,
340FC8C5204DE223007AEB0F /* DebugUIBackup.m in Sources */, 340FC8C5204DE223007AEB0F /* DebugUIBackup.m in Sources */,
340FC8AE204DAC8D007AEB0F /* OWSSoundSettingsViewController.m in Sources */, 340FC8AE204DAC8D007AEB0F /* OWSSoundSettingsViewController.m in Sources */,
4579431E1E7C8CE9008ED0C0 /* Pastelog.m in Sources */, 4579431E1E7C8CE9008ED0C0 /* Pastelog.m in Sources */,
34B3F8941E8DF1710035BE1A /* HomeViewController.m in Sources */,
340FC8B0204DAC8D007AEB0F /* AddToBlockListViewController.m in Sources */, 340FC8B0204DAC8D007AEB0F /* AddToBlockListViewController.m in Sources */,
340FC8B3204DAC8D007AEB0F /* AppSettingsViewController.m in Sources */, 340FC8B3204DAC8D007AEB0F /* AppSettingsViewController.m in Sources */,
346B66311F4E29B200E5122F /* CropScaleImageViewController.swift in Sources */, 346B66311F4E29B200E5122F /* CropScaleImageViewController.swift in Sources */,

View file

@ -0,0 +1,23 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
NS_ASSUME_NONNULL_BEGIN
@class OWSContactsManager;
@class TSThread;
@interface HomeViewCell : UITableViewCell
+ (CGFloat)rowHeight;
+ (NSString *)cellReuseIdentifier;
- (void)configureWithThread:(TSThread *)thread
contactsManager:(OWSContactsManager *)contactsManager
blockedPhoneNumberSet:(NSSet<NSString *> *)blockedPhoneNumberSet
shouldHaveBottomSeparator:(BOOL)shouldHaveBottomSeparator;
@end
NS_ASSUME_NONNULL_END

View file

@ -2,10 +2,9 @@
// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // Copyright (c) 2018 Open Whisper Systems. All rights reserved.
// //
#import "InboxTableViewCell.h" #import "HomeViewCell.h"
#import "OWSAvatarBuilder.h" #import "OWSAvatarBuilder.h"
#import "Signal-Swift.h" #import "Signal-Swift.h"
#import "ViewControllerUtils.h"
#import <SignalMessaging/OWSFormat.h> #import <SignalMessaging/OWSFormat.h>
#import <SignalMessaging/OWSUserProfile.h> #import <SignalMessaging/OWSUserProfile.h>
#import <SignalServiceKit/OWSMessageManager.h> #import <SignalServiceKit/OWSMessageManager.h>
@ -15,17 +14,16 @@
NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
#define ARCHIVE_IMAGE_VIEW_WIDTH 22.0f const NSUInteger kHomeViewCellHeight = 72;
#define DELETE_IMAGE_VIEW_WIDTH 19.0f const NSUInteger kHomeViewCellHMargin = 16;
#define TIME_LABEL_SIZE 11 const NSUInteger kHomeViewCellVMargin = 12;
#define DATE_LABEL_SIZE 13 const NSUInteger kHomeViewAvatarSize = kHomeViewCellHeight - kHomeViewCellVMargin * 2;
#define SWIPE_ARCHIVE_OFFSET -50 const NSUInteger kHomeViewAvatarHSpacing = 12;
const NSUInteger kAvatarViewDiameter = 52; @interface HomeViewCell ()
@interface InboxTableViewCell ()
@property (nonatomic) AvatarImageView *avatarView; @property (nonatomic) AvatarImageView *avatarView;
@property (nonatomic) UIView *payloadView;
@property (nonatomic) UILabel *nameLabel; @property (nonatomic) UILabel *nameLabel;
@property (nonatomic) UILabel *snippetLabel; @property (nonatomic) UILabel *snippetLabel;
@property (nonatomic) UILabel *timeLabel; @property (nonatomic) UILabel *timeLabel;
@ -35,11 +33,13 @@ const NSUInteger kAvatarViewDiameter = 52;
@property (nonatomic) TSThread *thread; @property (nonatomic) TSThread *thread;
@property (nonatomic) OWSContactsManager *contactsManager; @property (nonatomic) OWSContactsManager *contactsManager;
@property (nonatomic, readonly) NSMutableArray<NSLayoutConstraint *> *viewConstraints;
@end @end
#pragma mark - #pragma mark -
@implementation InboxTableViewCell @implementation HomeViewCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier
{ {
@ -64,64 +64,84 @@ const NSUInteger kAvatarViewDiameter = 52;
OWSAssert(!self.avatarView); OWSAssert(!self.avatarView);
[self setTranslatesAutoresizingMaskIntoConstraints:NO]; [self setTranslatesAutoresizingMaskIntoConstraints:NO];
self.preservesSuperviewLayoutMargins = YES; self.layoutMargins = UIEdgeInsetsZero;
self.contentView.preservesSuperviewLayoutMargins = YES; self.contentView.layoutMargins = UIEdgeInsetsZero;
self.preservesSuperviewLayoutMargins = NO;
self.contentView.preservesSuperviewLayoutMargins = NO;
self.backgroundColor = [UIColor whiteColor]; self.backgroundColor = [UIColor whiteColor];
_viewConstraints = [NSMutableArray new];
self.avatarView = [[AvatarImageView alloc] init]; self.avatarView = [[AvatarImageView alloc] init];
[self.contentView addSubview:self.avatarView]; [self.contentView addSubview:self.avatarView];
[self.avatarView autoSetDimension:ALDimensionWidth toSize:self.avatarSize]; [self.avatarView autoSetDimension:ALDimensionWidth toSize:kHomeViewAvatarSize];
[self.avatarView autoSetDimension:ALDimensionHeight toSize:self.avatarSize]; [self.avatarView autoSetDimension:ALDimensionHeight toSize:kHomeViewAvatarSize];
[self.avatarView autoPinLeadingToSuperviewMargin]; [self.avatarView autoPinLeadingToSuperviewMarginWithInset:kHomeViewCellHMargin];
[self.avatarView autoVCenterInSuperview]; [self.avatarView autoVCenterInSuperview];
[self.avatarView setContentHuggingHigh];
[self.avatarView setCompressionResistanceHigh];
self.payloadView = [UIView containerView];
[self.contentView addSubview:self.payloadView];
[self.payloadView autoPinLeadingToTrailingEdgeOfView:self.avatarView offset:kHomeViewAvatarHSpacing];
[self.payloadView autoVCenterInSuperview];
self.nameLabel = [UILabel new]; self.nameLabel = [UILabel new];
self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail; self.nameLabel.lineBreakMode = NSLineBreakByTruncatingTail;
self.nameLabel.font = [UIFont ows_boldFontWithSize:14.0f]; self.nameLabel.font = self.nameFont;
[self.contentView addSubview:self.nameLabel];
[self.nameLabel autoPinLeadingToTrailingEdgeOfView:self.avatarView offset:13.f];
[self.nameLabel autoPinEdge:ALEdgeTop toEdge:ALEdgeTop ofView:self.avatarView];
[self.nameLabel setContentHuggingHorizontalLow]; [self.nameLabel setContentHuggingHorizontalLow];
[self.nameLabel setCompressionResistanceHorizontalLow];
self.snippetLabel = [UILabel new];
self.snippetLabel.font = [UIFont ows_regularFontWithSize:14.f];
self.snippetLabel.lineBreakMode = NSLineBreakByTruncatingTail;
self.snippetLabel.textColor = [UIColor colorWithWhite:2 / 3.f alpha:1.f];
self.snippetLabel.numberOfLines = 2;
self.snippetLabel.lineBreakMode = NSLineBreakByTruncatingTail;
[self.contentView addSubview:self.snippetLabel];
[self.snippetLabel autoPinLeadingToTrailingEdgeOfView:self.avatarView offset:13.f];
[self.snippetLabel autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:self.nameLabel withOffset:5.f];
[self.snippetLabel autoPinEdge:ALEdgeTrailing toEdge:ALEdgeTrailing ofView:self.nameLabel];
[self.snippetLabel setContentHuggingHorizontalLow];
self.timeLabel = [UILabel new]; self.timeLabel = [UILabel new];
self.timeLabel.font = [UIFont ows_lightFontWithSize:14.f];
[self.contentView addSubview:self.timeLabel];
[self.timeLabel autoPinTrailingToSuperviewMargin];
[self.timeLabel autoAlignAxis:ALAxisHorizontal toSameAxisOfView:self.nameLabel];
[self.timeLabel autoPinLeadingToTrailingEdgeOfView:self.nameLabel offset:10.f];
[self.timeLabel setContentHuggingHorizontalHigh]; [self.timeLabel setContentHuggingHorizontalHigh];
[self.timeLabel setCompressionResistanceHigh]; [self.timeLabel setCompressionResistanceHorizontalHigh];
const int kunreadBadgeSize = 24; UIStackView *topRowView = [[UIStackView alloc] initWithArrangedSubviews:@[
self.unreadBadge = [[NeverClearView alloc] initWithFrame:CGRectMake(0, 0, kunreadBadgeSize, kunreadBadgeSize)]; self.nameLabel,
self.unreadBadge.layer.cornerRadius = kunreadBadgeSize / 2; self.timeLabel,
self.unreadBadge.backgroundColor = [UIColor ows_materialBlueColor]; ]];
[self.contentView addSubview:self.unreadBadge]; topRowView.axis = UILayoutConstraintAxisHorizontal;
[self.unreadBadge autoSetDimension:ALDimensionWidth toSize:kunreadBadgeSize]; topRowView.spacing = 4;
[self.unreadBadge autoSetDimension:ALDimensionHeight toSize:kunreadBadgeSize]; [self.payloadView addSubview:topRowView];
[self.unreadBadge autoPinTrailingToSuperviewMargin]; [topRowView autoPinLeadingToSuperviewMargin];
[self.unreadBadge autoPinEdge:ALEdgeBottom toEdge:ALEdgeBottom ofView:self.avatarView]; [topRowView autoPinTrailingToSuperviewMargin];
[self.unreadBadge setContentHuggingHorizontalHigh]; [topRowView autoPinTopToSuperviewMargin];
[self.unreadBadge setCompressionResistanceHigh];
self.snippetLabel = [UILabel new];
self.snippetLabel.font = [self snippetFont];
self.snippetLabel.numberOfLines = 1;
self.snippetLabel.lineBreakMode = NSLineBreakByTruncatingTail;
[self.payloadView addSubview:self.snippetLabel];
[self.snippetLabel autoPinLeadingToSuperviewMargin];
[self.snippetLabel autoPinTrailingToSuperviewMargin];
[self.snippetLabel autoPinBottomToSuperviewMargin];
[self.snippetLabel autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:topRowView withOffset:5.f];
[self.snippetLabel setContentHuggingHorizontalLow];
[self.snippetLabel setCompressionResistanceHorizontalLow];
self.unreadLabel = [UILabel new]; self.unreadLabel = [UILabel new];
self.unreadLabel.font = [UIFont ows_regularFontWithSize:12.f]; self.unreadLabel.font = [UIFont ows_dynamicTypeCaption1Font];
self.unreadLabel.textColor = [UIColor whiteColor]; self.unreadLabel.textColor = [UIColor whiteColor];
self.unreadLabel.lineBreakMode = NSLineBreakByTruncatingTail; self.unreadLabel.lineBreakMode = NSLineBreakByTruncatingTail;
self.unreadLabel.textAlignment = NSTextAlignmentCenter; self.unreadLabel.textAlignment = NSTextAlignmentCenter;
self.unreadBadge = [NeverClearView new];
self.unreadBadge.backgroundColor = [UIColor ows_materialBlueColor];
[self.contentView addSubview:self.unreadBadge];
[self.unreadBadge autoPinTrailingToSuperviewMarginWithInset:kHomeViewCellHMargin];
[self.unreadBadge autoAlignAxis:ALAxisHorizontal toSameAxisOfView:self.timeLabel];
[self.unreadBadge setContentHuggingHigh];
[self.unreadBadge setCompressionResistanceHigh];
// TODO: Will this localize? It assumes that the worst case
// unread count (99) will fit horizontally into some multiple
// N of the font's line height.
const int unreadBadgeSize = (int)ceil(self.unreadLabel.font.lineHeight * 1.5f);
self.unreadBadge.layer.cornerRadius = unreadBadgeSize / 2;
[self.unreadBadge autoSetDimension:ALDimensionWidth toSize:unreadBadgeSize];
[self.unreadBadge autoSetDimension:ALDimensionHeight toSize:unreadBadgeSize];
[self.unreadBadge addSubview:self.unreadLabel]; [self.unreadBadge addSubview:self.unreadLabel];
[self.unreadLabel autoVCenterInSuperview]; [self.unreadLabel autoVCenterInSuperview];
[self.unreadLabel autoPinWidthToSuperview]; [self.unreadLabel autoPinWidthToSuperview];
@ -134,15 +154,11 @@ const NSUInteger kAvatarViewDiameter = 52;
+ (CGFloat)rowHeight + (CGFloat)rowHeight
{ {
return 72.f; return kHomeViewCellHeight;
} }
- (CGFloat)avatarSize - (void)initializeLayout
{ {
return 52.f;
}
- (void)initializeLayout {
self.selectionStyle = UITableViewCellSelectionStyleDefault; self.selectionStyle = UITableViewCellSelectionStyleDefault;
} }
@ -152,61 +168,21 @@ const NSUInteger kAvatarViewDiameter = 52;
} }
- (void)configureWithThread:(TSThread *)thread - (void)configureWithThread:(TSThread *)thread
contactsManager:(OWSContactsManager *)contactsManager contactsManager:(OWSContactsManager *)contactsManager
blockedPhoneNumberSet:(NSSet<NSString *> *)blockedPhoneNumberSet blockedPhoneNumberSet:(NSSet<NSString *> *)blockedPhoneNumberSet
shouldHaveBottomSeparator:(BOOL)shouldHaveBottomSeparator
{ {
OWSAssertIsOnMainThread(); OWSAssertIsOnMainThread();
OWSAssert(thread); OWSAssert(thread);
OWSAssert(contactsManager); OWSAssert(contactsManager);
OWSAssert(blockedPhoneNumberSet); OWSAssert(blockedPhoneNumberSet);
// TODO: Honor shouldHaveBottomSeparator.
self.thread = thread; self.thread = thread;
self.contactsManager = contactsManager; self.contactsManager = contactsManager;
BOOL isBlocked = NO;
if (!thread.isGroupThread) {
NSString *contactIdentifier = thread.contactIdentifier;
isBlocked = [blockedPhoneNumberSet containsObject:contactIdentifier];
}
NSMutableAttributedString *snippetText = [NSMutableAttributedString new];
if (isBlocked) {
// If thread is blocked, don't show a snippet or mute status.
[snippetText appendAttributedString:[[NSAttributedString alloc] initWithString:NSLocalizedString(@"HOME_VIEW_BLOCKED_CONTACT_CONVERSATION",
@"A label for conversations with blocked users.")
attributes:@{
NSFontAttributeName : [UIFont ows_mediumFontWithSize:12],
NSForegroundColorAttributeName : [UIColor ows_blackColor],
}]];
} else {
if ([thread isMuted]) {
[snippetText appendAttributedString:[[NSAttributedString alloc]
initWithString:@"\ue067 "
attributes:@{
NSFontAttributeName : [UIFont ows_elegantIconsFont:9.f],
NSForegroundColorAttributeName : (thread.hasUnreadMessages
? [UIColor colorWithWhite:0.1f alpha:1.f]
: [UIColor lightGrayColor]),
}]];
}
NSString *displayableText = thread.lastMessageLabel.filterStringForDisplay;
if (displayableText) {
[snippetText appendAttributedString:[[NSAttributedString alloc]
initWithString:displayableText
attributes:@{
NSFontAttributeName : (thread.hasUnreadMessages
? [UIFont ows_mediumFontWithSize:12]
: [UIFont ows_regularFontWithSize:12]),
NSForegroundColorAttributeName :
(thread.hasUnreadMessages ? [UIColor ows_blackColor]
: [UIColor lightGrayColor]),
}]];
}
}
NSAttributedString *attributedDate = [self dateAttributedString:thread.lastMessageDate];
NSUInteger unreadCount = [[OWSMessageUtils sharedManager] unreadMessagesInThread:thread];
BOOL hasUnreadMessages = thread.hasUnreadMessages;
[[NSNotificationCenter defaultCenter] addObserver:self [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(otherUsersProfileDidChange:) selector:@selector(otherUsersProfileDidChange:)
@ -215,20 +191,29 @@ const NSUInteger kAvatarViewDiameter = 52;
[self updateNameLabel]; [self updateNameLabel];
[self updateAvatarView]; [self updateAvatarView];
self.snippetLabel.attributedText = snippetText; self.snippetLabel.attributedText =
self.timeLabel.attributedText = attributedDate; [self attributedSnippetForThread:thread blockedPhoneNumberSet:blockedPhoneNumberSet];
self.timeLabel.attributedText = [self attributedStringForDate:thread.lastMessageDate];
self.separatorInset = UIEdgeInsetsMake(0, self.avatarSize * 1.5f, 0, 0); self.separatorInset
= UIEdgeInsetsMake(0, kHomeViewAvatarSize + kHomeViewCellHMargin + kHomeViewAvatarHSpacing, 0, 0);
_timeLabel.textColor = thread.hasUnreadMessages ? [UIColor ows_materialBlueColor] : [UIColor ows_darkGrayColor]; self.timeLabel.textColor = hasUnreadMessages ? [UIColor ows_materialBlueColor] : [UIColor ows_darkGrayColor];
NSUInteger unreadCount = [[OWSMessageUtils sharedManager] unreadMessagesInThread:thread];
if (unreadCount > 0) { if (unreadCount > 0) {
self.unreadBadge.hidden = NO; self.unreadBadge.hidden = NO;
self.unreadLabel.hidden = NO;
self.unreadLabel.text = [OWSFormat formatInt:MIN(99, (int)unreadCount)]; self.unreadLabel.text = [OWSFormat formatInt:MIN(99, (int)unreadCount)];
[self.viewConstraints addObjectsFromArray:@[
[self.unreadBadge autoPinLeadingToTrailingEdgeOfView:self.payloadView offset:4.f],
]];
} else { } else {
self.unreadBadge.hidden = YES; self.unreadBadge.hidden = YES;
self.unreadLabel.hidden = YES;
[self.viewConstraints addObjectsFromArray:@[
[self.payloadView autoPinTrailingToSuperviewMarginWithInset:kHomeViewCellHMargin],
]];
} }
} }
@ -249,46 +234,115 @@ const NSUInteger kAvatarViewDiameter = 52;
} }
self.avatarView.image = self.avatarView.image =
[OWSAvatarBuilder buildImageForThread:thread diameter:kAvatarViewDiameter contactsManager:contactsManager]; [OWSAvatarBuilder buildImageForThread:thread diameter:kHomeViewAvatarSize contactsManager:contactsManager];
}
- (NSAttributedString *)attributedSnippetForThread:(TSThread *)thread
blockedPhoneNumberSet:(NSSet<NSString *> *)blockedPhoneNumberSet
{
OWSAssert(thread);
BOOL isBlocked = NO;
if (!thread.isGroupThread) {
NSString *contactIdentifier = thread.contactIdentifier;
isBlocked = [blockedPhoneNumberSet containsObject:contactIdentifier];
}
BOOL hasUnreadMessages = thread.hasUnreadMessages;
NSMutableAttributedString *snippetText = [NSMutableAttributedString new];
if (isBlocked) {
// If thread is blocked, don't show a snippet or mute status.
[snippetText
appendAttributedString:[[NSAttributedString alloc]
initWithString:NSLocalizedString(@"HOME_VIEW_BLOCKED_CONTACT_CONVERSATION",
@"A label for conversations with blocked users.")
attributes:@{
NSFontAttributeName : self.snippetFont.ows_medium,
NSForegroundColorAttributeName : [UIColor ows_blackColor],
}]];
} else {
if ([thread isMuted]) {
[snippetText appendAttributedString:[[NSAttributedString alloc]
initWithString:@"\ue067 "
attributes:@{
NSFontAttributeName : [UIFont ows_elegantIconsFont:9.f],
NSForegroundColorAttributeName : (hasUnreadMessages
? [UIColor colorWithWhite:0.1f alpha:1.f]
: [UIColor lightGrayColor]),
}]];
}
NSString *displayableText = thread.lastMessageLabel.filterStringForDisplay;
if (displayableText) {
[snippetText appendAttributedString:[[NSAttributedString alloc]
initWithString:displayableText
attributes:@{
NSFontAttributeName :
(hasUnreadMessages ? self.snippetFont.ows_medium
: self.snippetFont),
NSForegroundColorAttributeName :
(hasUnreadMessages ? [UIColor ows_blackColor]
: [UIColor lightGrayColor]),
}]];
}
}
return snippetText;
} }
#pragma mark - Date formatting #pragma mark - Date formatting
- (NSAttributedString *)dateAttributedString:(nullable NSDate *)date - (NSAttributedString *)attributedStringForDate:(nullable NSDate *)date
{ {
if (date == nil) { if (date == nil) {
OWSProdLogAndFail(@"%@ date was unexpectedly nil", self.logTag); OWSProdLogAndFail(@"%@ date was unexpectedly nil", self.logTag);
return [NSAttributedString new]; return [NSAttributedString new];
} }
NSString *timeString; NSDateFormatter *formatter = ([DateUtil dateIsToday:date] ? [DateUtil timeFormatter] : [DateUtil dateFormatter]);
NSString *timeString = [formatter stringFromDate:date];
if ([DateUtil dateIsToday:date]) {
timeString = [[DateUtil timeFormatter] stringFromDate:date];
} else {
timeString = [[DateUtil dateFormatter] stringFromDate:date];
}
OWSAssert(timeString); OWSAssert(timeString);
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:timeString]; return [[NSAttributedString alloc] initWithString:timeString
attributes:@{
[attributedString addAttribute:NSForegroundColorAttributeName NSForegroundColorAttributeName : [UIColor ows_darkGrayColor],
value:[UIColor ows_darkGrayColor] NSFontAttributeName : self.dateTimeFont,
range:NSMakeRange(0, timeString.length)]; }];
[attributedString addAttribute:NSFontAttributeName
value:[UIFont ows_regularFontWithSize:TIME_LABEL_SIZE]
range:NSMakeRange(0, timeString.length)];
return attributedString;
} }
#pragma mark - Constants
- (UIFont *)dateTimeFont
{
return [UIFont ows_dynamicTypeFootnoteFont];
}
- (UIFont *)snippetFont
{
return [UIFont ows_dynamicTypeBodyFont];
}
- (UIFont *)nameFont
{
return [UIFont ows_dynamicTypeBodyFont].ows_medium;
}
// Used for profile names.
- (UIFont *)nameSecondaryFont
{
return [UIFont ows_dynamicTypeFootnoteFont];
}
#pragma mark - Reuse
- (void)prepareForReuse - (void)prepareForReuse
{ {
[super prepareForReuse]; [super prepareForReuse];
[NSLayoutConstraint deactivateConstraints:self.viewConstraints];
[self.viewConstraints removeAllObjects];
self.thread = nil;
self.contactsManager = nil;
[[NSNotificationCenter defaultCenter] removeObserver:self]; [[NSNotificationCenter defaultCenter] removeObserver:self];
} }
@ -302,7 +356,7 @@ const NSUInteger kAvatarViewDiameter = 52;
if (recipientId.length == 0) { if (recipientId.length == 0) {
return; return;
} }
if (![self.thread isKindOfClass:[TSContactThread class]]) { if (![self.thread isKindOfClass:[TSContactThread class]]) {
return; return;
} }
@ -310,12 +364,12 @@ const NSUInteger kAvatarViewDiameter = 52;
if (![self.thread.contactIdentifier isEqualToString:recipientId]) { if (![self.thread.contactIdentifier isEqualToString:recipientId]) {
return; return;
} }
[self updateNameLabel]; [self updateNameLabel];
[self updateAvatarView]; [self updateAvatarView];
} }
-(void)updateNameLabel - (void)updateNameLabel
{ {
OWSAssertIsOnMainThread(); OWSAssertIsOnMainThread();
@ -325,14 +379,14 @@ const NSUInteger kAvatarViewDiameter = 52;
self.nameLabel.attributedText = nil; self.nameLabel.attributedText = nil;
return; return;
} }
OWSContactsManager *contactsManager = self.contactsManager; OWSContactsManager *contactsManager = self.contactsManager;
if (contactsManager == nil) { if (contactsManager == nil) {
OWSFail(@"%@ contacts manager should not be nil", self.logTag); OWSFail(@"%@ contacts manager should not be nil", self.logTag);
self.nameLabel.attributedText = nil; self.nameLabel.attributedText = nil;
return; return;
} }
NSAttributedString *name; NSAttributedString *name;
if (thread.isGroupThread) { if (thread.isGroupThread) {
if (thread.name.length == 0) { if (thread.name.length == 0) {
@ -341,12 +395,11 @@ const NSUInteger kAvatarViewDiameter = 52;
name = [[NSAttributedString alloc] initWithString:thread.name]; name = [[NSAttributedString alloc] initWithString:thread.name];
} }
} else { } else {
name = [contactsManager name = [contactsManager attributedStringForConversationTitleWithPhoneIdentifier:thread.contactIdentifier
attributedStringForConversationTitleWithPhoneIdentifier:thread.contactIdentifier primaryFont:self.nameFont
primaryFont:self.nameLabel.font secondaryFont:self.nameSecondaryFont];
secondaryFont:[UIFont ows_dynamicTypeFootnoteFont]];
} }
self.nameLabel.attributedText = name; self.nameLabel.attributedText = name;
} }

View file

@ -6,7 +6,7 @@
#import "AppDelegate.h" #import "AppDelegate.h"
#import "AppSettingsViewController.h" #import "AppSettingsViewController.h"
#import "ConversationViewController.h" #import "ConversationViewController.h"
#import "InboxTableViewCell.h" #import "HomeViewCell.h"
#import "NewContactThreadViewController.h" #import "NewContactThreadViewController.h"
#import "OWSNavigationController.h" #import "OWSNavigationController.h"
#import "OWSPrimaryStorage.h" #import "OWSPrimaryStorage.h"
@ -210,8 +210,7 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
self.tableView.delegate = self; self.tableView.delegate = self;
self.tableView.dataSource = self; self.tableView.dataSource = self;
[self.tableView registerClass:[InboxTableViewCell class] [self.tableView registerClass:[HomeViewCell class] forCellReuseIdentifier:HomeViewCell.cellReuseIdentifier];
forCellReuseIdentifier:InboxTableViewCell.cellReuseIdentifier];
[self.view addSubview:self.tableView]; [self.view addSubview:self.tableView];
[self.tableView autoPinWidthToSuperview]; [self.tableView autoPinWidthToSuperview];
[self.tableView autoPinEdgeToSuperviewEdge:ALEdgeBottom]; [self.tableView autoPinEdgeToSuperviewEdge:ALEdgeBottom];
@ -329,7 +328,8 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
} }
- (void)settingsButtonPressed:(id)sender { - (void)settingsButtonPressed:(id)sender
{
OWSNavigationController *navigationController = [AppSettingsViewController inModalNavigationController]; OWSNavigationController *navigationController = [AppSettingsViewController inModalNavigationController];
[self presentViewController:navigationController animated:YES completion:nil]; [self presentViewController:navigationController animated:YES completion:nil];
} }
@ -578,13 +578,18 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{ {
InboxTableViewCell *cell = HomeViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:HomeViewCell.cellReuseIdentifier];
[self.tableView dequeueReusableCellWithIdentifier:InboxTableViewCell.cellReuseIdentifier];
OWSAssert(cell); OWSAssert(cell);
TSThread *thread = [self threadForIndexPath:indexPath]; TSThread *thread = [self threadForIndexPath:indexPath];
[cell configureWithThread:thread contactsManager:self.contactsManager blockedPhoneNumberSet:_blockedPhoneNumberSet]; BOOL isLastCell = (indexPath.row == [self tableView:tableView numberOfRowsInSection:indexPath.section] - 1);
BOOL shouldHaveBottomSeparator = !isLastCell;
[cell configureWithThread:thread
contactsManager:self.contactsManager
blockedPhoneNumberSet:self.blockedPhoneNumberSet
shouldHaveBottomSeparator:shouldHaveBottomSeparator];
if ((unsigned long)indexPath.row == [self.threadMappings numberOfItemsInSection:0] - 1) { if ((unsigned long)indexPath.row == [self.threadMappings numberOfItemsInSection:0] - 1) {
cell.separatorInset = UIEdgeInsetsMake(0.f, cell.bounds.size.width, 0.f, 0.f); cell.separatorInset = UIEdgeInsetsMake(0.f, cell.bounds.size.width, 0.f, 0.f);
@ -606,7 +611,7 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{ {
return InboxTableViewCell.rowHeight; return HomeViewCell.rowHeight;
} }
- (void)pullToRefreshPerformed:(UIRefreshControl *)refreshControl - (void)pullToRefreshPerformed:(UIRefreshControl *)refreshControl
@ -728,7 +733,6 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
[self.editingDbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { [self.editingDbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
viewingThreadsIn == kInboxState ? [thread archiveThreadWithTransaction:transaction] viewingThreadsIn == kInboxState ? [thread archiveThreadWithTransaction:transaction]
: [thread unarchiveThreadWithTransaction:transaction]; : [thread unarchiveThreadWithTransaction:transaction];
}]; }];
[self checkIfEmptyView]; [self checkIfEmptyView];
} }

View file

@ -1,22 +0,0 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
NS_ASSUME_NONNULL_BEGIN
@class TSThread;
@class OWSContactsManager;
@interface InboxTableViewCell : UITableViewCell
+ (CGFloat)rowHeight;
+ (NSString *)cellReuseIdentifier;
- (void)configureWithThread:(TSThread *)thread
contactsManager:(OWSContactsManager *)contactsManager
blockedPhoneNumberSet:(NSSet<NSString *> *)blockedPhoneNumberSet;
@end
NS_ASSUME_NONNULL_END

View file

@ -39,6 +39,7 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Styles #pragma mark - Styles
- (UIFont *)ows_italic; - (UIFont *)ows_italic;
- (UIFont *)ows_bold;
- (UIFont *)ows_medium; - (UIFont *)ows_medium;
@end @end

View file

@ -104,6 +104,11 @@ NS_ASSUME_NONNULL_BEGIN
return [self styleWithSymbolicTraits:UIFontDescriptorTraitItalic]; return [self styleWithSymbolicTraits:UIFontDescriptorTraitItalic];
} }
- (UIFont *)ows_bold
{
return [self styleWithSymbolicTraits:UIFontDescriptorTraitBold];
}
- (UIFont *)styleWithSymbolicTraits:(UIFontDescriptorSymbolicTraits)symbolicTraits - (UIFont *)styleWithSymbolicTraits:(UIFontDescriptorSymbolicTraits)symbolicTraits
{ {
UIFontDescriptor *fontDescriptor = [self.fontDescriptor fontDescriptorWithSymbolicTraits:symbolicTraits]; UIFontDescriptor *fontDescriptor = [self.fontDescriptor fontDescriptorWithSymbolicTraits:symbolicTraits];

View file

@ -197,7 +197,7 @@ NS_ASSUME_NONNULL_BEGIN
OWSCAssert(strongSelf); OWSCAssert(strongSelf);
// To be consistent with the threads (above), we use ContactTableViewCell // To be consistent with the threads (above), we use ContactTableViewCell
// instead of InboxTableViewCell to present contacts and threads. // instead of HomeViewCell to present contacts and threads.
ContactTableViewCell *cell = [ContactTableViewCell new]; ContactTableViewCell *cell = [ContactTableViewCell new];
if ([thread isKindOfClass:[TSContactThread class]]) { if ([thread isKindOfClass:[TSContactThread class]]) {