Merge branch 'charlesmchen/groupsV2designAgainV2' into release/3.8.0

This commit is contained in:
Matthew Chen 2020-04-23 11:00:27 -03:00
commit 7fbc9cdf04
43 changed files with 1096 additions and 450 deletions

View File

@ -628,7 +628,6 @@
8821334E2304E72700353626 /* NonContactTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8821334D2304E72700353626 /* NonContactTableViewCell.swift */; };
8827004C232071C500F01C46 /* OWSWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8827004B232071C500F01C46 /* OWSWindow.swift */; };
8827004E23208A1900F01C46 /* AppearanceSettingsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8827004D23208A1900F01C46 /* AppearanceSettingsTableViewController.swift */; };
882E0B7723C7BD1900E8CE49 /* NotificationServiceExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 885AC56423AB42430077705E /* NotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
8835DDF9230CEDC300DC6B66 /* RecipientPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8835DDF8230CEDC300DC6B66 /* RecipientPickerViewController.m */; };
8835DDFD230CEE8900DC6B66 /* RecipientPickerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8835DDFC230CEE8900DC6B66 /* RecipientPickerDelegate.swift */; };
8835DE01230DBF7E00DC6B66 /* ComposeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8835DE00230DBF7E00DC6B66 /* ComposeViewController.swift */; };
@ -642,7 +641,6 @@
8855DF87238F1E0C0066D96F /* EmojiReactorsTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8855DF86238F1E0C0066D96F /* EmojiReactorsTableView.swift */; };
8855DF89238F2E690066D96F /* EmojiCountsCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8855DF88238F2E690066D96F /* EmojiCountsCollectionView.swift */; };
88594E5A2335B08000390B19 /* AudioMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88594E592335B08000390B19 /* AudioMessageView.swift */; };
885AC56723AB42430077705E /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 885AC56623AB42430077705E /* NotificationService.swift */; };
885C35502370DFD50004BA35 /* OWSSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 885C354F2370DFD50004BA35 /* OWSSyncManager.swift */; };
8861DED02445349C00BB4145 /* LinkingTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8861DECF2445349B00BB4145 /* LinkingTextView.swift */; };
886F08A7234958970085C27F /* InputAccessoryViewPlaceholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 886F08A6234958970085C27F /* InputAccessoryViewPlaceholder.swift */; };
@ -658,13 +656,11 @@
8889007523DBD0B400F40186 /* ProfileNameReminder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8889007423DBD0B400F40186 /* ProfileNameReminder.swift */; };
888C828223D795FA0059464B /* pinCreationFail.json in Resources */ = {isa = PBXBuildFile; fileRef = 888C827F23D795F90059464B /* pinCreationFail.json */; };
888C828323D795FA0059464B /* pinCreationInProgress.json in Resources */ = {isa = PBXBuildFile; fileRef = 888C828023D795FA0059464B /* pinCreationInProgress.json */; };
888F188623AC5A9E000780E9 /* SignalMessaging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 453518921FC63DBF00210559 /* SignalMessaging.framework */; };
88905E9E229CCA96004E4234 /* ExpirationNagView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88905E9D229CCA96004E4234 /* ExpirationNagView.swift */; };
88A357B923639384009D6B9A /* MemberActionSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A357B823639384009D6B9A /* MemberActionSheet.swift */; };
88A505F423DA16E10005C012 /* ExperienceUpgradeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A505F323DA16E10005C012 /* ExperienceUpgradeManager.swift */; };
88A505FA23DBA1360005C012 /* IntroducingPINs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A505F923DBA1360005C012 /* IntroducingPINs.swift */; };
88A505FC23DBAE4F0005C012 /* Reactions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A505FB23DBAE4F0005C012 /* Reactions.swift */; };
88A595E323AB48E80029E835 /* NotificationServiceExtensionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A595E223AB48E80029E835 /* NotificationServiceExtensionContext.swift */; };
88A9419524099F7E000E9700 /* attachment_dark.json in Resources */ = {isa = PBXBuildFile; fileRef = 88A9419424099F7E000E9700 /* attachment_dark.json */; };
88A9419724099F85000E9700 /* attachment_light.json in Resources */ = {isa = PBXBuildFile; fileRef = 88A9419624099F85000E9700 /* attachment_light.json */; };
88A941992409A391000E9700 /* LottieToggleButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A941982409A391000E9700 /* LottieToggleButton.swift */; };
@ -734,7 +730,6 @@
D221A0E8169DFFC500537ABF /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D221A0E7169DFFC500537ABF /* AVFoundation.framework */; };
D24B5BD5169F568C00681372 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D24B5BD4169F568C00681372 /* AudioToolbox.framework */; };
D2AEACDC16C426DA00C364C0 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2AEACDB16C426DA00C364C0 /* CFNetwork.framework */; };
DA2448EB739FFD5100E94059 /* Pods_NotificationServiceExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EFF2FAAECC00C2F8262444B8 /* Pods_NotificationServiceExtension.framework */; };
E1368CBE18A1C36B00109378 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9EB5ABC1884C002007CBB57 /* MessageUI.framework */; };
FC3BD9881A30A790005B96BB /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC3BD9871A30A790005B96BB /* Social.framework */; };
FCB11D8C1A129A76002F93FB /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCB11D8B1A129A76002F93FB /* CoreMedia.framework */; };
@ -783,20 +778,6 @@
remoteGlobalIDString = D221A088169C9E5E00537ABF;
remoteInfo = Signal;
};
885AC56923AB42430077705E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = D221A080169C9E5E00537ABF /* Project object */;
proxyType = 1;
remoteGlobalIDString = 885AC56323AB42430077705E;
remoteInfo = NotificationServiceExtension;
};
888F188423AC5A93000780E9 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = D221A080169C9E5E00537ABF /* Project object */;
proxyType = 1;
remoteGlobalIDString = 453518911FC63DBF00210559;
remoteInfo = SignalMessaging;
};
B6AFCEBA19A93DA60098CFCB /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = D221A080169C9E5E00537ABF /* Project object */;
@ -813,7 +794,6 @@
dstPath = "";
dstSubfolderSpec = 13;
files = (
882E0B7723C7BD1900E8CE49 /* NotificationServiceExtension.appex in Embed App Extensions */,
453518721FC635DD00210559 /* SignalShareExtension.appex in Embed App Extensions */,
);
name = "Embed App Extensions";
@ -1574,7 +1554,6 @@
8855DF86238F1E0C0066D96F /* EmojiReactorsTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiReactorsTableView.swift; sourceTree = "<group>"; };
8855DF88238F2E690066D96F /* EmojiCountsCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiCountsCollectionView.swift; sourceTree = "<group>"; };
88594E592335B08000390B19 /* AudioMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioMessageView.swift; sourceTree = "<group>"; };
885AC56423AB42430077705E /* NotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
885AC56623AB42430077705E /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; };
885AC56823AB42430077705E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
885AC57023AB428C0077705E /* NotificationServiceExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NotificationServiceExtension.entitlements; sourceTree = "<group>"; };
@ -1757,15 +1736,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
885AC56123AB42430077705E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
888F188623AC5A9E000780E9 /* SignalMessaging.framework in Frameworks */,
DA2448EB739FFD5100E94059 /* Pods_NotificationServiceExtension.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
D221A086169C9E5E00537ABF /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@ -3290,7 +3260,6 @@
453518681FC635DD00210559 /* SignalShareExtension.appex */,
453518921FC63DBF00210559 /* SignalMessaging.framework */,
4C10B1C323176D250099396B /* SignalPerformanceTests.xctest */,
885AC56423AB42430077705E /* NotificationServiceExtension.appex */,
);
name = Products;
sourceTree = "<group>";
@ -3519,25 +3488,6 @@
productReference = 4C10B1C323176D250099396B /* SignalPerformanceTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
885AC56323AB42430077705E /* NotificationServiceExtension */ = {
isa = PBXNativeTarget;
buildConfigurationList = 885AC56F23AB42430077705E /* Build configuration list for PBXNativeTarget "NotificationServiceExtension" */;
buildPhases = (
DD22029638F7E2469D6F373D /* [CP] Check Pods Manifest.lock */,
885AC56023AB42430077705E /* Sources */,
885AC56123AB42430077705E /* Frameworks */,
885AC56223AB42430077705E /* Resources */,
);
buildRules = (
);
dependencies = (
888F188523AC5A93000780E9 /* PBXTargetDependency */,
);
name = NotificationServiceExtension;
productName = NotificationServiceExtension;
productReference = 885AC56423AB42430077705E /* NotificationServiceExtension.appex */;
productType = "com.apple.product-type.app-extension";
};
D221A088169C9E5E00537ABF /* Signal */ = {
isa = PBXNativeTarget;
buildConfigurationList = D221A0BC169C9E5F00537ABF /* Build configuration list for PBXNativeTarget "Signal" */;
@ -3557,7 +3507,6 @@
dependencies = (
453518711FC635DD00210559 /* PBXTargetDependency */,
453518981FC63DBF00210559 /* PBXTargetDependency */,
885AC56A23AB42430077705E /* PBXTargetDependency */,
);
name = Signal;
productName = RedPhone;
@ -3622,11 +3571,6 @@
LastSwiftMigration = 1020;
ProvisioningStyle = Automatic;
};
885AC56323AB42430077705E = {
CreatedOnToolsVersion = 11.2.1;
DevelopmentTeam = U68MSDN6DR;
ProvisioningStyle = Automatic;
};
D221A088169C9E5E00537ABF = {
DevelopmentTeam = U68MSDN6DR;
LastSwiftMigration = 1020;
@ -3753,7 +3697,6 @@
453518671FC635DD00210559 /* SignalShareExtension */,
453518911FC63DBF00210559 /* SignalMessaging */,
4C10B17F23176D250099396B /* SignalPerformanceTests */,
885AC56323AB42430077705E /* NotificationServiceExtension */,
);
};
/* End PBXProject section */
@ -3791,13 +3734,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
885AC56223AB42430077705E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
D221A087169C9E5E00537ABF /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@ -4229,28 +4165,6 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SignalTests/Pods-SignalTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
DD22029638F7E2469D6F373D /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-NotificationServiceExtension-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
F4C416F20E3CB0B25DC10C56 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@ -4500,15 +4414,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
885AC56023AB42430077705E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
88A595E323AB48E80029E835 /* NotificationServiceExtensionContext.swift in Sources */,
885AC56723AB42430077705E /* NotificationService.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
D221A085169C9E5E00537ABF /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@ -4869,16 +4774,6 @@
target = D221A088169C9E5E00537ABF /* Signal */;
targetProxy = 4C10B18323176D250099396B /* PBXContainerItemProxy */;
};
885AC56A23AB42430077705E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 885AC56323AB42430077705E /* NotificationServiceExtension */;
targetProxy = 885AC56923AB42430077705E /* PBXContainerItemProxy */;
};
888F188523AC5A93000780E9 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 453518911FC63DBF00210559 /* SignalMessaging */;
targetProxy = 888F188423AC5A93000780E9 /* PBXContainerItemProxy */;
};
B6AFCEBB19A93DA60098CFCB /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = D221A088169C9E5E00537ABF /* Signal */;
@ -5735,185 +5630,6 @@
};
name = "Testable Release";
};
885AC56C23AB42430077705E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 981DAA2DEFCE9F8757D7C71A /* Pods-NotificationServiceExtension.debug.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = NotificationServiceExtension/NotificationServiceExtension.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = U68MSDN6DR;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
INFOPLIST_FILE = NotificationServiceExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.whispersystems.signal.NotificationServiceExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
885AC56D23AB42430077705E /* App Store Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = DCFF39FE94636EAFEAF06C70 /* Pods-NotificationServiceExtension.app store release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = "NotificationServiceExtension/NotificationServiceExtension-AppStore.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Manual;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = U68MSDN6DR;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = NotificationServiceExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.whispersystems.signal.NotificationServiceExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = "App Store Release";
};
885AC56E23AB42430077705E /* Testable Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 80A8593EDA963AA130D319BA /* Pods-NotificationServiceExtension.testable release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = NotificationServiceExtension/NotificationServiceExtension.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = U68MSDN6DR;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INFOPLIST_FILE = NotificationServiceExtension/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.3;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = org.whispersystems.signal.NotificationServiceExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = "Testable Release";
};
D221A0BA169C9E5F00537ABF /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@ -6360,16 +6076,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "App Store Release";
};
885AC56F23AB42430077705E /* Build configuration list for PBXNativeTarget "NotificationServiceExtension" */ = {
isa = XCConfigurationList;
buildConfigurations = (
885AC56C23AB42430077705E /* Debug */,
885AC56D23AB42430077705E /* App Store Release */,
885AC56E23AB42430077705E /* Testable Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "App Store Release";
};
D221A083169C9E5E00537ABF /* Build configuration list for PBXProject "Signal" */ = {
isa = XCConfigurationList;
buildConfigurations = (

View File

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "add-members-256.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,79 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 51.200195 51.200012 cm
0.000000 0.000000 0.000000 scn
153.599991 85.759979 m
87.040001 85.759979 l
87.040001 153.599976 l
67.839996 153.599976 l
67.839996 85.759979 l
0.000000 85.759979 l
0.000000 66.559975 l
67.839996 66.559975 l
67.839996 -0.000015 l
87.040001 -0.000015 l
87.040001 66.559975 l
153.599991 66.559975 l
153.599991 85.759979 l
h
f
n
Q
endstream
endobj
3 0 obj
418
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 256.000000 256.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Type /Catalog
/Pages 5 0 R
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000000508 00000 n
0000000530 00000 n
0000000705 00000 n
0000000779 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
838
%%EOF

View File

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "view-all-256.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,73 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 44.799805 62.720032 cm
0.000000 0.000000 0.000000 scn
83.200005 0.000023 m
0.000000 84.480026 l
12.800001 97.280029 l
83.200005 28.160034 l
153.600006 97.280029 l
166.400009 84.480026 l
83.200005 0.000023 l
h
f
n
Q
endstream
endobj
3 0 obj
282
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 256.000000 256.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Type /Catalog
/Pages 5 0 R
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000000372 00000 n
0000000394 00000 n
0000000569 00000 n
0000000643 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
702
%%EOF

View File

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "invite-outline-256.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,122 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 51.200012 64.000732 cm
0.000000 0.000000 0.000000 scn
108.857605 57.151955 m
116.088005 63.640022 121.179565 72.169281 123.459435 81.612579 c
125.739304 91.055878 125.100166 100.968697 121.626465 110.041023 c
118.152771 119.113342 112.008034 126.918129 104.004311 132.423950 c
96.000587 137.929764 86.514610 140.877441 76.800003 140.877441 c
67.085388 140.877441 57.599422 137.929764 49.595699 132.423950 c
41.591972 126.918129 35.447239 119.113342 31.973541 110.041023 c
28.499846 100.968697 27.860695 91.055878 30.140564 81.612579 c
32.420433 72.169281 37.512001 63.640022 44.742401 57.151955 c
32.387920 55.581207 21.029509 49.561310 12.793732 40.219337 c
4.557954 30.877373 0.009520 18.853874 0.000000 6.399948 c
0.000000 -0.000046 l
9.600000 -0.000046 l
9.600000 6.399948 l
9.613549 17.428795 14.000745 28.002052 21.799322 35.800636 c
29.597900 43.599213 40.171154 47.986404 51.200001 47.999954 c
102.400002 47.999954 l
113.428848 47.986404 124.002098 43.599213 131.800674 35.800636 c
139.599258 28.002052 143.986450 17.428795 144.000000 6.399948 c
144.000000 -0.000046 l
153.600006 -0.000046 l
153.600006 6.399948 l
153.590485 18.853874 149.042038 30.877373 140.806259 40.219337 c
132.570480 49.561310 121.212090 55.581207 108.857605 57.151955 c
h
76.800003 54.399956 m
69.205200 54.399956 61.780949 56.652077 55.466103 60.871529 c
49.151253 65.090973 44.229435 71.088226 41.323029 78.104912 c
38.416626 85.121597 37.656178 92.842552 39.137848 100.291428 c
40.619522 107.740295 44.276764 114.582520 49.647102 119.952858 c
55.017437 125.323196 61.859661 128.980438 69.308533 130.462112 c
76.757408 131.943787 84.478363 131.183334 91.495049 128.276932 c
98.511726 125.370522 104.508987 120.448700 108.728432 114.133858 c
112.947876 107.819008 115.200005 100.394760 115.200005 92.799957 c
115.200005 82.615646 111.154305 72.848450 103.952904 65.647049 c
96.751511 58.445656 86.984314 54.399956 76.800003 54.399956 c
h
f
n
Q
q
1.000000 0.000000 -0.000000 1.000000 192.000000 143.359863 cm
0.000000 0.000000 0.000000 scn
13.918750 13.919775 m
13.918750 0.000088 l
21.918749 0.000088 l
21.918749 13.919775 l
35.840000 13.919775 l
35.840000 21.919777 l
21.918749 21.919777 l
21.918749 35.840088 l
13.918750 35.840088 l
13.918750 21.919777 l
0.000000 21.919777 l
0.000000 13.919775 l
13.918750 13.919775 l
h
f*
n
Q
endstream
endobj
3 0 obj
2380
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 255.999939 256.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Type /Catalog
/Pages 5 0 R
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002470 00000 n
0000002493 00000 n
0000002668 00000 n
0000002742 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2801
%%EOF

View File

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "invite-outline-40.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,122 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 8.000000 10.000000 cm
0.000000 0.000000 0.000000 scn
17.009001 8.930100 m
18.138750 9.943861 18.934307 11.276557 19.290537 12.752072 c
19.646767 14.227588 19.546900 15.776465 19.004135 17.194016 c
18.461370 18.611567 17.501255 19.831064 16.250673 20.691349 c
15.000092 21.551632 13.517908 22.012207 12.000000 22.012207 c
10.482092 22.012207 8.999910 21.551632 7.749328 20.691349 c
6.498745 19.831064 5.538631 18.611567 4.995866 17.194016 c
4.453101 15.776465 4.353233 14.227588 4.709463 12.752072 c
5.065693 11.276557 5.861250 9.943861 6.991000 8.930100 c
5.060613 8.684671 3.285861 7.744061 1.999021 6.284379 c
0.712180 4.824696 0.001487 2.946026 0.000000 1.000099 c
0.000000 0.000099 l
1.500000 0.000099 l
1.500000 1.000099 l
1.502117 2.723356 2.187616 4.375427 3.406144 5.593956 c
4.624672 6.812484 6.276743 7.497983 8.000000 7.500100 c
16.000000 7.500100 l
17.723257 7.497983 19.375328 6.812484 20.593855 5.593956 c
21.812382 4.375427 22.497883 2.723356 22.500000 1.000099 c
22.500000 0.000099 l
24.000000 0.000099 l
24.000000 1.000099 l
23.998512 2.946026 23.287819 4.824696 22.000978 6.284379 c
20.714138 7.744061 18.939388 8.684671 17.009001 8.930100 c
h
12.000000 8.500100 m
10.813313 8.500100 9.653274 8.851995 8.666578 9.511283 c
7.679883 10.170571 6.910849 11.107643 6.456723 12.204000 c
6.002597 13.300356 5.883778 14.506756 6.115289 15.670642 c
6.346800 16.834528 6.918244 17.903625 7.757360 18.742741 c
8.596475 19.581856 9.665572 20.153299 10.829458 20.384811 c
11.993344 20.616323 13.199744 20.497503 14.296101 20.043377 c
15.392457 19.589251 16.329529 18.820217 16.988817 17.833523 c
17.648106 16.846827 18.000000 15.686789 18.000000 14.500100 c
18.000000 12.908801 17.367859 11.382677 16.242641 10.257459 c
15.117423 9.132240 13.591299 8.500100 12.000000 8.500100 c
h
f
n
Q
q
1.000000 0.000000 -0.000000 1.000000 30.000000 22.399902 cm
0.000000 0.000000 0.000000 scn
2.174805 2.175079 m
2.174805 0.000098 l
3.424805 0.000098 l
3.424805 2.175079 l
5.600000 2.175079 l
5.600000 3.425079 l
3.424805 3.425079 l
3.424805 5.600098 l
2.174805 5.600098 l
2.174805 3.425079 l
0.000000 3.425079 l
0.000000 2.175079 l
2.174805 2.175079 l
h
f*
n
Q
endstream
endobj
3 0 obj
2221
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 40.000000 40.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Type /Catalog
/Pages 5 0 R
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002311 00000 n
0000002334 00000 n
0000002507 00000 n
0000002581 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2640
%%EOF

View File

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "invite-friends-256.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,101 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 73.599976 63.976318 cm
0.000000 0.000000 0.000000 scn
56.170994 -0.000092 m
66.093941 -0.000092 l
73.713356 37.122375 l
98.343536 37.122375 l
100.204086 46.956726 l
75.662506 46.956726 l
82.750328 81.952843 l
106.583130 81.952843 l
108.443680 91.698593 l
84.788078 91.698593 l
92.318886 128.023682 l
82.484535 128.023682 l
74.865120 91.698593 l
43.058521 91.698593 l
50.412136 128.023682 l
40.666382 128.023682 l
33.046970 91.698593 l
10.100147 91.698593 l
8.150995 81.952843 l
31.097820 81.952843 l
24.098597 46.956726 l
1.949151 46.956726 l
0.000000 37.122375 l
21.972250 37.122375 l
14.441438 -0.000092 l
24.187193 -0.000092 l
31.806602 37.122375 l
63.790401 37.122375 l
56.170994 -0.000092 l
h
33.844353 46.779533 m
40.932175 82.041443 l
72.915970 82.041443 l
65.916748 46.779533 l
33.844353 46.779533 l
h
f
n
Q
endstream
endobj
3 0 obj
883
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 256.000000 256.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Type /Catalog
/Pages 5 0 R
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000000973 00000 n
0000000995 00000 n
0000001170 00000 n
0000001244 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
1303
%%EOF

View File

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "invite-friends-40.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,101 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 11.500000 9.996338 cm
0.000000 0.000000 0.000000 scn
8.776716 -0.000053 m
10.327178 -0.000053 l
11.517710 5.800332 l
15.366176 5.800332 l
15.656887 7.336949 l
11.822265 7.336949 l
12.929737 12.805094 l
16.653612 12.805094 l
16.944323 14.327868 l
13.248136 14.327868 l
14.424825 20.003662 l
12.888206 20.003662 l
11.697675 14.327868 l
6.727893 14.327868 l
7.876895 20.003662 l
6.354121 20.003662 l
5.163589 14.327868 l
1.578148 14.327868 l
1.273593 12.805094 l
4.859034 12.805094 l
3.765405 7.336949 l
0.304555 7.336949 l
0.000000 5.800332 l
3.433164 5.800332 l
2.256474 -0.000053 l
3.779249 -0.000053 l
4.969781 5.800332 l
9.967249 5.800332 l
8.776716 -0.000053 l
h
5.288179 7.309263 m
6.395651 12.818937 l
11.393120 12.818937 l
10.299491 7.309263 l
5.288179 7.309263 l
h
f
n
Q
endstream
endobj
3 0 obj
845
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 40.000000 40.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Type /Catalog
/Pages 5 0 R
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000000935 00000 n
0000000957 00000 n
0000001130 00000 n
0000001204 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
1263
%%EOF

View File

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "add-members-256.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,79 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 51.200195 51.200012 cm
0.000000 0.000000 0.000000 scn
153.599991 85.759979 m
87.040001 85.759979 l
87.040001 153.599976 l
67.839996 153.599976 l
67.839996 85.759979 l
0.000000 85.759979 l
0.000000 66.559975 l
67.839996 66.559975 l
67.839996 -0.000015 l
87.040001 -0.000015 l
87.040001 66.559975 l
153.599991 66.559975 l
153.599991 85.759979 l
h
f
n
Q
endstream
endobj
3 0 obj
418
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 256.000000 256.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Type /Catalog
/Pages 5 0 R
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000000508 00000 n
0000000530 00000 n
0000000705 00000 n
0000000779 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
838
%%EOF

View File

@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "view-all-256.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@ -0,0 +1,73 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 44.799805 62.720032 cm
0.000000 0.000000 0.000000 scn
83.200005 0.000023 m
0.000000 84.480026 l
12.800001 97.280029 l
83.200005 28.160034 l
153.600006 97.280029 l
166.400009 84.480026 l
83.200005 0.000023 l
h
f
n
Q
endstream
endobj
3 0 obj
282
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 256.000000 256.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Type /Catalog
/Pages 5 0 R
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000000372 00000 n
0000000394 00000 n
0000000569 00000 n
0000000643 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
702
%%EOF

View File

@ -217,12 +217,12 @@ public class SearchResultsBar: UIView {
let upChevron = #imageLiteral(resourceName: "ic_chevron_up").withRenderingMode(.alwaysTemplate)
showLessRecentButton = UIBarButtonItem(image: upChevron, style: .plain, target: self, action: #selector(didTapShowLessRecent))
showLessRecentButton.imageInsets = UIEdgeInsets(top: 2, left: leftExteriorChevronMargin, bottom: 2, right: leftInteriorChevronMargin)
showLessRecentButton.tintColor = UIColor.ows_accentBlue
showLessRecentButton.tintColor = Theme.accentBlueColor
let downChevron = #imageLiteral(resourceName: "ic_chevron_down").withRenderingMode(.alwaysTemplate)
showMoreRecentButton = UIBarButtonItem(image: downChevron, style: .plain, target: self, action: #selector(didTapShowMoreRecent))
showMoreRecentButton.imageInsets = UIEdgeInsets(top: 2, left: leftInteriorChevronMargin, bottom: 2, right: leftExteriorChevronMargin)
showMoreRecentButton.tintColor = UIColor.ows_accentBlue
showMoreRecentButton.tintColor = Theme.accentBlueColor
let spacer1 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let spacer2 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)

View File

@ -205,7 +205,7 @@
: NSLocalizedString(@"SETTINGS_RELINK_BUTTON", @"Label for re-link button.")
accessibilityIdentifier:ACCESSIBILITY_IDENTIFIER_WITH_NAME(self, @"reregister")
selector:@selector(reregisterUser)
color:UIColor.ows_accentBlueColor]];
color:Theme.accentBlueColor]];
[section addItem:[self destructiveButtonItemWithTitle:NSLocalizedString(@"SETTINGS_DELETE_DATA_BUTTON",
@"Label for 'delete data' button.")
accessibilityIdentifier:ACCESSIBILITY_IDENTIFIER_WITH_NAME(self, @"delete_data")

View File

@ -342,7 +342,7 @@ extension LocationPicker: MKMapViewDelegate {
if annotation is MKUserLocation { return nil }
let pin = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "annotation")
pin.pinTintColor = .ows_accentBlue
pin.pinTintColor = Theme.accentBlueColor
pin.animatesDrop = annotation is MKPointAnnotation
pin.rightCalloutAccessoryView = sendLocationButton()
pin.canShowCallout = true
@ -351,7 +351,7 @@ extension LocationPicker: MKMapViewDelegate {
func sendLocationButton() -> UIButton {
let button = UIButton(frame: CGRect(x: 0, y: 0, width: 24, height: 24))
button.setTemplateImageName("send-solid-24", tintColor: .ows_accentBlue)
button.setTemplateImageName("send-solid-24", tintColor: Theme.accentBlueColor)
return button
}
@ -464,7 +464,7 @@ public class Location: NSObject {
snapshot.image.draw(at: .zero)
let pinView = MKPinAnnotationView(annotation: nil, reuseIdentifier: nil)
pinView.pinTintColor = .ows_accentBlue
pinView.pinTintColor = Theme.accentBlueColor
let pinImage = pinView.image
var point = snapshot.point(for: self.coordinate)

View File

@ -76,7 +76,6 @@ public class BaseGroupMemberViewController: OWSViewController {
private let recipientPicker = RecipientPickerViewController()
private let searchBar = OWSSearchBar()
private let memberBar = NewGroupMembersBar()
private let memberCountLabel = UILabel()
private let memberCountWrapper = UIView()
@ -95,19 +94,6 @@ public class BaseGroupMemberViewController: OWSViewController {
// First section.
if FeatureFlags.usernames {
searchBar.placeholder = NSLocalizedString("SEARCH_BY_NAME_OR_USERNAME_OR_NUMBER_PLACEHOLDER_TEXT",
comment: "Placeholder text indicating the user can search for contacts by name, username, or phone number.")
} else {
searchBar.placeholder = NSLocalizedString("SEARCH_BYNAMEORNUMBER_PLACEHOLDER_TEXT",
comment: "Placeholder text indicating the user can search for contacts by name or phone number.")
}
searchBar.accessibilityIdentifier = UIView.accessibilityIdentifier(in: self,
name: "member_search_bar")
searchBar.textField?.accessibilityIdentifier = UIView.accessibilityIdentifier(in: self,
name: "member_search_field")
searchBar.delegate = self
memberBar.delegate = self
// Don't use dynamic type in this label.
@ -119,25 +105,17 @@ public class BaseGroupMemberViewController: OWSViewController {
memberCountLabel.autoPinEdgesToSuperviewMargins()
memberCountWrapper.layoutMargins = UIEdgeInsets(top: 0, leading: 12, bottom: 0, trailing: 12)
let firstSection = UIStackView(arrangedSubviews: [searchBar, memberBar, memberCountWrapper])
firstSection.axis = .vertical
firstSection.alignment = .fill
view.addSubview(firstSection)
firstSection.autoPinWidthToSuperview()
firstSection.autoPin(toTopLayoutGuideOf: self, withInset: 0)
recipientPicker.allowsSelectingUnregisteredPhoneNumbers = false
recipientPicker.shouldShowGroups = false
recipientPicker.allowsSelectingUnregisteredPhoneNumbers = false
recipientPicker.shouldShowSearchBar = false
recipientPicker.showUseAsyncSelection = true
recipientPicker.delegate = self
addChild(recipientPicker)
view.addSubview(recipientPicker.view)
recipientPicker.view.autoPin(toTopLayoutGuideOf: self, withInset: 0)
recipientPicker.view.autoPinEdge(toSuperviewSafeArea: .leading)
recipientPicker.view.autoPinEdge(toSuperviewSafeArea: .trailing)
recipientPicker.view.autoPinEdge(.top, to: .bottom, of: firstSection)
autoPinView(toBottomOfViewControllerOrKeyboard: recipientPicker.view, avoidNotch: false)
updateMemberCount()
@ -210,7 +188,6 @@ public class BaseGroupMemberViewController: OWSViewController {
groupMemberViewDelegate.groupMemberViewAddRecipient(recipient)
recipientPicker.pickedRecipients = recipientSet.orderedMembers
self.searchBar.text = ""
recipientPicker.clearSearchText()
updateMemberBar()
updateMemberCount()
@ -549,7 +526,7 @@ extension BaseGroupMemberViewController: RecipientPickerDelegate {
if isPreExistingMember {
imageView.setTemplateImageName("check-circle-solid-24", tintColor: Theme.washColor)
} else if isCurrentMember {
imageView.setTemplateImageName("check-circle-solid-24", tintColor: .ows_accentBlue)
imageView.setTemplateImageName("check-circle-solid-24", tintColor: Theme.accentBlueColor)
} else if isBlocked {
// Use accessoryMessageForRecipient: to show blocked indicator.
return nil
@ -559,11 +536,13 @@ extension BaseGroupMemberViewController: RecipientPickerDelegate {
return imageView
}
func recipientPickerTableViewWillBeginDragging(_ recipientPickerViewController: RecipientPickerViewController) {
_ = searchBar.resignFirstResponder()
}
func recipientPickerTableViewWillBeginDragging(_ recipientPickerViewController: RecipientPickerViewController) {}
func recipientPickerNewGroupButtonWasPressed() {}
func recipientPickerCustomHeaderViews() -> [UIView] {
return [memberBar, memberCountWrapper]
}
}
// MARK: -
@ -583,24 +562,3 @@ extension BaseGroupMemberViewController: OWSNavigationView {
extension BaseGroupMemberViewController: NewGroupMembersBarDelegate {
}
// MARK: -
extension BaseGroupMemberViewController: UISearchBarDelegate {
public func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
recipientPicker.customSearchQuery = searchText
}
public func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
searchBar.setShowsCancelButton(true, animated: true)
}
public func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
searchBar.setShowsCancelButton(false, animated: true)
}
public func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchBar.text = nil
searchBar.resignFirstResponder()
}
}

View File

@ -99,6 +99,7 @@ public class NewGroupConfirmViewController: OWSViewController {
firstSection.autoPinWidthToSuperview()
firstSection.autoPin(toTopLayoutGuideOf: self, withInset: 8)
recipientTableView.customSectionHeaderFooterBackgroundColor = Theme.backgroundColor
addChild(recipientTableView)
view.addSubview(recipientTableView.view)

View File

@ -490,6 +490,11 @@ NS_ASSUME_NONNULL_BEGIN
OWSFailDebug(@"Invalid action.");
}
- (NSArray<UIView *> *)recipientPickerCustomHeaderViews
{
return @[];
}
#pragma mark - OWSNavigationView
- (BOOL)shouldCancelNavigationBack

View File

@ -167,7 +167,7 @@ public class PinReminderViewController: OWSViewController {
// Secondary button
let forgotButton = UIButton()
forgotButton.setTitle(NSLocalizedString("PIN_REMINDER_FORGOT_PIN", comment: "Text asking if the user forgot their pin for the 'pin reminder' dialog."), for: .normal)
forgotButton.setTitleColor(.ows_accentBlue, for: .normal)
forgotButton.setTitleColor(Theme.accentBlueColor, for: .normal)
forgotButton.titleLabel?.font = .ows_dynamicTypeSubheadlineClamped
forgotButton.addTarget(self, action: #selector(forgotPressed), for: .touchUpInside)
forgotButton.accessibilityIdentifier = "pinReminder.forgotButton"

View File

@ -278,7 +278,7 @@ public class PinSetupViewController: OWSViewController {
pinStackRow.setContentHuggingVerticalHigh()
pinStackRow.setCompressionResistanceVerticalHigh()
pinTypeToggle.setTitleColor(.ows_accentBlue, for: .normal)
pinTypeToggle.setTitleColor(Theme.accentBlueColor, for: .normal)
pinTypeToggle.titleLabel?.font = .systemFont(ofSize: 15)
pinTypeToggle.addTarget(self, action: #selector(togglePinType), for: .touchUpInside)
pinTypeToggle.accessibilityIdentifier = "pinCreation.pinTypeToggle"

View File

@ -24,6 +24,10 @@ class AddToBlockListViewController: OWSViewController {
recipientPicker.delegate = self
addChild(recipientPicker)
view.addSubview(recipientPicker.view)
recipientPicker.view.autoPin(toTopLayoutGuideOf: self, withInset: 0)
recipientPicker.view.autoPinEdge(toSuperviewEdge: .leading)
recipientPicker.view.autoPinEdge(toSuperviewEdge: .trailing)
recipientPicker.view.autoPinEdge(toSuperviewEdge: .bottom)
recipientPicker.findByPhoneNumberButtonTitle = NSLocalizedString(
"BLOCK_LIST_VIEW_BLOCK_BUTTON",
@ -119,4 +123,6 @@ extension AddToBlockListViewController: RecipientPickerDelegate {
func recipientPickerTableViewWillBeginDragging(_ recipientPickerViewController: RecipientPickerViewController) {}
func recipientPickerNewGroupButtonWasPressed() {}
func recipientPickerCustomHeaderViews() -> [UIView] { return [] }
}

View File

@ -14,6 +14,8 @@ class ComposeViewController: OWSViewController {
title = NSLocalizedString("MESSAGE_COMPOSEVIEW_TITLE", comment: "Title for the compose view.")
view.backgroundColor = Theme.backgroundColor
let showNewGroupAsCell = RemoteConfig.groupsV2CreateGroups
recipientPicker.allowsSelectingUnregisteredPhoneNumbers = false
@ -22,6 +24,10 @@ class ComposeViewController: OWSViewController {
recipientPicker.delegate = self
addChild(recipientPicker)
view.addSubview(recipientPicker.view)
recipientPicker.view.autoPin(toTopLayoutGuideOf: self, withInset: 0)
recipientPicker.view.autoPinEdge(toSuperviewEdge: .leading)
recipientPicker.view.autoPinEdge(toSuperviewEdge: .trailing)
recipientPicker.view.autoPinEdge(toSuperviewEdge: .bottom)
navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(dismissPressed))
@ -124,4 +130,6 @@ extension ComposeViewController: RecipientPickerDelegate {
func recipientPickerNewGroupButtonWasPressed() {
showNewGroupUI()
}
func recipientPickerCustomHeaderViews() -> [UIView] { return [] }
}

View File

@ -33,6 +33,8 @@ protocol RecipientPickerDelegate: AnyObject {
func recipientPickerTableViewWillBeginDragging(_ recipientPickerViewController: RecipientPickerViewController)
func recipientPickerNewGroupButtonWasPressed()
func recipientPickerCustomHeaderViews() -> [UIView]
}
@objc

View File

@ -28,8 +28,6 @@ NS_ASSUME_NONNULL_BEGIN
/// Defaults to `YES`
@property (nonatomic) BOOL shouldShowAlphabetSlider;
/// Defaults to `NO`
@property (nonatomic) BOOL shouldShowSearchBar;
/// Defaults to `NO`
@property (nonatomic) BOOL shouldShowNewGroup;
/// Defaults to `NO`
@property (nonatomic) BOOL showUseAsyncSelection;
@ -40,8 +38,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, nullable) NSArray<PickedRecipient *> *pickedRecipients;
@property (nonatomic, nullable) NSString *customSearchQuery;
- (void)reloadContent;
- (void)clearSearchText;

View File

@ -47,13 +47,15 @@ const NSUInteger kMinimumSearchLength = 2;
@property (nonatomic, readonly) FullTextSearcher *fullTextSearcher;
@property (nonatomic, readonly) UIStackView *signalContactsStackView;
@property (nonatomic, readonly) UIView *noSignalContactsView;
@property (nonatomic, readonly) OWSTableViewController *tableViewController;
@property (nonatomic, readonly) UILocalizedIndexedCollation *collation;
@property (nonatomic, readonly) UISearchBar *searchBar;
@property (nonatomic, nullable, readonly) UISearchBar *searchBar;
@property (nonatomic, nullable) ComposeScreenSearchResultSet *searchResults;
@property (nonatomic, nullable) NSString *lastSearchText;
@property (nonatomic, nullable) OWSInviteFlow *inviteFlow;
@ -113,7 +115,6 @@ const NSUInteger kMinimumSearchLength = 2;
_shouldShowGroups = YES;
_shouldShowInvites = NO;
_shouldShowAlphabetSlider = YES;
_shouldShowSearchBar = YES;
return self;
}
@ -121,6 +122,12 @@ const NSUInteger kMinimumSearchLength = 2;
- (void)loadView
{
[super loadView];
_signalContactsStackView = [UIStackView new];
self.signalContactsStackView.axis = UILayoutConstraintAxisVertical;
self.signalContactsStackView.alignment = UIStackViewAlignmentFill;
[self.view addSubview:self.signalContactsStackView];
[self.signalContactsStackView autoPinEdgesToSuperviewEdges];
_searchResults = nil;
_contactsViewHelper = [[ContactsViewHelper alloc] initWithDelegate:self];
@ -128,41 +135,39 @@ const NSUInteger kMinimumSearchLength = 2;
_collation = [UILocalizedIndexedCollation currentCollation];
// Search
if (self.shouldShowSearchBar) {
UISearchBar *searchBar = [OWSSearchBar new];
_searchBar = searchBar;
searchBar.delegate = self;
if (SSKFeatureFlags.usernames) {
searchBar.placeholder = NSLocalizedString(@"SEARCH_BY_NAME_OR_USERNAME_OR_NUMBER_PLACEHOLDER_TEXT",
@"Placeholder text indicating the user can search for contacts by name, username, or phone number.");
} else {
searchBar.placeholder = NSLocalizedString(@"SEARCH_BYNAMEORNUMBER_PLACEHOLDER_TEXT",
@"Placeholder text indicating the user can search for contacts by name or phone number.");
}
[searchBar sizeToFit];
SET_SUBVIEW_ACCESSIBILITY_IDENTIFIER(self, searchBar);
searchBar.textField.accessibilityIdentifier = ACCESSIBILITY_IDENTIFIER_WITH_NAME(self, @"contact_search");
UISearchBar *searchBar = [OWSSearchBar new];
_searchBar = searchBar;
searchBar.delegate = self;
if (SSKFeatureFlags.usernames) {
searchBar.placeholder = NSLocalizedString(@"SEARCH_BY_NAME_OR_USERNAME_OR_NUMBER_PLACEHOLDER_TEXT",
@"Placeholder text indicating the user can search for contacts by name, username, or phone number.");
} else {
searchBar.placeholder = NSLocalizedString(@"SEARCH_BYNAMEORNUMBER_PLACEHOLDER_TEXT",
@"Placeholder text indicating the user can search for contacts by name or phone number.");
}
[searchBar sizeToFit];
SET_SUBVIEW_ACCESSIBILITY_IDENTIFIER(self, searchBar);
searchBar.textField.accessibilityIdentifier = ACCESSIBILITY_IDENTIFIER_WITH_NAME(self, @"contact_search");
[self.signalContactsStackView addArrangedSubview:searchBar];
[searchBar setCompressionResistanceVerticalHigh];
[searchBar setContentHuggingVerticalHigh];
for (UIView *view in self.delegate.recipientPickerCustomHeaderViews) {
[self.signalContactsStackView addArrangedSubview:view];
}
_tableViewController = [OWSTableViewController new];
_tableViewController.delegate = self;
_tableViewController.tableViewStyle = UITableViewStylePlain;
// To automatically adjust our content inset appropriately on iOS9/10
// 1. the tableViewController must be a childView
// 2. the scrollable view (tableView in this case) must be at index 0.
[self addChildViewController:self.tableViewController];
[self.view insertSubview:self.tableViewController.view atIndex:0];
[self.signalContactsStackView addArrangedSubview:self.tableViewController.view];
[self.tableViewController.view setCompressionResistanceVerticalLow];
[self.tableViewController.view setContentHuggingVerticalLow];
// separatorStyle must be set _after_ the table view is added to the view hierarchy.
self.tableViewController.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[self.tableViewController.view autoPinEdgesToSuperviewEdges];
self.tableViewController.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableViewController.tableView.estimatedRowHeight = 60;
if (self.shouldShowSearchBar) {
_tableViewController.tableView.tableHeaderView = self.searchBar;
}
_noSignalContactsView = [self createNoSignalContactsView];
self.noSignalContactsView.hidden = YES;
@ -256,15 +261,19 @@ const NSUInteger kMinimumSearchLength = 2;
buttonStack.alignment = UIStackViewAlignmentFill;
buttonStack.spacing = 16;
void (^addButton)(NSString *, SEL, NSString *, ThemeIcon)
= ^(NSString *title, SEL selector, NSString *accessibilityIdentifierName, ThemeIcon icon) {
void (^addButton)(NSString *, SEL, NSString *, ThemeIcon, NSUInteger)
= ^(NSString *title,
SEL selector,
NSString *accessibilityIdentifierName,
ThemeIcon icon,
NSUInteger innerIconSize) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:selector forControlEvents:UIControlEventTouchUpInside];
SET_SUBVIEW_ACCESSIBILITY_IDENTIFIER(self, button);
button.accessibilityIdentifier = ACCESSIBILITY_IDENTIFIER_WITH_NAME(self, accessibilityIdentifierName);
[buttonStack addArrangedSubview:button];
UIView *iconView = [OWSTableItem buildIconInCircleViewWithIcon:icon innerIconSize:28];
UIView *iconView = [OWSTableItem buildIconInCircleViewWithIcon:icon innerIconSize:innerIconSize];
UILabel *label = [UILabel new];
label.text = title;
@ -289,7 +298,8 @@ const NSUInteger kMinimumSearchLength = 2;
: @"Label for the 'create new group' button."),
@selector(newGroupButtonPressed),
@"newGroupButton",
ThemeIconComposeNewGroup);
ThemeIconComposeNewGroup,
35);
}
if (self.allowsAddByPhoneNumber) {
@ -297,7 +307,8 @@ const NSUInteger kMinimumSearchLength = 2;
@"Label for a button that lets users search for contacts by phone number"),
@selector(hideBackgroundView),
@"searchByPhoneNumberButton",
ThemeIconComposeFindByPhoneNumber);
ThemeIconComposeFindByPhoneNumber,
42);
}
if (self.shouldShowInvites) {
@ -305,7 +316,8 @@ const NSUInteger kMinimumSearchLength = 2;
"Label for the cell that presents the 'invite contacts' workflow."),
@selector(presentInviteFlow),
@"inviteContactsButton",
ThemeIconComposeInvite);
ThemeIconComposeInvite,
38);
}
UIStackView *stackView = [[UIStackView alloc] initWithArrangedSubviews:@[
@ -332,10 +344,6 @@ const NSUInteger kMinimumSearchLength = 2;
[self.contactsViewHelper warmNonSignalContactsCacheAsync];
if (self.shouldShowSearchBar) {
self.tableViewController.tableView.tableHeaderView = self.searchBar;
}
self.title = NSLocalizedString(@"MESSAGE_COMPOSEVIEW_TITLE", @"");
}
@ -418,7 +426,7 @@ const NSUInteger kMinimumSearchLength = 2;
NSString *cellName = NSLocalizedString(@"NEW_GROUP_BUTTON", comment
: @"Label for the 'create new group' button.");
UIView *iconView = [OWSTableItem buildIconInCircleViewWithIcon:ThemeIconComposeNewGroup
innerIconSize:28];
innerIconSize:35];
UITableViewCell *cell = [OWSTableItem buildCellWithName:cellName
iconView:iconView
iconSpacing:kContactCellAvatarTextMargin];
@ -444,7 +452,7 @@ const NSUInteger kMinimumSearchLength = 2;
@"A label the cell that lets you add a new member to a group.");
UIView *iconView =
[OWSTableItem buildIconInCircleViewWithIcon:ThemeIconComposeFindByPhoneNumber
innerIconSize:28];
innerIconSize:42];
UITableViewCell *cell = [OWSTableItem buildCellWithName:cellName
iconView:iconView
iconSpacing:kContactCellAvatarTextMargin];
@ -472,7 +480,7 @@ const NSUInteger kMinimumSearchLength = 2;
NSString *cellName = NSLocalizedString(@"INVITE_FRIENDS_CONTACT_TABLE_BUTTON",
@"Label for the cell that presents the 'invite contacts' workflow.");
UIView *iconView = [OWSTableItem buildIconInCircleViewWithIcon:ThemeIconComposeInvite
innerIconSize:28];
innerIconSize:38];
UITableViewCell *cell = [OWSTableItem buildCellWithName:cellName
iconView:iconView
iconSpacing:kContactCellAvatarTextMargin];
@ -505,8 +513,9 @@ const NSUInteger kMinimumSearchLength = 2;
// If we have non-contact selections, add a title to the static section
if (hadNonContactRecipient) {
staticSection.headerTitle = NSLocalizedString(@"NEW_GROUP_NON_CONTACTS_SECTION_TITLE",
@"a title for the selected section of the 'recipient picker' view.");
staticSection.customHeaderView = [self
buildSectionHeaderWithTitle:NSLocalizedString(@"NEW_GROUP_NON_CONTACTS_SECTION_TITLE",
@"a title for the selected section of the 'recipient picker' view.")];
}
}
@ -641,12 +650,12 @@ const NSUInteger kMinimumSearchLength = 2;
// To accomplish this we add a section with a blank title rather than omitting the section altogether,
// in order for section indexes to match up correctly
NSString *sectionTitle = contactItems.count > 0 ? self.collation.sectionTitles[i] : nil;
[contactSections addObject:[OWSTableSection sectionWithTitle:sectionTitle items:contactItems]];
[contactSections addObject:[self buildSectionWithTitle:sectionTitle.uppercaseString items:contactItems]];
}
} else {
OWSTableSection *contactsSection = [OWSTableSection new];
contactsSection.headerTitle = NSLocalizedString(@"COMPOSE_MESSAGE_CONTACT_SECTION_TITLE",
@"Table section header for contact listing when composing a new message");
OWSTableSection *contactsSection =
[self buildSectionWithTitle:NSLocalizedString(@"COMPOSE_MESSAGE_CONTACT_SECTION_TITLE",
@"Table section header for contact listing when composing a new message")];
for (SignalAccount *signalAccount in self.contactsViewHelper.signalAccounts) {
[contactsSection
@ -659,6 +668,41 @@ const NSUInteger kMinimumSearchLength = 2;
return [contactSections copy];
}
- (OWSTableSection *)buildSectionWithTitle:(nullable NSString *)sectionTitle
{
return [self buildSectionWithTitle:sectionTitle items:@[]];
}
- (OWSTableSection *)buildSectionWithTitle:(nullable NSString *)sectionTitle items:(NSArray<OWSTableItem *> *)items
{
OWSTableSection *section = [OWSTableSection new];
[section addItems:items];
if (sectionTitle != nil) {
section.customHeaderView = [self buildSectionHeaderWithTitle:sectionTitle];
}
return section;
}
- (UIView *)buildSectionHeaderWithTitle:(NSString *)sectionTitle
{
UITextView *textView = [UITextView new];
textView.backgroundColor = UIColor.clearColor;
textView.opaque = NO;
textView.editable = NO;
textView.contentInset = UIEdgeInsetsZero;
textView.textContainer.lineFragmentPadding = 0;
textView.scrollEnabled = NO;
textView.textColor = Theme.primaryTextColor;
textView.font = UIFont.ows_dynamicTypeBodyFont.ows_semibold;
textView.backgroundColor = Theme.washColor;
CGFloat tableEdgeInsets = UIDevice.currentDevice.isPlusSizePhone ? 20 : 16;
textView.textContainerInset = UIEdgeInsetsMake(5, tableEdgeInsets, 5, tableEdgeInsets);
textView.text = sectionTitle;
return textView;
}
- (NSArray<OWSTableSection *> *)contactsSectionsForSearchResults:(ComposeScreenSearchResultSet *)searchResults
{
__weak __typeof(self) weakSelf = self;
@ -672,9 +716,9 @@ const NSUInteger kMinimumSearchLength = 2;
NSMutableSet<NSString *> *matchedAccountPhoneNumbers = [NSMutableSet new];
NSMutableSet<NSString *> *matchedAccountUsernames = [NSMutableSet new];
OWSTableSection *contactsSection = [OWSTableSection new];
contactsSection.headerTitle = NSLocalizedString(@"COMPOSE_MESSAGE_CONTACT_SECTION_TITLE",
@"Table section header for contact listing when composing a new message");
OWSTableSection *contactsSection =
[self buildSectionWithTitle:NSLocalizedString(@"COMPOSE_MESSAGE_CONTACT_SECTION_TITLE",
@"Table section header for contact listing when composing a new message")];
OWSAssertIsOnMainThread();
[self.databaseStorage uiReadWithBlock:^(SDSAnyReadTransaction *transaction) {
@ -702,9 +746,9 @@ const NSUInteger kMinimumSearchLength = 2;
if (self.shouldShowGroups) {
// When searching, we include matching groups
OWSTableSection *groupSection = [OWSTableSection new];
groupSection.headerTitle = NSLocalizedString(@"COMPOSE_MESSAGE_GROUP_SECTION_TITLE",
@"Table section header for group listing when composing a new message");
OWSTableSection *groupSection =
[self buildSectionWithTitle:NSLocalizedString(@"COMPOSE_MESSAGE_GROUP_SECTION_TITLE",
@"Table section header for group listing when composing a new message")];
NSArray<TSGroupThread *> *filteredGroupThreads = searchResults.groupThreads;
for (TSGroupThread *thread in filteredGroupThreads) {
hasSearchResults = YES;
@ -716,9 +760,9 @@ const NSUInteger kMinimumSearchLength = 2;
}
}
OWSTableSection *phoneNumbersSection = [OWSTableSection new];
phoneNumbersSection.headerTitle = NSLocalizedString(@"COMPOSE_MESSAGE_PHONE_NUMBER_SEARCH_SECTION_TITLE",
@"Table section header for phone number search when composing a new message");
OWSTableSection *phoneNumbersSection =
[self buildSectionWithTitle:NSLocalizedString(@"COMPOSE_MESSAGE_PHONE_NUMBER_SEARCH_SECTION_TITLE",
@"Table section header for phone number search when composing a new message")];
NSArray<NSString *> *searchPhoneNumbers = [self parsePossibleSearchPhoneNumbers];
for (NSString *phoneNumber in searchPhoneNumbers) {
@ -796,9 +840,9 @@ const NSUInteger kMinimumSearchLength = 2;
&& ![matchedAccountUsernames containsObject:usernameMatch]) {
hasSearchResults = YES;
OWSTableSection *usernameSection = [OWSTableSection new];
usernameSection.headerTitle = NSLocalizedString(@"COMPOSE_MESSAGE_USERNAME_SEARCH_SECTION_TITLE",
@"Table section header for username search when composing a new message");
OWSTableSection *usernameSection = [self
buildSectionWithTitle:NSLocalizedString(@"COMPOSE_MESSAGE_USERNAME_SEARCH_SECTION_TITLE",
@"Table section header for username search when composing a new message")];
[usernameSection addItem:[OWSTableItem
itemWithCustomCellBlock:^{
@ -904,12 +948,10 @@ const NSUInteger kMinimumSearchLength = 2;
_isNoContactsModeActive = isNoContactsModeActive;
if (isNoContactsModeActive) {
self.tableViewController.tableView.hidden = YES;
self.searchBar.hidden = YES;
self.signalContactsStackView.hidden = YES;
self.noSignalContactsView.hidden = NO;
} else {
self.tableViewController.tableView.hidden = NO;
self.searchBar.hidden = NO;
self.signalContactsStackView.hidden = NO;
self.noSignalContactsView.hidden = YES;
}
@ -918,7 +960,6 @@ const NSUInteger kMinimumSearchLength = 2;
- (void)clearSearchText
{
self.customSearchQuery = nil;
self.searchBar.text = @"";
[self searchTextDidChange];
}
@ -1216,16 +1257,9 @@ const NSUInteger kMinimumSearchLength = 2;
return nil;
}
- (void)setCustomSearchQuery:(nullable NSString *)customSearchQuery
{
_customSearchQuery = customSearchQuery;
[self searchTextDidChange];
}
- (NSString *)searchText
{
NSString *rawText = (self.customSearchQuery.length > 0 ? self.customSearchQuery : self.searchBar.text);
NSString *rawText = self.searchBar.text;
return rawText.ows_stripped ?: @"";
}

View File

@ -118,7 +118,7 @@ public class Onboarding2FAViewController: OnboardingBaseViewController {
pinStack.autoSetDimension(.width, toSize: 227)
pinStackRow.setContentHuggingVerticalHigh()
pinTypeToggle.setTitleColor(.ows_accentBlue, for: .normal)
pinTypeToggle.setTitleColor(Theme.accentBlueColor, for: .normal)
pinTypeToggle.titleLabel?.font = .ows_dynamicTypeSubheadlineClamped
pinTypeToggle.addTarget(self, action: #selector(togglePinType), for: .touchUpInside)
pinTypeToggle.accessibilityIdentifier = "pinCreation.pinTypeToggle"

View File

@ -437,12 +437,12 @@ public class OnboardingVerificationViewController: OnboardingBaseViewController
codeStateLink.setTitle(title: NSLocalizedString("ONBOARDING_VERIFICATION_ORIGINAL_CODE_MISSING_LINK",
comment: "Label for link that can be used when the original code did not arrive."),
font: .ows_dynamicTypeBodyClamped,
titleColor: .ows_accentBlue)
titleColor: Theme.accentBlueColor)
case .resent:
codeStateLink.setTitle(title: NSLocalizedString("ONBOARDING_VERIFICATION_RESENT_CODE_MISSING_LINK",
comment: "Label for link that can be used when the resent code did not arrive."),
font: .ows_dynamicTypeBodyClamped,
titleColor: .ows_accentBlue)
titleColor: Theme.accentBlueColor)
}
}

View File

@ -589,7 +589,9 @@ extension ConversationSettingsViewController {
cell.preservesSuperviewLayoutMargins = true
cell.contentView.preservesSuperviewLayoutMargins = true
let iconView = OWSTableItem.buildIconInCircleView(icon: .settingsAddMembers, iconSize: kSmallAvatarSize)
let iconView = OWSTableItem.buildIconInCircleView(icon: .settingsAddMembers,
iconSize: kSmallAvatarSize,
innerIconSize: 22)
let rowLabel = UILabel()
rowLabel.text = NSLocalizedString("CONVERSATION_SETTINGS_ADD_MEMBERS",
@ -729,13 +731,13 @@ extension ConversationSettingsViewController {
let iconView = OWSTableItem.buildIconInCircleView(icon: .settingsShowAllMembers,
iconSize: kSmallAvatarSize,
innerIconSize: 12,
innerIconSize: 19,
iconTintColor: Theme.secondaryTextAndIconColor)
let rowLabel = UILabel()
rowLabel.text = NSLocalizedString("CONVERSATION_SETTINGS_VIEW_ALL_MEMBERS",
comment: "Label for 'view all members' button in conversation settings view.")
rowLabel.textColor = Theme.primaryTextColor
rowLabel.textColor = Theme.secondaryTextAndIconColor
rowLabel.font = OWSTableItem.primaryLabelFont
rowLabel.lineBreakMode = .byTruncatingTail

View File

@ -568,6 +568,11 @@ NS_ASSUME_NONNULL_BEGIN
OWSFailDebug(@"Invalid action.");
}
- (NSArray<UIView *> *)recipientPickerCustomHeaderViews
{
return @[];
}
#pragma mark - OWSNavigationView
- (BOOL)shouldCancelNavigationBack

View File

@ -18,7 +18,7 @@ class DismissInputBar: UIToolbar {
let spacer = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let dismissButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(didTapDone))
dismissButton.imageInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 40)
dismissButton.tintColor = UIColor.ows_accentBlue
dismissButton.tintColor = Theme.accentBlueColor
self.items = [spacer, dismissButton]
self.isTranslucent = false

View File

@ -323,7 +323,7 @@ public class MediaMessageView: UIView, OWSAudioPlayerDelegate {
private var controlTintColor: UIColor {
switch mode {
case .small, .large:
return UIColor.ows_accentBlue
return Theme.accentBlueColor
case .attachmentApproval:
return UIColor.white
}

View File

@ -41,6 +41,8 @@ extern const CGFloat kOWSTable_DefaultCellHeight;
- (void)addItem:(OWSTableItem *)item;
- (void)addItems:(NSArray<OWSTableItem *> *)items;
- (NSUInteger)itemCount;
@end
@ -173,6 +175,8 @@ typedef BOOL (^OWSTableSwitchBlock)(void);
@property (nonatomic) BOOL useThemeBackgroundColors;
@property (nonatomic, nullable) UIColor *customSectionHeaderFooterBackgroundColor;
- (instancetype)init NS_DESIGNATED_INITIALIZER;
#pragma mark - Presentation

View File

@ -75,6 +75,13 @@ const CGFloat kOWSTable_DefaultCellHeight = 45.f;
[_items addObject:item];
}
- (void)addItems:(NSArray<OWSTableItem *> *)items
{
for (OWSTableItem *item in items) {
[self addItem:item];
}
}
- (NSUInteger)itemCount
{
return _items.count;
@ -674,7 +681,6 @@ NSString *const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
UITextView *textView = [LinkingTextView new];
textView.textColor = Theme.secondaryTextAndIconColor;
textView.font = UIFont.ows_dynamicTypeCaption1Font;
textView.backgroundColor = self.sectionHeaderAndFooterBackgroundColor;
CGFloat tableEdgeInsets = UIDevice.currentDevice.isPlusSizePhone ? 20 : 16;
textView.textContainerInset = UIEdgeInsetsMake(16, tableEdgeInsets, 6, tableEdgeInsets);
@ -701,7 +707,6 @@ NSString *const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
UITextView *textView = [LinkingTextView new];
textView.textColor = UIColor.ows_gray45Color;
textView.font = UIFont.ows_dynamicTypeCaption1Font;
textView.backgroundColor = self.sectionHeaderAndFooterBackgroundColor;
CGFloat tableEdgeInsets = UIDevice.currentDevice.isPlusSizePhone ? 20 : 16;
textView.textContainerInset = UIEdgeInsetsMake(6, tableEdgeInsets, 12, tableEdgeInsets);
@ -870,11 +875,6 @@ NSString *const kOWSTableCellIdentifier = @"kOWSTableCellIdentifier";
self.tableView.separatorColor = Theme.cellSeparatorColor;
}
- (nullable UIColor *)sectionHeaderAndFooterBackgroundColor
{
return (self.useThemeBackgroundColors ? Theme.tableViewBackgroundColor : Theme.secondaryBackgroundColor);
}
@end
NS_ASSUME_NONNULL_END

View File

@ -8,11 +8,11 @@ import Foundation
public extension OWSTableItem {
static var primaryLabelFont: UIFont {
return UIFont.ows_dynamicTypeCalloutClamped
return UIFont.ows_dynamicTypeBodyClamped
}
static var accessoryLabelFont: UIFont {
return UIFont.ows_dynamicTypeCalloutClamped
return UIFont.ows_dynamicTypeBodyClamped
}
static var iconSpacing: CGFloat {
@ -184,7 +184,7 @@ public extension OWSTableItem {
if let iconTintColor = iconTintColor {
iconView.tintColor = iconTintColor
} else {
iconView.tintColor = .ows_accentBlue
iconView.tintColor = Theme.accentBlueColor
}
let iconWrapper = UIView.container()
iconWrapper.addSubview(iconView)

View File

@ -101,6 +101,7 @@ NS_ASSUME_NONNULL_BEGIN
// Table
_tableViewController = [OWSTableViewController new];
_tableViewController.delegate = self;
_tableViewController.customSectionHeaderFooterBackgroundColor = Theme.backgroundColor;
[self.view addSubview:self.tableViewController.view];
[self.tableViewController.view autoPinEdgeToSuperviewSafeArea:ALEdgeLeading];
[self.tableViewController.view autoPinEdgeToSuperviewSafeArea:ALEdgeTrailing];

View File

@ -360,7 +360,7 @@ public class ManageStickersViewController: OWSTableViewController {
var authorViews = [UIView]()
if isDefaultStickerPack {
let builtInPackView = UIImageView()
builtInPackView.setTemplateImageName("check-circle-filled-16", tintColor: UIColor.ows_accentBlue)
builtInPackView.setTemplateImageName("check-circle-filled-16", tintColor: Theme.accentBlueColor)
builtInPackView.setCompressionResistanceHigh()
builtInPackView.setContentHuggingHigh()
authorViews.append(builtInPackView)

View File

@ -121,7 +121,7 @@ public class StickerPackViewController: OWSViewController {
authorLabel.font = UIFont.ows_dynamicTypeBody
defaultPackIconView.setTemplateImageName("check-circle-filled-16", tintColor: UIColor.ows_accentBlue)
defaultPackIconView.setTemplateImageName("check-circle-filled-16", tintColor: Theme.accentBlueColor)
defaultPackIconView.isHidden = true
shareButton.setTemplateImageName("forward-solid-24", tintColor: Theme.darkThemePrimaryColor)

View File

@ -135,9 +135,9 @@ public extension Theme {
case .settingsSearch:
return "search-24"
case .settingsAddMembers:
return "plus-24"
return "plus-256"
case .settingsShowAllMembers:
return "ic_chevron_down"
return "chevron-down-256"
// Input Toolbar
case .stickerButton:
@ -177,11 +177,11 @@ public extension Theme {
case .compose:
return isDarkThemeEnabled ? "compose-solid-24" : "compose-outline-24"
case .composeNewGroup:
return "group-outline-32"
return "group-outline-256"
case .composeFindByPhoneNumber:
return "phone-number-32"
return "phone-number-256"
case .composeInvite:
return "invite-outline-32"
return "invite-outline-256"
case .phone:
return isDarkThemeEnabled ? "button_phone_white" : "phone-right-outline-24"