introducing profiles

// FREEBIE
pull/1/head
Michael Kirk 7 years ago
parent e1e8d05ed8
commit 73a441a28c

@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "introductory_splash_profile.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "introductory_splash_profile@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "introductory_splash_profile@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

@ -24,6 +24,7 @@
#import "OWSViewController.h" #import "OWSViewController.h"
#import "OWSWebRTCDataProtos.pb.h" #import "OWSWebRTCDataProtos.pb.h"
#import "PrivacySettingsTableViewController.h" #import "PrivacySettingsTableViewController.h"
#import "ProfileViewController.h"
#import "PropertyListPreferences.h" #import "PropertyListPreferences.h"
#import "PushManager.h" #import "PushManager.h"
#import "Release.h" #import "Release.h"

@ -53,6 +53,10 @@ NS_ASSUME_NONNULL_BEGIN
actionBlock:^{ actionBlock:^{
[DebugUIMisc setManualCensorshipCircumventionEnabled:NO]; [DebugUIMisc setManualCensorshipCircumventionEnabled:NO];
}]]; }]];
[items addObject:[OWSTableItem itemWithTitle:@"Clear experience upgrades (works once per launch)"
actionBlock:^{
[ExperienceUpgrade removeAllObjectsInCollection];
}]];
[items addObject:[OWSTableItem itemWithTitle:@"Clear hasDismissedOffers" [items addObject:[OWSTableItem itemWithTitle:@"Clear hasDismissedOffers"
actionBlock:^{ actionBlock:^{
[DebugUIMisc clearHasDismissedOffers]; [DebugUIMisc clearHasDismissedOffers];

@ -4,6 +4,45 @@
import Foundation import Foundation
private class IntroductingProfilesExperienceUpgradeViewController: ExperienceUpgradeViewController {
override func loadView() {
super.loadView()
assert(view != nil)
assert(bodyLabel != nil)
// Privacy Settings Button
let button = UIButton()
view.addSubview(button)
let privacyTitle = NSLocalizedString("UPGRADE_EXPERIENCE_INTRODUCING_PROFILES_BUTTON", comment: "button label shown one time, after user upgrades app")
button.setTitle(privacyTitle, for: .normal)
button.setTitleColor(UIColor.ows_signalBrandBlue(), for: .normal)
button.isUserInteractionEnabled = true
button.addTarget(self, action:#selector(didTapButton), for: .touchUpInside)
button.titleLabel?.font = bodyLabel.font
// Privacy Settings Button layout
button.autoPinWidthToSuperview(withMargin: bodyMargin)
button.autoPinEdge(.top, to: .bottom, of: bodyLabel, withOffset: ScaleFromIPhone5(12))
button.sizeToFit()
}
// MARK: - Actions
func didTapButton(sender: UIButton) {
Logger.debug("\(TAG) in \(#function)")
// dismiss the modally presented view controller, then proceed.
experienceUpgradesPageViewController.dismiss(animated: true) {
guard let fromViewController = UIApplication.shared.frontmostViewController as? SignalsViewController else {
owsFail("unexpected frontmostViewController: \(String(describing: UIApplication.shared.frontmostViewController))")
return
}
ProfileViewController.presentForUpgradeOrNag(from: fromViewController)
}
}
}
private class CallKitExperienceUpgradeViewController: ExperienceUpgradeViewController { private class CallKitExperienceUpgradeViewController: ExperienceUpgradeViewController {
override func loadView() { override func loadView() {
@ -79,7 +118,7 @@ private class ExperienceUpgradeViewController: OWSViewController {
view.addSubview(titleLabel) view.addSubview(titleLabel)
titleLabel.text = header titleLabel.text = header
titleLabel.textAlignment = .center titleLabel.textAlignment = .center
titleLabel.font = UIFont.ows_regularFont(withSize: ScaleFromIPhone5To7Plus(26, 32)) titleLabel.font = UIFont.ows_regularFont(withSize: ScaleFromIPhone5(24))
titleLabel.textColor = UIColor.white titleLabel.textColor = UIColor.white
titleLabel.minimumScaleFactor = 0.5 titleLabel.minimumScaleFactor = 0.5
titleLabel.adjustsFontSizeToFitWidth = true titleLabel.adjustsFontSizeToFitWidth = true
@ -301,6 +340,8 @@ class ExperienceUpgradesPageViewController: OWSViewController, UIPageViewControl
switch identifier { switch identifier {
case .callKit: case .callKit:
return CallKitExperienceUpgradeViewController(experienceUpgrade: experienceUpgrade, experienceUpgradesPageViewController: self) return CallKitExperienceUpgradeViewController(experienceUpgrade: experienceUpgrade, experienceUpgradesPageViewController: self)
case .introducingProfiles:
return IntroductingProfilesExperienceUpgradeViewController(experienceUpgrade: experienceUpgrade, experienceUpgradesPageViewController: self)
default: default:
return ExperienceUpgradeViewController(experienceUpgrade: experienceUpgrade, experienceUpgradesPageViewController: self) return ExperienceUpgradeViewController(experienceUpgrade: experienceUpgrade, experienceUpgradesPageViewController: self)
} }

@ -14,7 +14,8 @@ NS_ASSUME_NONNULL_BEGIN
+ (void)presentForAppSettings:(UINavigationController *)navigationController; + (void)presentForAppSettings:(UINavigationController *)navigationController;
+ (void)presentForRegistration:(UINavigationController *)navigationController; + (void)presentForRegistration:(UINavigationController *)navigationController;
+ (void)presentForUpgradeOrNag:(SignalsViewController *)presentingController; + (void)presentForUpgradeOrNag:(SignalsViewController *)presentingController
NS_SWIFT_NAME(presentForUpgradeOrNag(from:));
@end @end

@ -47,6 +47,7 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
@property (nonatomic) UISegmentedControl *segmentedControl; @property (nonatomic) UISegmentedControl *segmentedControl;
@property (nonatomic) id previewingContext; @property (nonatomic) id previewingContext;
@property (nonatomic) NSSet<NSString *> *blockedPhoneNumberSet; @property (nonatomic) NSSet<NSString *> *blockedPhoneNumberSet;
@property (nonatomic) BOOL viewHasEverAppeared;
@property (nonatomic) BOOL isViewVisible; @property (nonatomic) BOOL isViewVisible;
@property (nonatomic) BOOL isAppInBackground; @property (nonatomic) BOOL isAppInBackground;
@ -491,9 +492,11 @@ typedef NS_ENUM(NSInteger, CellState) { kArchiveState, kInboxState };
// Start running the disappearing messages job in case the newly registered user // Start running the disappearing messages job in case the newly registered user
// enables this feature // enables this feature
[[OWSDisappearingMessagesJob sharedJob] startIfNecessary]; [[OWSDisappearingMessagesJob sharedJob] startIfNecessary];
} else { } else if (!self.viewHasEverAppeared) {
[self displayAnyUnseenUpgradeExperience]; [self displayAnyUnseenUpgradeExperience];
} }
self.viewHasEverAppeared = YES;
} }
#pragma mark - startup #pragma mark - startup

@ -6,7 +6,8 @@ import Foundation
enum ExperienceUpgradeId: String { enum ExperienceUpgradeId: String {
case videoCalling = "001", case videoCalling = "001",
callKit = "002" callKit = "002",
introducingProfiles = "003"
} }
class ExperienceUpgradeFinder: NSObject { class ExperienceUpgradeFinder: NSObject {
@ -26,6 +27,11 @@ class ExperienceUpgradeFinder: NSObject {
image: #imageLiteral(resourceName: "introductory_splash_callkit"))) image: #imageLiteral(resourceName: "introductory_splash_callkit")))
} }
upgrades.append(ExperienceUpgrade(uniqueId: ExperienceUpgradeId.introducingProfiles.rawValue,
title: NSLocalizedString("UPGRADE_EXPERIENCE_INTRODUCING_PROFILES_TITLE", comment: "Header for upgrade experience"),
body: NSLocalizedString("UPGRADE_EXPERIENCE_INTRODUCING_PROFILES_DESCRIPTION", comment: "Description of new profile feature for upgrading (existing) users"),
image:#imageLiteral(resourceName: "introductory_splash_profile")))
return upgrades return upgrades
} }

@ -1516,6 +1516,15 @@
/* Header for upgrade experience */ /* Header for upgrade experience */
"UPGRADE_EXPERIENCE_CALLKIT_TITLE" = "Just Swipe to Answer"; "UPGRADE_EXPERIENCE_CALLKIT_TITLE" = "Just Swipe to Answer";
/* button label shown one time, after user upgrades app */
"UPGRADE_EXPERIENCE_INTRODUCING_PROFILES_BUTTON" = "Set up your profile now.";
/* Description of new profile feature for upgrading (existing) users */
"UPGRADE_EXPERIENCE_INTRODUCING_PROFILES_DESCRIPTION" = "You can now share a photo and name with your friends on Signal.";
/* Header for upgrade experience */
"UPGRADE_EXPERIENCE_INTRODUCING_PROFILES_TITLE" = "Ready for Your Closeup?";
/* Description of video calling to upgrading (existing) users */ /* Description of video calling to upgrading (existing) users */
"UPGRADE_EXPERIENCE_VIDEO_DESCRIPTION" = "Signal now supports secure video calling. Just start a call like normal, tap the camera button, and wave hello."; "UPGRADE_EXPERIENCE_VIDEO_DESCRIPTION" = "Signal now supports secure video calling. Just start a call like normal, tap the camera button, and wave hello.";

Loading…
Cancel
Save