Settings refactoring.

- Renames GroupModel to TSGroupModel for TextSecureKit consistency.
- Refactors the settings into categories (joint work with @dtsbourg)
- Removes settings and logic for background push.
This commit is contained in:
Frederic Jacobs 2015-01-16 15:28:41 +01:00
parent 96dc676bf9
commit 9e8ba91304
33 changed files with 1186 additions and 1070 deletions

View File

@ -357,7 +357,7 @@
B68B0E8A1A54284100DE8A02 /* TSInvalidIdentityKeyErrorMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = B68B0E891A54284100DE8A02 /* TSInvalidIdentityKeyErrorMessage.m */; };
B69CD25119773E79005CE69A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B69CD25019773E79005CE69A /* XCTest.framework */; };
B6A3EB4B1A423B3800B2236B /* TSAttachmentAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A3EB4A1A423B3800B2236B /* TSAttachmentAdapter.m */; };
B6AE33BD1A1EB121003DF39D /* GroupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = B6AE33BC1A1EB121003DF39D /* GroupModel.m */; };
B6AE33BD1A1EB121003DF39D /* TSGroupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = B6AE33BC1A1EB121003DF39D /* TSGroupModel.m */; };
B6B095E41A1D25C5008BFAA6 /* CryptographyTests.mm in Sources */ = {isa = PBXBuildFile; fileRef = B6B095DE1A1D25C5008BFAA6 /* CryptographyTests.mm */; };
B6B095E51A1D25C5008BFAA6 /* TextSecureKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B095DF1A1D25C5008BFAA6 /* TextSecureKitTests.m */; };
B6B095E61A1D25C5008BFAA6 /* TSMessageStorageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B095E01A1D25C5008BFAA6 /* TSMessageStorageTests.m */; };
@ -486,10 +486,6 @@
E1CD329618BCFF9900B1A496 /* SoundInstance.m in Sources */ = {isa = PBXBuildFile; fileRef = E1CD329518BCFF9900B1A496 /* SoundInstance.m */; };
F995AC2FFD6D4442B012604A /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8313AE91B4954215858A5662 /* libPods.a */; };
FC15B7BF1A1F80F200F59801 /* defaultConctact_light@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC15B7BE1A1F80F200F59801 /* defaultConctact_light@2x.png */; };
FC1615181A37935600F1761D /* NotificationPreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC1615171A37935600F1761D /* NotificationPreviewViewController.m */; };
FC16151C1A37945D00F1761D /* notification_no_preview_with_name@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC1615191A37945D00F1761D /* notification_no_preview_with_name@2x.png */; };
FC16151D1A37945D00F1761D /* notification_no_preview_no_name@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC16151A1A37945D00F1761D /* notification_no_preview_no_name@2x.png */; };
FC16151E1A37945D00F1761D /* notification_with_preview@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC16151B1A37945D00F1761D /* notification_with_preview@2x.png */; };
FC18803C1A31D94D0044CE86 /* SignalTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = FC18803B1A31D94D0044CE86 /* SignalTabBarController.m */; };
FC1F90C01A22342B004F8253 /* group_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC1F90BF1A22342B004F8253 /* group_photo@2x.png */; };
FC1F90C61A223991004F8253 /* settings_tab@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = FC1F90C41A223991004F8253 /* settings_tab@2x.png */; };
@ -533,6 +529,10 @@
FCB626B61A3B067900FDB504 /* ArrowBottom@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCB626B21A3B067900FDB504 /* ArrowBottom@3x.png */; };
FCB626B71A3B067900FDB504 /* ArrowTop@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = FCB626B31A3B067900FDB504 /* ArrowTop@3x.png */; };
FCC81A981A44558300DFEC7D /* UIDevice+TSHardwareVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = FCC81A971A44558300DFEC7D /* UIDevice+TSHardwareVersion.m */; };
FCD274E21A5AFD8000202277 /* PrivacySettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCD274E11A5AFD8000202277 /* PrivacySettingsTableViewController.m */; };
FCD274E51A5AFDB800202277 /* MediaSettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCD274E41A5AFDB800202277 /* MediaSettingsTableViewController.m */; };
FCD274E81A5AFDC900202277 /* AdvancedSettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCD274E71A5AFDC900202277 /* AdvancedSettingsTableViewController.m */; };
FCD274EB1A5AFDDB00202277 /* AboutTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCD274EA1A5AFDDB00202277 /* AboutTableViewController.m */; };
FCF72A081A01A765006BC849 /* ContactsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCF72A071A01A765006BC849 /* ContactsTableViewController.m */; };
FCF72A131A02D27F006BC849 /* ContactDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FCF72A111A02D27F006BC849 /* ContactDetailTableViewController.m */; };
FCFA64B41A24F3880007FB87 /* UIColor+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = FCFA64B31A24F3880007FB87 /* UIColor+OWS.m */; };
@ -996,8 +996,8 @@
B69CD25019773E79005CE69A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
B6A3EB491A423B3800B2236B /* TSAttachmentAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TSAttachmentAdapter.h; sourceTree = "<group>"; };
B6A3EB4A1A423B3800B2236B /* TSAttachmentAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSAttachmentAdapter.m; sourceTree = "<group>"; };
B6AE33BB1A1EB121003DF39D /* GroupModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GroupModel.h; sourceTree = "<group>"; };
B6AE33BC1A1EB121003DF39D /* GroupModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GroupModel.m; sourceTree = "<group>"; };
B6AE33BB1A1EB121003DF39D /* TSGroupModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TSGroupModel.h; path = "../../view controllers/TSGroupModel.h"; sourceTree = "<group>"; };
B6AE33BC1A1EB121003DF39D /* TSGroupModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TSGroupModel.m; path = "../../view controllers/TSGroupModel.m"; sourceTree = "<group>"; };
B6B095DE1A1D25C5008BFAA6 /* CryptographyTests.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CryptographyTests.mm; sourceTree = "<group>"; };
B6B095DF1A1D25C5008BFAA6 /* TextSecureKitTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextSecureKitTests.m; sourceTree = "<group>"; };
B6B095E01A1D25C5008BFAA6 /* TSMessageStorageTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TSMessageStorageTests.m; sourceTree = "<group>"; };
@ -1187,11 +1187,6 @@
E1CD329418BCFF9900B1A496 /* SoundInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoundInstance.h; sourceTree = "<group>"; };
E1CD329518BCFF9900B1A496 /* SoundInstance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SoundInstance.m; sourceTree = "<group>"; };
FC15B7BE1A1F80F200F59801 /* defaultConctact_light@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "defaultConctact_light@2x.png"; sourceTree = "<group>"; };
FC1615161A37935600F1761D /* NotificationPreviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotificationPreviewViewController.h; sourceTree = "<group>"; };
FC1615171A37935600F1761D /* NotificationPreviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NotificationPreviewViewController.m; sourceTree = "<group>"; };
FC1615191A37945D00F1761D /* notification_no_preview_with_name@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "notification_no_preview_with_name@2x.png"; sourceTree = "<group>"; };
FC16151A1A37945D00F1761D /* notification_no_preview_no_name@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "notification_no_preview_no_name@2x.png"; sourceTree = "<group>"; };
FC16151B1A37945D00F1761D /* notification_with_preview@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "notification_with_preview@2x.png"; sourceTree = "<group>"; };
FC18803A1A31D94D0044CE86 /* SignalTabBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignalTabBarController.h; sourceTree = "<group>"; };
FC18803B1A31D94D0044CE86 /* SignalTabBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignalTabBarController.m; sourceTree = "<group>"; };
FC1F90BF1A22342B004F8253 /* group_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "group_photo@2x.png"; sourceTree = "<group>"; };
@ -1249,6 +1244,14 @@
FCB626B31A3B067900FDB504 /* ArrowTop@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ArrowTop@3x.png"; sourceTree = "<group>"; };
FCC81A961A44558300DFEC7D /* UIDevice+TSHardwareVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+TSHardwareVersion.h"; sourceTree = "<group>"; };
FCC81A971A44558300DFEC7D /* UIDevice+TSHardwareVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+TSHardwareVersion.m"; sourceTree = "<group>"; };
FCD274E01A5AFD8000202277 /* PrivacySettingsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivacySettingsTableViewController.h; sourceTree = "<group>"; };
FCD274E11A5AFD8000202277 /* PrivacySettingsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrivacySettingsTableViewController.m; sourceTree = "<group>"; };
FCD274E31A5AFDB800202277 /* MediaSettingsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaSettingsTableViewController.h; sourceTree = "<group>"; };
FCD274E41A5AFDB800202277 /* MediaSettingsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MediaSettingsTableViewController.m; sourceTree = "<group>"; };
FCD274E61A5AFDC900202277 /* AdvancedSettingsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdvancedSettingsTableViewController.h; sourceTree = "<group>"; };
FCD274E71A5AFDC900202277 /* AdvancedSettingsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdvancedSettingsTableViewController.m; sourceTree = "<group>"; };
FCD274E91A5AFDDB00202277 /* AboutTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutTableViewController.h; sourceTree = "<group>"; };
FCD274EA1A5AFDDB00202277 /* AboutTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AboutTableViewController.m; sourceTree = "<group>"; };
FCF72A061A01A765006BC849 /* ContactsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactsTableViewController.h; sourceTree = "<group>"; };
FCF72A071A01A765006BC849 /* ContactsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactsTableViewController.m; sourceTree = "<group>"; };
FCF72A111A02D27F006BC849 /* ContactDetailTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailTableViewController.m; sourceTree = "<group>"; };
@ -2204,9 +2207,6 @@
FCA52AE41A2B676C00CCADFA /* message_error@2x.png */,
B633C5411A1D190B0059AC12 /* mute_off@2x.png */,
B633C5421A1D190B0059AC12 /* mute_on@2x.png */,
FC16151A1A37945D00F1761D /* notification_no_preview_no_name@2x.png */,
FC1615191A37945D00F1761D /* notification_no_preview_with_name@2x.png */,
FC16151B1A37945D00F1761D /* notification_with_preview@2x.png */,
B633C54B1A1D190B0059AC12 /* photo@2x.png */,
FC9120421A39F9E00074545C /* qr_scan_fingerprint@2x.png */,
FC91203F1A39EFB70074545C /* qr@2x.png */,
@ -2306,8 +2306,6 @@
B6AE33B41A1EB0A0003DF39D /* temp */ = {
isa = PBXGroup;
children = (
B6AE33BB1A1EB121003DF39D /* GroupModel.h */,
B6AE33BC1A1EB121003DF39D /* GroupModel.m */,
);
name = temp;
sourceTree = "<group>";
@ -2395,6 +2393,8 @@
B6B0960E1A1D25ED008BFAA6 /* TSInfoMessage.m */,
B6B0960F1A1D25ED008BFAA6 /* TSInteraction.h */,
B6B096101A1D25ED008BFAA6 /* TSInteraction.m */,
B6AE33BB1A1EB121003DF39D /* TSGroupModel.h */,
B6AE33BC1A1EB121003DF39D /* TSGroupModel.m */,
B6B096111A1D25ED008BFAA6 /* TSMessage.h */,
B6B096121A1D25ED008BFAA6 /* TSMessage.m */,
B6B50AA91A4192C500F8F607 /* TSMessagesManager+attachments.h */,
@ -2686,8 +2686,14 @@
children = (
FC31962E1A0814130094C78E /* SettingsTableViewController.h */,
FC31962F1A0814130094C78E /* SettingsTableViewController.m */,
FC1615161A37935600F1761D /* NotificationPreviewViewController.h */,
FC1615171A37935600F1761D /* NotificationPreviewViewController.m */,
FCD274E01A5AFD8000202277 /* PrivacySettingsTableViewController.h */,
FCD274E11A5AFD8000202277 /* PrivacySettingsTableViewController.m */,
FCD274E31A5AFDB800202277 /* MediaSettingsTableViewController.h */,
FCD274E41A5AFDB800202277 /* MediaSettingsTableViewController.m */,
FCD274E61A5AFDC900202277 /* AdvancedSettingsTableViewController.h */,
FCD274E71A5AFDC900202277 /* AdvancedSettingsTableViewController.m */,
FCD274E91A5AFDDB00202277 /* AboutTableViewController.h */,
FCD274EA1A5AFDDB00202277 /* AboutTableViewController.m */,
);
name = Settings;
sourceTree = "<group>";
@ -2951,9 +2957,7 @@
B633C5CE1A1D190B0059AC12 /* quit@2x.png in Resources */,
E148750A18A06966002CC4F3 /* InCallViewController.xib in Resources */,
FCA52AEB1A2B676C00CCADFA /* checkmark_light@2x.png in Resources */,
FC16151C1A37945D00F1761D /* notification_no_preview_with_name@2x.png in Resources */,
B633C5D01A1D190B0059AC12 /* red-delete@2x.png in Resources */,
FC16151E1A37945D00F1761D /* notification_with_preview@2x.png in Resources */,
B633C59D1A1D190B0059AC12 /* endcall@2x.png in Resources */,
B633C5B41A1D190B0059AC12 /* keypad@2x.png in Resources */,
B633C5DA1A1D190B0059AC12 /* settings_dark@2x.png in Resources */,
@ -2976,7 +2980,6 @@
B66DBF4A19D5BBC8006EA940 /* Images.xcassets in Resources */,
FCA52AE71A2B676C00CCADFA /* call_failed@2x.png in Resources */,
70B8FEE21909FE360042E3F0 /* 171756__nenadsimic__picked-coin-echo-2.wav in Resources */,
FC16151D1A37945D00F1761D /* notification_no_preview_no_name@2x.png in Resources */,
B633C5801A1D190B0059AC12 /* archive@2x.png in Resources */,
FC1F90C71A223991004F8253 /* signals_tab@2x.png in Resources */,
FCB626B51A3B067900FDB504 /* ArrowBottom@2x.png in Resources */,
@ -3170,6 +3173,7 @@
B63AF5C91A1F757900D01AAD /* TSRecipientPrekeyRequest.m in Sources */,
7095B7B018F46D35002C66E2 /* PhoneNumberUtil.m in Sources */,
B63AF5D81A1F889500D01AAD /* SubProtocol.pb.m in Sources */,
FCD274EB1A5AFDDB00202277 /* AboutTableViewController.m in Sources */,
E197B61618BBEC1A00F073E5 /* StretchFactorController.m in Sources */,
FCFD257F1A154B2C00F4C644 /* RegistrationViewController.m in Sources */,
76EB065018170B34006006FC /* DialerViewController.m in Sources */,
@ -3201,7 +3205,7 @@
76EB065A18170B34006006FC /* NextResponderScrollView.m in Sources */,
76EB062618170B33006006FC /* Queue.m in Sources */,
D221A09A169C9E5E00537ABF /* main.m in Sources */,
B6AE33BD1A1EB121003DF39D /* GroupModel.m in Sources */,
B6AE33BD1A1EB121003DF39D /* TSGroupModel.m in Sources */,
76EB061618170B33006006FC /* AnonymousOccurrenceLogger.m in Sources */,
76EB063018170B33006006FC /* Conversions.m in Sources */,
FCAFC33F1A0F948F00AE5136 /* ActionContactDetailCell.m in Sources */,
@ -3225,7 +3229,6 @@
76EB058218170B33006006FC /* Environment.m in Sources */,
76EB064418170B33006006FC /* ThreadManager.m in Sources */,
E197B61E18BBEC6D00F073E5 /* AudioRouter.m in Sources */,
FC1615181A37935600F1761D /* NotificationPreviewViewController.m in Sources */,
E197B60D18BBEC1A00F073E5 /* AudioSocket.m in Sources */,
FCF72A081A01A765006BC849 /* ContactsTableViewController.m in Sources */,
A5D0699B1A50E9CB004CB540 /* ShowGroupMembersViewController.m in Sources */,
@ -3260,6 +3263,7 @@
76EB063218170B33006006FC /* Crc32.m in Sources */,
E197B62418BBF5BB00F073E5 /* SoundPlayer.m in Sources */,
E197B61018BBEC1A00F073E5 /* EncodedAudioPacket.m in Sources */,
FCD274E51A5AFDB800202277 /* MediaSettingsTableViewController.m in Sources */,
76EB063618170B33006006FC /* DataUtil.m in Sources */,
E197B60C18BBEC1A00F073E5 /* AudioPacker.m in Sources */,
E197B61218BBEC1A00F073E5 /* AudioStretcher.m in Sources */,
@ -3275,6 +3279,7 @@
76EB057418170B33006006FC /* RecentCallManager.m in Sources */,
B60FB9A71A46F099006A5A66 /* TSAllocAttachmentRequest.m in Sources */,
76EB061C18170B33006006FC /* ArrayUtil.m in Sources */,
FCD274E81A5AFDC900202277 /* AdvancedSettingsTableViewController.m in Sources */,
76EB05C418170B33006006FC /* HandshakePacket.m in Sources */,
76EB05AA18170B33006006FC /* SequenceCounter.m in Sources */,
7038632718F70C0700D4A43F /* CryptoTools.m in Sources */,
@ -3327,6 +3332,7 @@
FCB11D8A1A1284BB002F93FB /* SettingsTableViewCell.m in Sources */,
76EB05C818170B33006006FC /* HelloPacket.m in Sources */,
BFB074C719A5611000F2947C /* FutureUtil.m in Sources */,
FCD274E21A5AFD8000202277 /* PrivacySettingsTableViewController.m in Sources */,
76EB057218170B33006006FC /* RecentCall.m in Sources */,
76EB060418170B33006006FC /* PhoneNumberDirectoryFilter.m in Sources */,
B97CBFA818860EA3008E0DE9 /* CountryCodeViewController.m in Sources */,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

View File

@ -212,6 +212,7 @@
} else {
[TSSocketManager becomeActive];
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 20 * NSEC_PER_SEC),
dispatch_get_main_queue(), ^{
completionHandler(UIBackgroundFetchResultNewData);
@ -261,13 +262,9 @@
dispatch_get_main_queue(), ^{
completionHandler();
});
} else if ([identifier isEqualToString:Signal_Message_MarkAsRead_Identifier]){
//TODO
} else if ([identifier isEqualToString:Signal_Message_View_Identifier]){
//TODO
} else{
completionHandler();
}
completionHandler();
}
- (void)applicationDidEnterBackground:(UIApplication *)application{

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
#import "PropertyListPreferences.h"
#import "PacketHandler.h"
#import "SecureEndPoint.h"
#import "GroupModel.h"
#import "TSGroupModel.h"
/**
*
* Environment is a data and data accessor class.
@ -84,6 +84,6 @@ andCurrentRegionCodeForPhoneNumbers:(NSString*)currentRegionCodeForPhoneNumbers
- (void)setSignUpFlowNavigationController:(UINavigationController *)signUpFlowNavigationController;
+ (void)messageIdentifier:(NSString*)identifier;
+ (void)groupModel:(GroupModel*)model;
+ (void)groupModel:(TSGroupModel*)model;
@end

View File

@ -187,7 +187,7 @@ phoneDirectoryManager;
}
}
+ (void)groupModel:(GroupModel*)model {
+ (void)groupModel:(TSGroupModel*)model {
Environment *env = [self getCurrent];
SignalsViewController *vc = env.signalsViewController;

View File

@ -7,13 +7,13 @@
//
#import "TSThread.h"
#import "GroupModel.h"
#import "TSGroupModel.h"
@interface TSGroupThread : TSThread
@property (nonatomic,strong) GroupModel* groupModel;
+ (instancetype)getOrCreateThreadWithGroupModel:(GroupModel *)groupModel transaction:(YapDatabaseReadWriteTransaction*)transaction;
@property (nonatomic,strong) TSGroupModel* groupModel;
+ (instancetype)getOrCreateThreadWithGroupModel:(TSGroupModel *)groupModel transaction:(YapDatabaseReadWriteTransaction*)transaction;
+ (instancetype)threadWithGroupModel:(GroupModel *)groupModel transaction:(YapDatabaseReadTransaction*)transaction;
+ (instancetype)threadWithGroupModel:(TSGroupModel *)groupModel transaction:(YapDatabaseReadTransaction*)transaction;
- (NSData*)groupId;
- (NSArray *)recipientsWithTransaction:(YapDatabaseReadTransaction*)transaction;

View File

@ -14,7 +14,7 @@
#define TSGroupThreadPrefix @"g"
- (instancetype)initWithGroupModel:(GroupModel *)groupModel{
- (instancetype)initWithGroupModel:(TSGroupModel *)groupModel{
NSString *uniqueIdentifier = [[self class] threadIdFromGroupId:groupModel.groupId];
@ -24,11 +24,11 @@
}
+ (instancetype)threadWithGroupModel:(GroupModel *)groupModel transaction:(YapDatabaseReadTransaction*)transaction {
+ (instancetype)threadWithGroupModel:(TSGroupModel *)groupModel transaction:(YapDatabaseReadTransaction*)transaction {
return [self fetchObjectWithUniqueID:[self threadIdFromGroupId:groupModel.groupId] transaction:transaction];
}
+ (instancetype)getOrCreateThreadWithGroupModel:(GroupModel *)groupModel transaction:(YapDatabaseReadWriteTransaction*)transaction{
+ (instancetype)getOrCreateThreadWithGroupModel:(TSGroupModel *)groupModel transaction:(YapDatabaseReadWriteTransaction*)transaction{
TSGroupThread *thread = [self fetchObjectWithUniqueID:[self threadIdFromGroupId:groupModel.groupId] transaction:transaction];
if (!thread) {

View File

@ -147,7 +147,7 @@ dispatch_queue_t attachmentsQueue() {
[stream saveWithTransaction:transaction];
if([attachment.avatarOfGroupId length]!=0) {
GroupModel *emptyModelToFillOutId = [[GroupModel alloc] initWithTitle:nil memberIds:nil image:nil groupId:attachment.avatarOfGroupId]; // TODO refactor the TSGroupThread to just take in an ID (as it is all that it uses). Should not take in more than it uses
TSGroupModel *emptyModelToFillOutId = [[TSGroupModel alloc] initWithTitle:nil memberIds:nil image:nil groupId:attachment.avatarOfGroupId]; // TODO refactor the TSGroupThread to just take in an ID (as it is all that it uses). Should not take in more than it uses
TSGroupThread* gThread = [TSGroupThread getOrCreateThreadWithGroupModel:emptyModelToFillOutId transaction:transaction];
gThread.groupModel.groupImage=[stream image];
[gThread saveWithTransaction:transaction];

View File

@ -186,7 +186,7 @@
if(content.hasGroup) {
__block BOOL ignoreMessage = NO;
[self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
GroupModel *emptyModelToFillOutId = [[GroupModel alloc] initWithTitle:nil memberIds:nil image:nil groupId:content.group.id]; // TODO refactor the TSGroupThread to just take in an ID (as it is all that it uses). Should not take in more than it uses
TSGroupModel *emptyModelToFillOutId = [[TSGroupModel alloc] initWithTitle:nil memberIds:nil image:nil groupId:content.group.id]; // TODO refactor the TSGroupThread to just take in an ID (as it is all that it uses). Should not take in more than it uses
TSGroupThread *gThread = [TSGroupThread threadWithGroupModel:emptyModelToFillOutId transaction:transaction];
if(gThread==nil && content.group.type != PushMessageContentGroupContextTypeUpdate) {
ignoreMessage = YES;
@ -247,7 +247,7 @@
TSIncomingMessage *incomingMessage;
TSThread *thread;
if (groupId) {
GroupModel *model = [[GroupModel alloc] initWithTitle:content.group.name memberIds:[[NSMutableArray alloc ] initWithArray:content.group.members] image:nil groupId:content.group.id];
TSGroupModel *model = [[TSGroupModel alloc] initWithTitle:content.group.name memberIds:[[NSMutableArray alloc ] initWithArray:content.group.members] image:nil groupId:content.group.id];
TSGroupThread *gThread = [TSGroupThread getOrCreateThreadWithGroupModel:model transaction:transaction];
[gThread saveWithTransaction:transaction];
if(content.group.type==PushMessageContentGroupContextTypeUpdate) {
@ -324,7 +324,6 @@
[errorMessage saveWithTransaction:transaction];
}];
}
- (void)processException:(NSException*)exception outgoingMessage:(TSOutgoingMessage*)message{
@ -339,32 +338,7 @@
}
- (void)notifyUserForIncomingMessage:(TSIncomingMessage*)message from:(NSString*)name{
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = [self alertBodyForNotificationSetting:[Environment.preferences notificationPreviewType] withMessage:message from:name];
notification.soundName = @"default";
notification.category = Signal_Message_Category;
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}
-(NSString*)alertBodyForNotificationSetting:(NotificationType)setting withMessage:(TSIncomingMessage*)message from:(NSString*)name
{
switch (setting) {
case NotificationNoNameNoPreview:
return @"New message";
break;
case NotificationNamePreview:
if (message.body) {
return [NSString stringWithFormat:@"%@ : %@", name, message.body];
}
case NotificationNameNoPreview:
return [NSString stringWithFormat:@"New message from %@", name];
default:
DDLogWarn(@"Unexpected notification type %lu", setting);
break;
}
//TODO: Warn user when message is received?
}
@end

View File

@ -0,0 +1,13 @@
//
// AboutTableViewController.h
// Signal
//
// Created by Dylan Bourgeois on 05/01/15.
// Copyright (c) 2015 Open Whisper Systems. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AboutTableViewController : UITableViewController
@end

View File

@ -0,0 +1,159 @@
//
// AboutTableViewController.m
// Signal
//
// Created by Dylan Bourgeois on 05/01/15.
// Copyright (c) 2015 Open Whisper Systems. All rights reserved.
//
#import "AboutTableViewController.h"
#import <Social/Social.h>
#import "UIUtil.h"
@interface AboutTableViewController ()
@property (strong, nonatomic) UITableViewCell *versionCell;
@property (strong, nonatomic) UITableViewCell *supportCell;
@property (strong, nonatomic) UITableViewCell *twitterInviteCell;
@property (strong, nonatomic) UILabel *versionLabel;
@property (strong, nonatomic) UILabel *footerView;
@end
@implementation AboutTableViewController
-(instancetype)init {
return [super initWithStyle:UITableViewStyleGrouped];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero];
}
-(void)loadView
{
[super loadView];
self.title = @"About";
//Version
self.versionCell = [[UITableViewCell alloc]init];
self.versionCell.textLabel.text = @"Version";
self.versionLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 75, 30)];
self.versionLabel.text = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
self.versionLabel.textColor = [UIColor lightGrayColor];
self.versionLabel.font = [UIFont ows_lightFontWithSize:16.0f];
self.versionLabel.textAlignment = NSTextAlignmentRight;
self.versionCell.accessoryView = self.versionLabel;
self.versionCell.userInteractionEnabled = NO;
//Support
self.supportCell = [[UITableViewCell alloc]init];
self.supportCell.textLabel.text = @"Support";
self.supportCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//Footer
self.footerView = [[UILabel alloc]init];
self.footerView.text = @"Copyright Open Whisper Systems \n Licensed under the GPLv3";
self.footerView.textColor = [UIColor darkGrayColor];
self.footerView.font = [UIFont ows_lightFontWithSize:15.0f];
self.footerView.numberOfLines = 2;
self.footerView.textAlignment = NSTextAlignmentCenter;
//Twitter Invite
self.twitterInviteCell = [[UITableViewCell alloc]init];
self.twitterInviteCell.textLabel.text = @"Share install link";
UIImageView* twitterImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"twitter"]];
[twitterImageView setFrame:CGRectMake(0, 0, 34, 34)];
twitterImageView.contentMode = UIViewContentModeScaleAspectFit;
self.twitterInviteCell.accessoryView = twitterImageView;
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 3;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
switch (section) {
case 0: return 1;
case 1: return 1;
case 2: return 1;
default: return 0;
}
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
switch (section) {
case 0: return @"Information";
case 1: return @"Invite";
case 2: return @"Help";
default: return nil;
}
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.section) {
case 0: return self.versionCell;
case 1: return self.twitterInviteCell;
case 2: return self.supportCell;
}
return nil;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
switch (indexPath.section) {
case 1:
[self tappedInviteTwitter];
break;
case 2:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://support.whispersystems.org"]];
break;
default:
break;
}
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return section == 2 ? self.footerView : nil;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return section == 2 ? 60.0f : 0;
}
- (void)tappedInviteTwitter {
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
SLComposeViewController *tweetSheet = [SLComposeViewController
composeViewControllerForServiceType:SLServiceTypeTwitter];
NSString *tweetString = [NSString stringWithFormat:@"You can reach me on @whispersystems Signal, get it now."];
[tweetSheet setInitialText:tweetString];
[tweetSheet addURL:[NSURL URLWithString:@"https://whispersystems.org/signal/install/"]];
tweetSheet.completionHandler = ^(SLComposeViewControllerResult result) {
};
[self presentViewController:tweetSheet animated:YES completion:nil];
}
}
@end

View File

@ -0,0 +1,13 @@
//
// AdvancedSettingsTableViewController.h
// Signal
//
// Created by Dylan Bourgeois on 05/01/15.
// Copyright (c) 2015 Open Whisper Systems. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AdvancedSettingsTableViewController : UITableViewController
@end

View File

@ -0,0 +1,116 @@
//
// AdvancedSettingsTableViewController.m
// Signal
//
// Created by Dylan Bourgeois on 05/01/15.
// Copyright (c) 2015 Open Whisper Systems. All rights reserved.
//
#import "AdvancedSettingsTableViewController.h"
#import <PastelogKit/Pastelog.h>
#import "Environment.h"
#import "PreferencesUtil.h"
#import "DebugLogger.h"
@interface AdvancedSettingsTableViewController ()
@property (strong, nonatomic) UITableViewCell * enableLogCell;
@property (strong, nonatomic) UITableViewCell * submitLogCell;
@property (strong, nonatomic) UISwitch * enableLogSwitch;
@end
@implementation AdvancedSettingsTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero];
}
-(instancetype)init {
return [super initWithStyle:UITableViewStyleGrouped];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
-(void)loadView
{
[super loadView];
self.title = @"Advanced";
//Enable Log
self.enableLogCell = [[UITableViewCell alloc]init];
self.enableLogCell.textLabel.text = @"Enable Debug Log";
self.enableLogCell.userInteractionEnabled = YES;
self.enableLogSwitch = [[UISwitch alloc]initWithFrame:CGRectZero];
[self.enableLogSwitch setOn:[Environment.preferences loggingIsEnabled]];
[self.enableLogSwitch addTarget:self action:@selector(didToggleSwitch:) forControlEvents:UIControlEventTouchUpInside];
self.enableLogCell.accessoryView = self.enableLogSwitch;
//Send Log
self.submitLogCell = [[UITableViewCell alloc]init];
self.submitLogCell.textLabel.text = @"Submit Debug Log";
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.enableLogSwitch.isOn ? 2 : 1;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return @"Logging";
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
case 0: return self.enableLogCell;
case 1: return self.submitLogCell;
}
NSAssert(false, @"No Cell configured");
return nil;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (indexPath.row == 1)
{
[Pastelog submitLogs];
}
}
#pragma mark - Actions
-(void)didToggleSwitch:(UISwitch*)sender
{
if (!sender.isOn) {
[DebugLogger.sharedInstance disableFileLogging];
[DebugLogger.sharedInstance wipeLogs];
} else {
[DebugLogger.sharedInstance enableFileLogging];
}
[Environment.preferences setLoggingEnabled:sender.isOn];
[self.tableView reloadData];
}
@end

View File

@ -0,0 +1,13 @@
//
// MediaSettingsTableViewController.h
// Signal
//
// Created by Dylan Bourgeois on 05/01/15.
// Copyright (c) 2015 Open Whisper Systems. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface MediaSettingsTableViewController : UITableViewController
@end

View File

@ -0,0 +1,144 @@
//
// MediaSettingsTableViewController.m
// Signal
//
// Created by Dylan Bourgeois on 05/01/15.
// Copyright (c) 2015 Open Whisper Systems. All rights reserved.
//
#import "MediaSettingsTableViewController.h"
#import "Environment.h"
#import "PreferencesUtil.h"
@interface MediaSettingsTableViewController ()
@property (strong, nonatomic) UITableViewCell * uncroppedQualityCell;
@property (strong, nonatomic) UITableViewCell * highQualityCell;
@property (strong, nonatomic) UITableViewCell * averageQualityCell;
@property (strong, nonatomic) UITableViewCell * lowQualityCell;
@property (strong, nonatomic) NSIndexPath * lastIndexPath;
@end
@implementation MediaSettingsTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero];
[self showCheckmarkOnDefaultSetting:YES];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
-(instancetype)init
{
return [super initWithStyle:UITableViewStyleGrouped];
}
-(void)loadView {
[super loadView];
self.title = @"Media";
//Uncropped
self.uncroppedQualityCell = [[UITableViewCell alloc]init];
self.uncroppedQualityCell.textLabel.text = @"Uncropped";
self.uncroppedQualityCell.selectionStyle = UITableViewCellSelectionStyleNone;
//High
self.highQualityCell = [[UITableViewCell alloc]init];
self.highQualityCell.textLabel.text = @"High";
self.highQualityCell.selectionStyle = UITableViewCellSelectionStyleNone;
//Average
self.averageQualityCell = [[UITableViewCell alloc]init];
self.averageQualityCell.textLabel.text = @"Average";
self.averageQualityCell.selectionStyle = UITableViewCellSelectionStyleNone;
//Low
self.lowQualityCell = [[UITableViewCell alloc]init];
self.lowQualityCell.textLabel.text = @"Low";
self.lowQualityCell.selectionStyle = UITableViewCellSelectionStyleNone;
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 4;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
case 0: return self.uncroppedQualityCell;
case 1: return self.highQualityCell;
case 2: return self.averageQualityCell;
case 3: return self.lowQualityCell;
default: return nil;
}
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return @"Image upload quality";
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self showCheckmarkOnDefaultSetting:NO];
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
[self updateSettingWithSelectedIndexPath:indexPath];
}
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
}
#pragma mark - Setting
-(void)updateSettingWithSelectedIndexPath:(NSIndexPath*)indexPath
{
switch (indexPath.row) {
case 0:
[Environment.preferences setImageUploadQuality:TSImageQualityUncropped];
break;
case 1:
[Environment.preferences setImageUploadQuality:TSImageQualityHigh];
break;
case 2:
[Environment.preferences setImageUploadQuality:TSImageQualityMedium];
break;
case 3:
[Environment.preferences setImageUploadQuality:TSImageQualityLow];
break;
default:
break;
}
}
-(NSIndexPath*)indexPathForSetting:(TSImageQuality)setting
{
switch (setting) {
case TSImageQualityUncropped: return [NSIndexPath indexPathForRow:0 inSection:0];
case TSImageQualityHigh: return [NSIndexPath indexPathForRow:1 inSection:0];
case TSImageQualityMedium: return [NSIndexPath indexPathForRow:2 inSection:0];
case TSImageQualityLow: return [NSIndexPath indexPathForRow:3 inSection:0];
}
}
-(void)showCheckmarkOnDefaultSetting:(BOOL)show
{
NSIndexPath * defaultIndexPath = [self indexPathForSetting:[Environment.preferences imageUploadQuality]];
[self.tableView cellForRowAtIndexPath:defaultIndexPath].accessoryType = show ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
}
@end

View File

@ -8,7 +8,7 @@
#import "JSQMessagesViewController.h"
#import "JSQMessages.h"
#import "GroupModel.h"
#import "TSGroupModel.h"
@class TSThread;
@interface MessagesViewController : JSQMessagesViewController <UIImagePickerControllerDelegate,
@ -17,6 +17,6 @@
- (void)setupWithThread:(TSThread*)thread;
- (void)setupWithTSIdentifier:(NSString*)identifier;
- (void)setupWithTSGroup:(GroupModel*)model;
- (void)setupWithTSGroup:(TSGroupModel*)model;
@end

View File

@ -100,7 +100,7 @@ typedef enum : NSUInteger {
}];
}
- (void)setupWithTSGroup:(GroupModel*)model {
- (void)setupWithTSGroup:(TSGroupModel*)model {
[self.editingDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
self.thread = [TSGroupThread getOrCreateThreadWithGroupModel:model transaction:transaction];
@ -1132,7 +1132,7 @@ typedef enum : NSUInteger {
}];
}
- (void) updateGroupModelTo:(GroupModel*)newGroupModel {
- (void) updateGroupModelTo:(TSGroupModel*)newGroupModel {
[self.editingDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
TSGroupThread* gThread = [TSGroupThread getOrCreateThreadWithGroupModel:newGroupModel transaction:transaction];
gThread.groupModel = newGroupModel;
@ -1153,7 +1153,7 @@ typedef enum : NSUInteger {
- (IBAction)unwindGroupUpdated:(UIStoryboardSegue *)segue{
[self.inputToolbar.contentView.textView resignFirstResponder];
NewGroupViewController *ngc = [segue sourceViewController];
GroupModel* newGroupModel = [ngc groupModel];
TSGroupModel* newGroupModel = [ngc groupModel];
NSMutableArray* groupMemberIds = [[NSMutableArray alloc] initWithArray:newGroupModel.groupMemberIds];
[groupMemberIds addObject:[SignalKeyingStorage.localNumber toE164]];
newGroupModel.groupMemberIds = groupMemberIds;

View File

@ -8,7 +8,7 @@
#import <UIKit/UIKit.h>
#import "TSGroupThread.h"
#import "GroupModel.h"
#import "TSGroupModel.h"
@interface NewGroupViewController : UIViewController <UITableViewDelegate, UITabBarDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate>
@ -17,6 +17,6 @@
@property(nonatomic, strong) IBOutlet UITextField* nameGroupTextField;
@property(nonatomic, strong) IBOutlet UIButton* groupImageButton;
@property(nonatomic, strong) IBOutlet UIView* tapToDismissView;
@property(nonatomic, strong) GroupModel* groupModel;
@property(nonatomic, strong) TSGroupModel* groupModel;
@end

View File

@ -15,7 +15,7 @@
#import "Contact.h"
#import "GroupModel.h"
#import "TSGroupModel.h"
#import "SecurityUtils.h"
#import "SignalKeyingStorage.h"
@ -121,7 +121,7 @@ static NSString* const kUnwindToMessagesViewSegue = @"UnwindToMessagesViewSegue"
#pragma mark - Actions
-(void)createGroup {
GroupModel* model = [self makeGroup];
TSGroupModel* model = [self makeGroup];
[Environment groupModel:model];
}
@ -132,13 +132,13 @@ static NSString* const kUnwindToMessagesViewSegue = @"UnwindToMessagesViewSegue"
[mut addObjectsFromArray:[[contacts objectAtIndex:(NSUInteger)idx.row-1] textSecureIdentifiers]];
}
[mut addObject:[SignalKeyingStorage.localNumber toE164]]; // Also add the originator
_groupModel = [[GroupModel alloc] initWithTitle:_nameGroupTextField.text memberIds:[NSMutableArray arrayWithArray:[[NSSet setWithArray:mut] allObjects]] image:_thread.groupModel.groupImage groupId:_thread.groupModel.groupId];
_groupModel = [[TSGroupModel alloc] initWithTitle:_nameGroupTextField.text memberIds:[NSMutableArray arrayWithArray:[[NSSet setWithArray:mut] allObjects]] image:_thread.groupModel.groupImage groupId:_thread.groupModel.groupId];
[self performSegueWithIdentifier:kUnwindToMessagesViewSegue sender:self];
}
-(GroupModel*)makeGroup {
-(TSGroupModel*)makeGroup {
NSString* title = _nameGroupTextField.text;
UIImage* img = _thread.groupModel.groupImage;
NSMutableArray* mut = [[NSMutableArray alloc]init];
@ -150,7 +150,7 @@ static NSString* const kUnwindToMessagesViewSegue = @"UnwindToMessagesViewSegue"
[mut addObject:[SignalKeyingStorage.localNumber toE164]];
NSData* groupId = [SecurityUtils generateRandomBytes:16];
return [[GroupModel alloc] initWithTitle:title memberIds:mut image:img groupId:groupId];
return [[TSGroupModel alloc] initWithTitle:title memberIds:mut image:img groupId:groupId];
}
-(IBAction)addGroupPhoto:(id)sender

View File

@ -1,13 +0,0 @@
//
// NotificationPreviewViewController.h
// Signal
//
// Created by Dylan Bourgeois on 09/12/14.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface NotificationPreviewViewController : UITableViewController
@end

View File

@ -1,118 +0,0 @@
//
// NotificationPreviewViewController.m
// Signal
//
// Created by Dylan Bourgeois on 09/12/14.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
//
#import "NotificationPreviewViewController.h"
#import "UIUtil.h"
#import "PreferencesUtil.h"
#import "Environment.h"
@interface NotificationPreviewViewController ()
@property (nonatomic) NSIndexPath *defaultSelectedIndexPath;
@end
@implementation NotificationPreviewViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.title = @"Notification Style";
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
self.clearsSelectionOnViewWillAppear = NO;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSInteger currentSetting = (NSInteger)[Environment.preferences notificationPreviewType];
_defaultSelectedIndexPath = [NSIndexPath indexPathForRow:0 inSection:currentSetting + 1];
[self selectRowAtIndexPath:_defaultSelectedIndexPath];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 4;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
[header.textLabel setTextColor:[UIColor blackColor]];
if (SYSTEM_VERSION_GREATER_THAN(_iOS_8_0_2)) {
[header.textLabel setFont:[UIFont ows_thinFontWithSize:14.0f]];
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (_defaultSelectedIndexPath != nil && ![_defaultSelectedIndexPath isEqual:indexPath]) {
[self deselectRowAtIndexPath:_defaultSelectedIndexPath];
_defaultSelectedIndexPath = nil;
}
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
switch (indexPath.section) {
case 1:
[Environment.preferences setNotificationPreviewType:NotificationNoNameNoPreview];
break;
case 2:
[Environment.preferences setNotificationPreviewType:NotificationNameNoPreview];
break;
case 3:
[Environment.preferences setNotificationPreviewType:NotificationNamePreview];
break;
default:
break;
}
}
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryNone;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0) {
return 120.0f;
} else {
return 80.0f;
}
}
#pragma mark - Cell selection proxy
- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView.delegate tableView:self.tableView didSelectRowAtIndexPath:indexPath];
}
- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView.delegate tableView:self.tableView didDeselectRowAtIndexPath:indexPath];
}
@end

View File

@ -0,0 +1,13 @@
//
// PrivacySettingsTableViewController.h
// Signal
//
// Created by Dylan Bourgeois on 05/01/15.
// Copyright (c) 2015 Open Whisper Systems. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface PrivacySettingsTableViewController : UITableViewController
@end

View File

@ -0,0 +1,202 @@
//
// PrivacySettingsTableViewController.m
// Signal
//
// Created by Dylan Bourgeois on 05/01/15.
// Copyright (c) 2015 Open Whisper Systems. All rights reserved.
//
#import "PrivacySettingsTableViewController.h"
#import <25519/Curve25519.h>
#import "DJWActionSheet.h"
#import "Environment.h"
#import "PreferencesUtil.h"
#import "TSFingerprintGenerator.h"
#import "TSStorageManager+IdentityKeyStore.h"
#import "UIUtil.h"
@interface PrivacySettingsTableViewController ()
@property (nonatomic, strong) UITableViewCell * enableScreenSecurityCell;
@property (nonatomic, strong) UITableViewCell * clearHistoryLogCell;
@property (nonatomic, strong) UITableViewCell * fingerprintCell;
@property (nonatomic, strong) UITableViewCell * shareFingerprintCell;
@property (nonatomic, strong) UISwitch * enableScreenSecuritySwitch;
@property (nonatomic, strong) UILabel * fingerprintLabel;
@property (nonatomic, strong) NSTimer * copiedTimer;
@end
@implementation PrivacySettingsTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero];
}
-(instancetype)init
{
return [super initWithStyle:UITableViewStyleGrouped];
}
-(void)loadView
{
[super loadView];
self.title = @"Privacy";
//Enable Screen Security Cell
self.enableScreenSecurityCell = [[UITableViewCell alloc]init];
self.enableScreenSecurityCell.textLabel.text = @"Enable Screen Security";
self.enableScreenSecuritySwitch = [[UISwitch alloc]initWithFrame:CGRectZero];
self.enableScreenSecurityCell.accessoryView = self.enableScreenSecuritySwitch;
self.enableScreenSecurityCell.userInteractionEnabled = YES;
//Clear History Log Cell
self.clearHistoryLogCell = [[UITableViewCell alloc]init];
self.clearHistoryLogCell.textLabel.text = @"Clear History Logs";
self.clearHistoryLogCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//Fingerprint Cell
self.fingerprintCell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Identifier"];
self.fingerprintCell.textLabel.text = @"Fingerprint";
self.fingerprintCell.detailTextLabel.text = @"Tap to copy";
self.fingerprintCell.detailTextLabel.textColor = [UIColor lightGrayColor];
self.fingerprintLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 150, 25)];
self.fingerprintLabel.textColor = [UIColor lightGrayColor];
self.fingerprintLabel.font = [UIFont ows_lightFontWithSize:16.0f];
self.fingerprintLabel.lineBreakMode = NSLineBreakByTruncatingMiddle;
self.fingerprintCell.accessoryView = self.fingerprintLabel;
[self setValues];
[self subsribeToEvents];
}
-(void)subsribeToEvents
{
[self.enableScreenSecuritySwitch addTarget:self action:@selector(didToggleSwitch:) forControlEvents:UIControlEventTouchUpInside];
}
-(void)setValues
{
[self.enableScreenSecuritySwitch setOn:[Environment.preferences screenSecurityIsEnabled]];
self.fingerprintLabel.text = [TSFingerprintGenerator getFingerprintForDisplay:[[TSStorageManager sharedManager]identityKeyPair].publicKey];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 3;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
switch (section) {
case 0: return 1;
case 1: return 1;
case 2: return 1;
default: return 0;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.section) {
case 0: return self.enableScreenSecurityCell;
case 1: return self.clearHistoryLogCell;
case 2:
switch (indexPath.row) {
case 0: return self.fingerprintCell;
case 1: return self.shareFingerprintCell;
}
}
return nil;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
switch (section) {
case 0: return @"Screen Security";
case 1: return @"History Log";
case 2: return @"Fingerprint";
default: return nil;
}
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
switch (indexPath.section) {
case 1:
{
[DJWActionSheet showInView:self.tabBarController.view
withTitle:@"Are you sure you want to delete all your history (messages, attachments, call history ...) ? This action cannot be reverted."
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"I'm sure."
otherButtonTitles:@[]
tapBlock:^(DJWActionSheet *actionSheet, NSInteger tappedButtonIndex) {
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
if (tappedButtonIndex == actionSheet.cancelButtonIndex) {
NSLog(@"User Cancelled");
} else if (tappedButtonIndex == actionSheet.destructiveButtonIndex){
[[TSStorageManager sharedManager] deleteThreadsAndMessages];
} else {
NSLog(@"The user tapped button at index: %li", (long)tappedButtonIndex);
}
}];
break;
}
case 2:
switch (indexPath.row) {
case 0:
{
//Timer to change label to copied (NSTextAttachment checkmark)
if (self.copiedTimer == nil) {
self.copiedTimer = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(endTimer:) userInfo:nil repeats:NO];
self.fingerprintCell.detailTextLabel.text = @"Copied !";
} else {
self.fingerprintCell.detailTextLabel.text = @"Tap to copy";
}
[[UIPasteboard generalPasteboard] setString:self.fingerprintLabel.text];
break;
}
default:
break;
}
break;
default:
break;
}
}
#pragma mark - Toggle
-(void)didToggleSwitch:(UISwitch*)sender
{
[Environment.preferences setScreenSecurity:self.enableScreenSecuritySwitch.isOn];
}
#pragma mark - Timer
-(void)endTimer:(id)sender
{
self.fingerprintCell.detailTextLabel.text = @"Tap to copy";
[self.copiedTimer invalidate];
self.copiedTimer = nil;
}
@end

View File

@ -11,5 +11,6 @@
@interface SettingsTableViewController : UITableViewController
@property IBOutlet UILabel *registeredNumber;
@property IBOutlet UILabel *networkStatusLabel;
@end

View File

@ -14,10 +14,13 @@
#import "TSStorageManager.h"
#import "Environment.h"
#import "PreferencesUtil.h"
#import "UIUtil.h"
#import <Social/Social.h>
#import "RPServerRequestsManager.h"
#import "TSSocketManager.h"
#import <PastelogKit/Pastelog.h>
#import "Cryptography.h"
@ -27,29 +30,39 @@
#import "TSStorageManager.h"
#import "TSStorageManager+IdentityKeyStore.h"
#import "PrivacySettingsTableViewController.h"
#import "MediaSettingsTableViewController.h"
#import "AdvancedSettingsTableViewController.h"
#import "AboutTableViewController.h"
#define kProfileCellHeight 87.0f
#define kStandardCellHeight 60.0f
#define kStandardCellHeight 44.0f
#define kNumberOfSections 2
#define kNumberOfSections 4
#define kMessageDisplayCellRow 1
#define kImageQualitySettingRow 2
#define kClearHistoryLogCellRow 3
#define kShareFingerpintCellRow 4
#define kSendDebugLogCellRow 6
#define kUnregisterCell 7
#define kRegisteredNumberRow 0
#define kPrivacyRow 0
#define kMediaRow 1
#define kAdvancedRow 2
#define kAboutRow 3
#define kNetworkRow 0
#define kUnregisterRow 0
typedef enum {
kProfileRows = 1,
kSecurityRows = 8,
kRegisteredRows = 1,
kGeneralRows = 4,
kNetworkStatusRows = 1,
kUnregisterRows = 1,
} kRowsForSection;
typedef enum {
kProfileSection,
kSecuritySection,
kRegisteredNumberSection,
kGeneralSection,
kNetworkStatusSection,
kUnregisterSection,
} kSection;
@interface SettingsTableViewController ()
@interface SettingsTableViewController () <UIAlertViewDelegate>
@end
@ -59,13 +72,16 @@ typedef enum {
[super viewDidLoad];
self.tableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectZero];
self.registeredNumber.text = [TSAccountManager registeredNumber];
[self initializeObserver];
[TSSocketManager sendNotification];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:SocketOpenedNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:SocketClosedNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:SocketConnectingNotification object:nil];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
@ -75,131 +91,101 @@ typedef enum {
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
switch (section) {
case kProfileSection:
return kProfileRows;
break;
case kSecuritySection:
return kSecurityRows;
break;
case kRegisteredNumberSection:
return kRegisteredRows;
case kGeneralSection:
return kGeneralRows;
case kNetworkStatusSection:
return kNetworkStatusRows;
case kUnregisterSection:
return kUnregisterRows;
default:
return 0;
break;
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.section) {
case kProfileSection:
case kRegisteredNumberSection:
return kProfileCellHeight;
break;
default:
return kStandardCellHeight;
break;
}
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section==kSecuritySection)
{
switch (indexPath.row) {
case kClearHistoryLogCellRow:
{
//Present more info
[DJWActionSheet showInView:self.tabBarController.view
withTitle:@"Are you sure you want to delete all your history (messages, attachments, call history ...)? This action cannot be reverted."
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"I'm sure."
otherButtonTitles:@[]
tapBlock:^(DJWActionSheet *actionSheet, NSInteger tappedButtonIndex) {
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
if (tappedButtonIndex == actionSheet.cancelButtonIndex) {
NSLog(@"User Cancelled");
} else if (tappedButtonIndex == actionSheet.destructiveButtonIndex){
[[TSStorageManager sharedManager] deleteThreadsAndMessages];
} else {
NSLog(@"The user tapped button at index: %li", (long)tappedButtonIndex);
}
}];
break;
[tableView deselectRowAtIndexPath:indexPath animated:YES];
switch (indexPath.section) {
case kGeneralSection:
{
switch (indexPath.row) {
case kPrivacyRow:
{
PrivacySettingsTableViewController * vc = [[PrivacySettingsTableViewController alloc]init];
NSAssert(self.navigationController != nil, @"Navigation controller must not be nil");
NSAssert(vc != nil, @"Privacy Settings View Controller must not be nil");
[self.navigationController pushViewController:vc animated:YES];
break;
}
case kMediaRow:
{
MediaSettingsTableViewController * vc = [[MediaSettingsTableViewController alloc]init];
NSAssert(self.navigationController != nil, @"Navigation controller must not be nil");
NSAssert(vc != nil, @"Media Settings View Controller must not be nil");
[self.navigationController pushViewController:vc animated:YES];
break;
}
case kAdvancedRow:
{
AdvancedSettingsTableViewController * vc = [[AdvancedSettingsTableViewController alloc]init];
NSAssert(self.navigationController != nil, @"Navigation controller must not be nil");
NSAssert(vc != nil, @"Advanced Settings View Controller must not be nil");
[self.navigationController pushViewController:vc animated:YES];
break;
}
case kAboutRow:
{
AboutTableViewController * vc = [[AboutTableViewController alloc]init];
NSAssert(self.navigationController != nil, @"Navigation controller must not be nil");
NSAssert(vc != nil, @"About View Controller must not be nil");
[self.navigationController pushViewController:vc animated:YES];
break;
}
default:
break;
}
case kImageQualitySettingRow:
{
[DJWActionSheet showInView:self.tabBarController.view
withTitle:nil
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@[@"Uncompressed", @"High", @"Medium", @"Low"]
tapBlock:^(DJWActionSheet *actionSheet, NSInteger tappedButtonIndex) {
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
if (tappedButtonIndex == actionSheet.cancelButtonIndex) {
DDLogVerbose(@"User Cancelled <%s>", __PRETTY_FUNCTION__);
} else if (tappedButtonIndex == actionSheet.destructiveButtonIndex) {
DDLogVerbose(@"Destructive button tapped <%s>", __PRETTY_FUNCTION__);
}else {
switch (tappedButtonIndex) {
case 0:
[Environment.preferences setImageUploadQuality:TSImageQualityUncropped];
break;
case 1:
[Environment.preferences setImageUploadQuality:TSImageQualityHigh];
break;
case 2:
[Environment.preferences setImageUploadQuality:TSImageQualityMedium];
break;
case 3:
[Environment.preferences setImageUploadQuality:TSImageQualityLow];
break;
default:
DDLogWarn(@"Illegal Image Quality Tapped in <%s>", __PRETTY_FUNCTION__);
break;
}
SettingsTableViewCell * cell = (SettingsTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
[cell updateImageQualityLabel];
}
}];
break;
}
case kShareFingerpintCellRow: {
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
SLComposeViewController *tweetSheet = [SLComposeViewController
composeViewControllerForServiceType:SLServiceTypeTwitter];
NSData *myPublicKey = [[TSStorageManager sharedManager] identityKeyPair].publicKey;
NSString * tweetString = [NSString stringWithFormat:@"Verifying myself on Signal : %@", [self getFingerprintForTweet:myPublicKey]];
[tweetSheet setInitialText:tweetString];
[tweetSheet addURL:[NSURL URLWithString:@"https://whispersystems.org/signal/install/"]];
tweetSheet.completionHandler = ^(SLComposeViewControllerResult result) {
if (result == SLComposeViewControllerResultCancelled) {
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}
};
[self presentViewController:tweetSheet animated:YES completion:nil];
}
break;
}
case kSendDebugLogCellRow:
[Pastelog submitLogs];
break;
case kUnregisterCell:
[TSAccountManager unregisterTextSecureWithSuccess:^{
[[TSStorageManager sharedManager] wipe];
exit(0);
} failure:^(NSError *error) {
SignalAlertView(@"Failed to unregister", @"");
}];
break;
default:
break;
break;
}
case kNetworkStatusSection:
{
break;
}
case kUnregisterSection:
{
[TSAccountManager unregisterTextSecureWithSuccess:^{
[[TSStorageManager sharedManager] wipe];
exit(0);
} failure:^(NSError *error) {
SignalAlertView(@"Failed to unregister", @"");
}];
break;
}
default:
break;
}
}
-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == kNetworkStatusSection) {
UIAlertView * info = [[UIAlertView alloc]initWithTitle:@"Network Status" message:@"You can check your network status by looking at the colored bar above your inbox." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[info show];
}
}
@ -224,5 +210,29 @@ typedef enum {
return formattedFingerprint;
}
#pragma mark - Socket Status Notifications
-(void)initializeObserver
{
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(socketDidOpen) name:SocketOpenedNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(socketDidClose) name:SocketClosedNotification object:nil];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(socketIsConnecting) name:SocketConnectingNotification object:nil];
}
-(void)socketDidOpen {
self.networkStatusLabel.text = @"Connected";
self.networkStatusLabel.textColor = [UIColor ows_greenColor];
}
-(void)socketDidClose {
self.networkStatusLabel.text = @"Offline";
self.networkStatusLabel.textColor = [UIColor ows_redColor];
}
-(void)socketIsConnecting {
self.networkStatusLabel.text = @"Connecting";
self.networkStatusLabel.textColor = [UIColor ows_yellowColor];
}
@end

View File

@ -8,7 +8,7 @@
#import <UIKit/UIKit.h>
#import "TSGroupThread.h"
#import "GroupModel.h"
#import "TSGroupModel.h"
@interface ShowGroupMembersViewController : UITableViewController <UITableViewDelegate, UITabBarDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate>

View File

@ -16,7 +16,7 @@
#import "Contact.h"
#import "GroupModel.h"
#import "TSGroupModel.h"
#import "SecurityUtils.h"
#import "SignalKeyingStorage.h"

View File

@ -2,7 +2,7 @@
// GroupModel.h
// Signal
//
// Created by Dylan Bourgeois on 13/11/14.
// Created by Frederic Jacobs.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
//
@ -11,17 +11,17 @@
@interface GroupModel : TSYapDatabaseObject
@interface TSGroupModel : TSYapDatabaseObject
@property (nonatomic, strong) NSMutableArray *groupMemberIds;
@property (nonatomic, strong) UIImage *groupImage;
@property (nonatomic, strong) NSString *groupName;
@property (nonatomic, strong) NSData* groupId;
-(instancetype)initWithTitle:(NSString*)title memberIds:(NSMutableArray*)members image:(UIImage*)image groupId:(NSData*)groupId;
- (instancetype)initWithTitle:(NSString*)title memberIds:(NSMutableArray*)members image:(UIImage*)image groupId:(NSData*)groupId;
- (BOOL)isEqual:(id)other;
- (BOOL)isEqualToGroupModel:(GroupModel *)model;
- (NSString*) getInfoStringAboutUpdateTo:(GroupModel*)model;
- (BOOL)isEqualToGroupModel:(TSGroupModel *)model;
- (NSString*) getInfoStringAboutUpdateTo:(TSGroupModel*)model;
@end

View File

@ -2,20 +2,20 @@
// GroupModel.m
// Signal
//
// Created by Dylan Bourgeois on 13/11/14.
// Created by Frederic Jacobs on 13/11/14.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
//
#import "GroupModel.h"
#import "TSGroupModel.h"
@implementation GroupModel
@implementation TSGroupModel
-(instancetype)initWithTitle:(NSString*)title memberIds:(NSMutableArray*)memberIds image:(UIImage*)image groupId:(NSData *)groupId{
_groupName=title;
_groupName = title;
_groupMemberIds = [memberIds copy];
_groupImage = image;
_groupId = groupId;
_groupImage = image;
_groupId = groupId;
return self;
}
@ -29,7 +29,7 @@
return [self isEqualToGroupModel:other];
}
- (BOOL)isEqualToGroupModel:(GroupModel *)other {
- (BOOL)isEqualToGroupModel:(TSGroupModel *)other {
if (self == other)
return YES;
if(![_groupId isEqualToData:other.groupId] ) {
@ -49,7 +49,7 @@
return YES;
}
- (NSString*) getInfoStringAboutUpdateTo:(GroupModel*)newModel {
- (NSString*) getInfoStringAboutUpdateTo:(TSGroupModel*)newModel {
NSString* updatedGroupInfoString = @"Group updated. ";
if (self == newModel) {
return updatedGroupInfoString;
@ -81,6 +81,4 @@
return updatedGroupInfoString;
}
@end

View File

@ -10,12 +10,12 @@
#import <UIKit/UIKit.h>
#import "Contact.h"
#import "GroupModel.h"
#import "TSGroupModel.h"
@interface SignalsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, TableViewCellDelegate>
@property (nonatomic) NSString *contactIdentifierFromCompose;
@property (nonatomic) GroupModel *groupFromCompose;
@property (nonatomic) TSGroupModel *groupFromCompose;
@property (nonatomic, retain) IBOutlet UITableView *tableView;
@property (nonatomic, retain) IBOutlet UISegmentedControl *inboxArchiveSwitch;