Commit 5f277895 authored by Yuwei Huang's avatar Yuwei Huang Committed by Commit Bot

[CRD iOS] UI to toggle WebRTC protocol

This CL adds a button on the SSO side menu to toggle using WebRTC
protocol in the debug build iOS client. It will make it easier to
debug the WebRTC client or do side-by-side comparison.

This CL also introduces a basic flag setting framework in iOS.

Bug: 748710
Change-Id: I6f7799964b49427330953553f048d67a7d31dce1
Reviewed-on: https://chromium-review.googlesource.com/764987Reviewed-by: default avatarJamie Walch <jamiewalch@chromium.org>
Commit-Queue: Yuwei Huang <yuweih@chromium.org>
Cr-Commit-Position: refs/heads/master@{#515761}
parent 8552925c
...@@ -8,8 +8,10 @@ ...@@ -8,8 +8,10 @@
#import "remoting/ios/app/side_menu_items.h" #import "remoting/ios/app/side_menu_items.h"
#import "ios/third_party/material_components_ios/src/components/Snackbar/src/MaterialSnackbar.h"
#import "remoting/ios/app/app_delegate.h" #import "remoting/ios/app/app_delegate.h"
#import "remoting/ios/app/remoting_theme.h" #import "remoting/ios/app/remoting_theme.h"
#import "remoting/ios/persistence/remoting_preferences.h"
#include "remoting/base/string_resources.h" #include "remoting/base/string_resources.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -51,21 +53,44 @@ static NSString* const kFeedbackContext = @"SideMenuFeedbackContext"; ...@@ -51,21 +53,44 @@ static NSString* const kFeedbackContext = @"SideMenuFeedbackContext";
static NSArray<NSArray<SideMenuItem*>*>* items = nil; static NSArray<NSArray<SideMenuItem*>*>* items = nil;
static dispatch_once_t onceToken; static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ dispatch_once(&onceToken, ^{
items = @[ @[ items = @[
[[SideMenuItem alloc] #if !defined(NDEBUG)
initWithTitle:l10n_util::GetNSString(IDS_ACTIONBAR_SEND_FEEDBACK) @[
icon:RemotingTheme.feedbackIcon [[SideMenuItem alloc]
action:^{ initWithTitle:@"Toggle WebRTC"
[AppDelegate.instance icon:RemotingTheme.settingsIcon
presentFeedbackFlowWithContext:kFeedbackContext]; action:^{
}], BOOL newValue = ![RemotingPreferences.instance
[[SideMenuItem alloc] boolForFlag:RemotingFlagUseWebRTC];
initWithTitle:l10n_util::GetNSString(IDS_ACTIONBAR_HELP) [RemotingPreferences.instance
icon:RemotingTheme.helpIcon setBool:newValue
action:^{ forFlag:RemotingFlagUseWebRTC];
[AppDelegate.instance presentHelpCenter]; [RemotingPreferences.instance synchronizeFlags];
}], NSString* message =
] ]; [NSString stringWithFormat:@"Using WebRTC: %s",
newValue ? "Yes" : "No"];
[MDCSnackbarManager
showMessage:[MDCSnackbarMessage
messageWithText:message]];
}],
],
#endif // !defined(NDEBUG)
@[
[[SideMenuItem alloc]
initWithTitle:l10n_util::GetNSString(IDS_ACTIONBAR_SEND_FEEDBACK)
icon:RemotingTheme.feedbackIcon
action:^{
[AppDelegate.instance
presentFeedbackFlowWithContext:kFeedbackContext];
}],
[[SideMenuItem alloc]
initWithTitle:l10n_util::GetNSString(IDS_ACTIONBAR_HELP)
icon:RemotingTheme.helpIcon
action:^{
[AppDelegate.instance presentHelpCenter];
}],
]
];
}); });
return items; return items;
} }
......
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
@class HostSettings; @class HostSettings;
typedef NSString* RemotingFlag NS_STRING_ENUM;
extern RemotingFlag const RemotingFlagUseWebRTC;
// |RemotingPreferences| is the centralized place to ask for information about // |RemotingPreferences| is the centralized place to ask for information about
// defaults and prefrences. // defaults and prefrences.
@interface RemotingPreferences : NSObject @interface RemotingPreferences : NSObject
...@@ -16,6 +19,12 @@ ...@@ -16,6 +19,12 @@
- (HostSettings*)settingsForHost:(NSString*)hostId; - (HostSettings*)settingsForHost:(NSString*)hostId;
- (void)setSettings:(HostSettings*)settings forHost:(NSString*)hostId; - (void)setSettings:(HostSettings*)settings forHost:(NSString*)hostId;
- (id)objectForFlag:(RemotingFlag)flag;
- (void)setObject:(id)object forFlag:(RemotingFlag)flag;
- (BOOL)boolForFlag:(RemotingFlag)flag;
- (void)setBool:(BOOL)value forFlag:(RemotingFlag)flag;
- (void)synchronizeFlags;
// Access to the singleton shared instance from this property. // Access to the singleton shared instance from this property.
@property(nonatomic, readonly, class) RemotingPreferences* instance; @property(nonatomic, readonly, class) RemotingPreferences* instance;
......
...@@ -16,6 +16,13 @@ ...@@ -16,6 +16,13 @@
static NSString* const kActiveUserKey = @"kActiveUserKey"; static NSString* const kActiveUserKey = @"kActiveUserKey";
static NSString* const kHostSettingsKey = @"kHostSettingsKey"; static NSString* const kHostSettingsKey = @"kHostSettingsKey";
static NSString* const kFlagKey = @"kFlagKey";
RemotingFlag const RemotingFlagUseWebRTC = @"UseWebRTC";
static NSString* KeyWithPrefix(NSString* prefix, NSString* key) {
return [NSString stringWithFormat:@"%@-%@", prefix, key];
}
@interface RemotingPreferences () { @interface RemotingPreferences () {
NSUserDefaults* _defaults; NSUserDefaults* _defaults;
...@@ -45,9 +52,8 @@ static NSString* const kHostSettingsKey = @"kHostSettingsKey"; ...@@ -45,9 +52,8 @@ static NSString* const kHostSettingsKey = @"kHostSettingsKey";
#pragma mark - RemotingPreferences Implementation #pragma mark - RemotingPreferences Implementation
- (HostSettings*)settingsForHost:(NSString*)hostId { - (HostSettings*)settingsForHost:(NSString*)hostId {
NSString* key = NSData* encodedSettings =
[NSString stringWithFormat:@"%@-%@", kHostSettingsKey, hostId]; [_defaults objectForKey:KeyWithPrefix(kHostSettingsKey, hostId)];
NSData* encodedSettings = [_defaults objectForKey:key];
HostSettings* settings = HostSettings* settings =
[NSKeyedUnarchiver unarchiveObjectWithData:encodedSettings]; [NSKeyedUnarchiver unarchiveObjectWithData:encodedSettings];
if (settings == nil) { if (settings == nil) {
...@@ -59,8 +65,7 @@ static NSString* const kHostSettingsKey = @"kHostSettingsKey"; ...@@ -59,8 +65,7 @@ static NSString* const kHostSettingsKey = @"kHostSettingsKey";
} }
- (void)setSettings:(HostSettings*)settings forHost:(NSString*)hostId { - (void)setSettings:(HostSettings*)settings forHost:(NSString*)hostId {
NSString* key = NSString* key = KeyWithPrefix(kHostSettingsKey, hostId);
[NSString stringWithFormat:@"%@-%@", kHostSettingsKey, hostId];
if (settings) { if (settings) {
NSData* encodedSettings = NSData* encodedSettings =
[NSKeyedArchiver archivedDataWithRootObject:settings]; [NSKeyedArchiver archivedDataWithRootObject:settings];
...@@ -71,6 +76,32 @@ static NSString* const kHostSettingsKey = @"kHostSettingsKey"; ...@@ -71,6 +76,32 @@ static NSString* const kHostSettingsKey = @"kHostSettingsKey";
[_defaults synchronize]; [_defaults synchronize];
} }
- (id)objectForFlag:(RemotingFlag)flag {
NSString* key = KeyWithPrefix(kFlagKey, flag);
return [_defaults objectForKey:key];
}
- (void)setObject:(id)object forFlag:(RemotingFlag)flag {
[_defaults setObject:object forKey:KeyWithPrefix(kFlagKey, flag)];
}
- (BOOL)boolForFlag:(RemotingFlag)flag {
NSNumber* oldObject = [self objectForFlag:flag];
if (!oldObject) {
return NO;
}
DCHECK([oldObject isKindOfClass:[NSNumber class]]);
return oldObject.boolValue;
}
- (void)setBool:(BOOL)value forFlag:(RemotingFlag)flag {
[self setObject:@(value) forFlag:flag];
}
- (void)synchronizeFlags {
[_defaults synchronize];
}
#pragma mark - Properties #pragma mark - Properties
- (void)setActiveUserKey:(NSString*)activeUserKey { - (void)setActiveUserKey:(NSString*)activeUserKey {
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#import "remoting/ios/domain/client_session_details.h" #import "remoting/ios/domain/client_session_details.h"
#import "remoting/ios/domain/host_info.h" #import "remoting/ios/domain/host_info.h"
#import "remoting/ios/keychain_wrapper.h" #import "remoting/ios/keychain_wrapper.h"
#import "remoting/ios/persistence/remoting_preferences.h"
#include "base/strings/sys_string_conversions.h" #include "base/strings/sys_string_conversions.h"
#include "remoting/client/chromoting_client_runtime.h" #include "remoting/client/chromoting_client_runtime.h"
...@@ -114,7 +115,11 @@ NSString* const kHostSessionPin = @"kHostSessionPin"; ...@@ -114,7 +115,11 @@ NSString* const kHostSessionPin = @"kHostSessionPin";
// TODO(nicholss): I am not sure about the following fields yet. // TODO(nicholss): I am not sure about the following fields yet.
// info.capabilities = // info.capabilities =
// info.flags = if ([RemotingPreferences.instance boolForFlag:RemotingFlagUseWebRTC]) {
info.flags = "useWebrtc";
[MDCSnackbarManager
showMessage:[MDCSnackbarMessage messageWithText:@"Using WebRTC"]];
}
remoting::protocol::ClientAuthenticationConfig client_auth_config; remoting::protocol::ClientAuthenticationConfig client_auth_config;
client_auth_config.host_id = info.host_id; client_auth_config.host_id = info.host_id;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment