public void CheckSocialAccountAuthorizationStatus(NSString accountTypeIdentifier) { if (accountStore == null) { accountStore = new ACAccountStore(); } ACAccountType socialAccount = accountStore.FindAccountType(accountTypeIdentifier); DataClass dataClass; if (accountTypeIdentifier == ACAccountType.Facebook) { dataClass = DataClass.Facebook; } else if (accountTypeIdentifier == ACAccountType.Twitter) { dataClass = DataClass.Twitter; } else if (accountTypeIdentifier == ACAccountType.SinaWeibo) { dataClass = DataClass.SinaWeibo; } else { dataClass = DataClass.TencentWeibo; } ShowAlert(dataClass, socialAccount.AccessGranted ? "granted" : "denied"); }
public override void ViewWillAppear(bool animated) { base.ViewWillAppear(animated); // Update UI based on state SendTweet.Enabled = isTwitterAvailable; RequestTwitterTimeline.Enabled = false; PostToFacebook.Enabled = isFacebookAvailable; RequestFacebookTimeline.Enabled = false; // Initialize Twitter Account access var accountStore = new ACAccountStore(); var accountType = accountStore.FindAccountType(ACAccountType.Twitter); // Request access to Twitter account accountStore.RequestAccess(accountType, null, (granted, error) => { // Allowed by user? if (granted) { // Get account if (accountStore.Accounts.Length == 0) { return; } twitterAccount = accountStore.Accounts [accountStore.Accounts.Length - 1]; InvokeOnMainThread(() => { // Update UI RequestTwitterTimeline.Enabled = true; }); } }); // Initialize facebook Account access var options = new AccountStoreOptions(); options.FacebookAppId = ""; // Enter your specific Facebook App ID here accountType = accountStore.FindAccountType(ACAccountType.Facebook); // Request access to Facebook account accountStore.RequestAccess(accountType, options, (granted, error) => { // Allowed by user? if (granted) { if (accountStore.Accounts.Length == 0) { return; } // Get account facebookAccount = accountStore.Accounts [accountStore.Accounts.Length - 1]; InvokeOnMainThread(() => { // Update UI RequestFacebookTimeline.Enabled = true; }); } }); }
public Task RequestAccess() { AccountStoreOptions options = GetOptions(); ACAccountType account = accountStore.FindAccountType(socialNetwork); var tcs = new TaskCompletionSource <object> (); accountStore.RequestAccess(account, options, (granted, error) => tcs.SetResult(null)); return(tcs.Task); }
private void retrievedAccounts(bool granted, NSError error) { ACAccount[] accounts = accountStore.FindAccounts(accountStore.FindAccountType(ACAccountType.Twitter)); if (!granted || error != null || accounts == null || accounts.Length == 0) { handleManualAuth(); } else { tryNextAccount(); } }
ACAccountStore accountStore; // Save this reference since ACAccounts are only good so long as it's alive public override Task <IEnumerable <Account> > GetAccountsAsync() { if (accountStore == null) { accountStore = new ACAccountStore(); } var store = new ACAccountStore(); var at = store.FindAccountType(ACAccountType.Twitter); var tcs = new TaskCompletionSource <IEnumerable <Account> > (); store.RequestAccess(at, (granted, error) => { if (granted) { var accounts = store.FindAccounts(at) .Select(a => (Account) new ACAccountWrapper(a, store)) .ToList(); tcs.SetResult(accounts); } else { tcs.SetResult(new Account [0]); } }); return(tcs.Task); }
private async Task LoadAccountAsync() { if (account != null) { return; } if (loadingAccount != null) { await Task.WhenAny(loadingAccount); return; } Debug.WriteLine("Accessing Twitter Account..."); WorkStarted?.Invoke(this, EventArgs.Empty); var type = accountStore.FindAccountType(ACAccountType.Twitter); var result = await accountStore.RequestAccessAsync(type, null); if (result.Item1) { account = accountStore.Accounts[0]; Debug.WriteLine($"Access granted: {account.Username}"); } else { Debug.WriteLine("Access denied!"); } WorkFinished?.Invoke(this, EventArgs.Empty); loadingAccount = null; }
public void TestFacebookAuth() { var sg = new SyncGateway("http", GetReplicationServer()); using (var remoteDb = sg.CreateDatabase("facebook")) { remoteDb.DisableGuestAccess(); var doneEvent = new ManualResetEvent(false); var accountStore = new ACAccountStore(); var accountType = accountStore.FindAccountType(ACAccountType.Facebook); var options = new AccountStoreOptions(); options.FacebookAppId = FacebookAppId; options.SetPermissions(ACFacebookAudience.Friends, new [] { "email" }); var success = true; ACAccount account = null; accountStore.RequestAccess(accountType, options, (result, error) => { success = result; if (success) { var accounts = accountStore.FindAccounts(accountType); account = accounts != null && accounts.Length > 0 ? accounts[0] : null; } else { Log.W(Tag, "Facebook Login needed. Go to Settings > Facebook and login."); Log.E(Tag, "Facebook Request Access Error : " + error); } doneEvent.Set(); }); doneEvent.WaitOne(TimeSpan.FromSeconds(30)); Assert.IsTrue(success); Assert.IsNotNull(account); var token = account.Credential.OAuthToken; Assert.IsNotNull(token); Assert.IsTrue(token.Length > 0); var url = remoteDb.RemoteUri; Replication replicator = database.CreatePushReplication(url); replicator.Authenticator = AuthenticatorFactory.CreateFacebookAuthenticator(token); Assert.IsNotNull(replicator); Assert.IsNotNull(replicator.Authenticator); Assert.IsTrue(replicator.Authenticator is TokenAuthenticator); CreateDocuments(database, 20); RunReplication(replicator); var urlStr = url.ToString(); urlStr = urlStr.EndsWith("/") ? urlStr : urlStr + "/"; //var cookies = httpClientFactory.GetCookieContainer().GetCookies(new Uri(urlStr)); //Assert.IsTrue(cookies.Count == 1); //Assert.AreEqual("SyncGatewaySession", cookies[0].Name); } }
private Tuple <string, string> verifyFacebookFromSerttings() { Tuple <string, string> signedInResult = Tuple.Create <string, string>(string.Empty, string.Empty); AutoResetEvent taskCompleted = new AutoResetEvent(false); var options = new AccountStoreOptions() { FacebookAppId = "1626108114272416" }; options.SetPermissions(ACFacebookAudience.Friends, new[] { "public_profile", "email" }); ACAccountStore accountStore = new ACAccountStore(); var accountType = accountStore.FindAccountType(ACAccountType.Facebook); var facebookAccounts = accountStore.FindAccounts(accountType); if ((facebookAccounts == null) || (facebookAccounts.Length == 0)) { accountStore.RequestAccess(accountType, options, (granted, error2) => { if (granted) { facebookAccounts = accountStore.FindAccounts(accountType); } taskCompleted.Set(); }); taskCompleted.WaitOne(); } if ((facebookAccounts != null) && (facebookAccounts.Length > 0)) { var facebookAccount = facebookAccounts[0]; accountStore.RenewCredentials(facebookAccount, (result, error1) => { if (result == ACAccountCredentialRenewResult.Renewed) { var id = parseFacebookUserIdFromSettings(facebookAccount); if (!string.IsNullOrEmpty(id)) { signedInResult = Tuple.Create <string, string>(facebookAccount.Credential.OAuthToken, id); } } taskCompleted.Set(); }); } else { taskCompleted.Set(); } taskCompleted.WaitOne(); return(signedInResult); }
public ACAccountWrapper (ACAccount account, ACAccountStore store) { if (account == null) { throw new ArgumentNullException ("account"); } this.ACAccount = account; this.store = store; this.isTwitterAccount = account.AccountType.Identifier == store.FindAccountType (ACAccountType.Twitter).Identifier; }
public ACAccountWrapper(ACAccount account, ACAccountStore store) { if (account == null) { throw new ArgumentNullException("account"); } this.ACAccount = account; this.store = store; this.isTwitterAccount = account.AccountType.Identifier == store.FindAccountType(ACAccountType.Twitter).Identifier; }
public override void ViewWillAppear (bool animated) { base.ViewWillAppear (animated); // Update UI based on state SendTweet.Enabled = isTwitterAvailable; RequestTwitterTimeline.Enabled = false; PostToFacebook.Enabled = isFacebookAvailable; RequestFacebookTimeline.Enabled = false; // Initialize Twitter Account access var accountStore = new ACAccountStore (); var accountType = accountStore.FindAccountType (ACAccountType.Twitter); // Request access to Twitter account accountStore.RequestAccess (accountType, null, (granted, error) => { // Allowed by user? if (granted) { // Get account if (accountStore.Accounts.Length == 0) return; twitterAccount = accountStore.Accounts [accountStore.Accounts.Length - 1]; InvokeOnMainThread (() => { // Update UI RequestTwitterTimeline.Enabled = true; }); } }); // Initialize facebook Account access var options = new AccountStoreOptions (); options.FacebookAppId = ""; // Enter your specific Facebook App ID here accountType = accountStore.FindAccountType (ACAccountType.Facebook); // Request access to Facebook account accountStore.RequestAccess (accountType, options, (granted, error) => { // Allowed by user? if (granted) { if (accountStore.Accounts.Length == 0) return; // Get account facebookAccount = accountStore.Accounts [accountStore.Accounts.Length - 1]; InvokeOnMainThread (() => { // Update UI RequestFacebookTimeline.Enabled = true; }); } }); }
private void HandleTwitterAuth(object sender, EventArgs args) { if (HardwareDetection.RunningiOS5OrHigher) { //if we are running iOS5 or later, we can use the in-built API for handling twitter authentication. accountStore = new ACAccountStore(); accountStore.RequestAccess(accountStore.FindAccountType(ACAccountType.Twitter), retrievedAccounts); } else { HandleTwitterOAuth(); } }
public void Manual_HasMultipleAccounts () { var store = new ACAccountStore (); var at = store.FindAccountType (ACAccountType.Twitter); store.RequestAccess (at, (granted, error) => { if (granted) { var accounts = store.FindAccounts (at); Assert.That (accounts.Length, Is.GreaterThanOrEqualTo (2)); } }); }
public void Manual_HasMultipleAccounts() { var store = new ACAccountStore(); var at = store.FindAccountType(ACAccountType.Twitter); store.RequestAccess(at, (granted, error) => { if (granted) { var accounts = store.FindAccounts(at); Assert.That(accounts.Length, Is.GreaterThanOrEqualTo(2)); } }); }
async Task <bool> LoginTwitterOld() { #if __IOS__ var store = new ACAccountStore(); var accountType = store.FindAccountType(ACAccountType.Twitter); var success = false; var result = await store.RequestAccessAsync(accountType); success = result.Item1; if (!success) { Settings.TwitterEnabled = false; return(false); } var accounts = store.FindAccounts(accountType); if ((accounts?.Length ?? 0) == 0) { Settings.TwitterEnabled = false; return(false); } if (accounts?.Length == 1) { Settings.TwitterEnabled = true; var a = accounts[0]; Settings.TwitterAccount = a.Identifier; Settings.TwitterDisplay = a.UserFullName; return(true); } var sheet = new MusicPlayer.iOS.Controls.ActionSheet("Twitter"); var sheetTask = new TaskCompletionSource <bool>(); foreach (var a in accounts) { sheet.Add(a.Identifier, () => { Settings.TwitterEnabled = true; Settings.TwitterAccount = a.Identifier; Settings.TwitterDisplay = a.UserFullName; sheetTask.TrySetResult(true); }); } sheet.Add(Strings.Nevermind, null, true); sheet.Show(AppDelegate.window.RootViewController, AppDelegate.window.RootViewController.View); #endif return(false); }
public static void getAccount() { if (twitterAccount != null) return; ACAccountStore accountStore = new ACAccountStore(); ACAccountType accountTypeTwitter = accountStore.FindAccountType(ACAccountType.Twitter); accountStore.RequestAccess(accountTypeTwitter, (granted, error) => { if (!granted) return; ACAccount[] accounts = accountStore.FindAccounts(accountTypeTwitter); if (accounts.Length > 0) twitterAccount = accounts[0]; }); }
public string CheckSocialAccountAuthorizationStatus(string accountTypeIdentifier) { ACAccountType socialAccount = accountStore.FindAccountType(accountTypeIdentifier); return(socialAccount.AccessGranted ? "granted" : "denied"); }
/// <summary> U3DXT internal. </summary> protected DirectRequestService(string accountType, string serviceType) { _service = new ACAccountStore(); _accountType = _service.FindAccountType(accountType); _serviceType = serviceType; }
public void TestFacebookAuth() { var doneEvent = new ManualResetEvent(false); var accountStore = new ACAccountStore(); var accountType = accountStore.FindAccountType(ACAccountType.Facebook); var options = new AccountStoreOptions(); options.FacebookAppId = FacebookAppId; options.SetPermissions(ACFacebookAudience.Friends, new [] { "email" }); var success = true; ACAccount account = null; accountStore.RequestAccess(accountType, options, (result, error) => { success = result; if (success) { var accounts = accountStore.FindAccounts(accountType); account = accounts != null && accounts.Length > 0 ? accounts[0] : null; } else { Log.W(Tag, "Facebook Login needed. Go to Settings > Facebook and login."); Log.E(Tag, "Facebook Request Access Error : " + error); } doneEvent.Set(); }); doneEvent.WaitOne(TimeSpan.FromSeconds(30)); Assert.IsTrue(success); Assert.IsNotNull(account); var token = account.Credential.OAuthToken; Assert.IsNotNull(token); Assert.IsTrue(token.Length > 0); var url = GetReplicationURLWithoutCredentials(); var cookieStore = new CookieStore(); var httpClientFactory = new CouchbaseLiteHttpClientFactory(cookieStore); manager.DefaultHttpClientFactory = httpClientFactory; Replication replicator = database.CreatePushReplication(url); replicator.Authenticator = AuthenticatorFactory.CreateFacebookAuthenticator(token); Assert.IsNotNull(replicator); Assert.IsNotNull(replicator.Authenticator); Assert.IsTrue(replicator.Authenticator is TokenAuthenticator); replicator.Start(); doneEvent.Reset(); Task.Factory.StartNew(() => { var timeout = DateTime.UtcNow + TimeSpan.FromSeconds(30); while (DateTime.UtcNow < timeout) { if (!replicator.active) { break; } System.Threading.Thread.Sleep(TimeSpan.FromMilliseconds(10)); } doneEvent.Set(); }); doneEvent.WaitOne(TimeSpan.FromSeconds(35)); var urlStr = url.ToString(); urlStr = urlStr.EndsWith("/") ? urlStr : urlStr + "/"; var cookies = httpClientFactory.GetCookieContainer().GetCookies(new Uri(urlStr)); Assert.IsTrue(cookies.Count == 1); Assert.AreEqual("SyncGatewaySession", cookies[0].Name); }
ACAccountStore accountStore; // Save this reference since ACAccounts are only good so long as it's alive public override Task<IEnumerable<Account>> GetAccountsAsync () { if (accountStore == null) { accountStore = new ACAccountStore (); } var store = new ACAccountStore (); var at = store.FindAccountType (ACAccountType.Twitter); var tcs = new TaskCompletionSource<IEnumerable<Account>> (); store.RequestAccess (at, (granted, error) => { if (granted) { var accounts = store.FindAccounts (at) .Select (a => (Account) new ACAccountWrapper (a, store)) .ToList (); tcs.SetResult (accounts); } else { tcs.SetResult (new Account [0]); } }); return tcs.Task; }
public async Task<IEnumerable<Account>> GetTwitterHandleAsync() { var store = new ACAccountStore(); var accountType = store.FindAccountType(ACAccountType.Twitter); var allowed = await store.RequestAccessAsync(accountType, null); return !allowed.Item1 ? null : store.FindAccounts(accountType).Select(CreateTwitterUser).ToList(); }
protected override string CheckAccess() { ACAccountType socialAccount = accountStore.FindAccountType(socialNetwork); return(socialAccount.AccessGranted ? "granted" : "denied"); }
public void TestFacebookAuth() { var sg = new SyncGateway("http", GetReplicationServer()); using (var remoteDb = sg.CreateDatabase("facebook")) { remoteDb.DisableGuestAccess(); var doneEvent = new ManualResetEvent(false); var accountStore = new ACAccountStore(); var accountType = accountStore.FindAccountType(ACAccountType.Facebook); var options = new AccountStoreOptions(); options.FacebookAppId = FacebookAppId; options.SetPermissions(ACFacebookAudience.Friends, new [] { "email" }); var success = true; ACAccount account = null; accountStore.RequestAccess(accountType, options, (result, error) => { success = result; if (success) { var accounts = accountStore.FindAccounts(accountType); account = accounts != null && accounts.Length > 0 ? accounts[0] : null; } else { Log.W(Tag, "Facebook Login needed. Go to Settings > Facebook and login."); Log.E(Tag, "Facebook Request Access Error : " + error); } doneEvent.Set(); }); doneEvent.WaitOne(TimeSpan.FromSeconds(30)); Assert.IsTrue(success); Assert.IsNotNull(account); var token = account.Credential.OAuthToken; Assert.IsNotNull(token); Assert.IsTrue(token.Length > 0); var url = remoteDb.RemoteUri; var cookieStore = new CookieStore(manager.Directory); var httpClientFactory = new CouchbaseLiteHttpClientFactory(cookieStore); manager.DefaultHttpClientFactory = httpClientFactory; Replication replicator = database.CreatePushReplication(url); replicator.Authenticator = AuthenticatorFactory.CreateFacebookAuthenticator(token); Assert.IsNotNull(replicator); Assert.IsNotNull(replicator.Authenticator); Assert.IsTrue(replicator.Authenticator is TokenAuthenticator); CreateDocuments(database, 20); RunReplication(replicator); var urlStr = url.ToString(); urlStr = urlStr.EndsWith("/") ? urlStr : urlStr + "/"; //var cookies = httpClientFactory.GetCookieContainer().GetCookies(new Uri(urlStr)); //Assert.IsTrue(cookies.Count == 1); //Assert.AreEqual("SyncGatewaySession", cookies[0].Name); } }
/// <summary> U3DXT internal. </summary> protected DirectRequestService(string accountType, string serviceType) { _service = new ACAccountStore(); _accountType = _service.FindAccountType(accountType); _serviceType = serviceType; }
public void TestFacebookAuth() { var doneEvent = new ManualResetEvent(false); var accountStore = new ACAccountStore(); var accountType = accountStore.FindAccountType(ACAccountType.Facebook); var options = new AccountStoreOptions(); options.FacebookAppId = FacebookAppId; options.SetPermissions(ACFacebookAudience.Friends, new [] { "email" }); var success = true; ACAccount account = null; accountStore.RequestAccess(accountType, options, (result, error) => { success = result; if (success) { var accounts = accountStore.FindAccounts(accountType); account = accounts != null && accounts.Length > 0 ? accounts[0] : null; } else { Log.W(Tag, "Facebook Login needed. Go to Settings > Facebook and login."); Log.E(Tag, "Facebook Request Access Error : " + error); } doneEvent.Set(); }); doneEvent.WaitOne(TimeSpan.FromSeconds(30)); Assert.IsTrue(success); Assert.IsNotNull(account); var token = account.Credential.OAuthToken; Assert.IsNotNull(token); Assert.IsTrue(token.Length > 0); var url = GetReplicationURLWithoutCredentials(); var cookieStore = new CookieStore(); var httpClientFactory = new CouchbaseLiteHttpClientFactory(cookieStore); manager.DefaultHttpClientFactory = httpClientFactory; Replication replicator = database.CreatePushReplication(url); replicator.Authenticator = AuthenticatorFactory.CreateFacebookAuthenticator(token); Assert.IsNotNull(replicator); Assert.IsNotNull(replicator.Authenticator); Assert.IsTrue(replicator.Authenticator is TokenAuthenticator); replicator.Start(); doneEvent.Reset(); Task.Factory.StartNew(()=> { var timeout = DateTime.UtcNow + TimeSpan.FromSeconds(30); while (DateTime.UtcNow < timeout) { if (!replicator.active) { break; } System.Threading.Thread.Sleep(TimeSpan.FromMilliseconds(10)); } doneEvent.Set(); }); doneEvent.WaitOne(TimeSpan.FromSeconds(35)); var urlStr = url.ToString(); urlStr = urlStr.EndsWith("/") ? urlStr : urlStr + "/"; var cookies = httpClientFactory.GetCookieContainer().GetCookies(new Uri(urlStr)); Assert.IsTrue(cookies.Count == 1); Assert.AreEqual("SyncGatewaySession", cookies[0].Name); }
public SettingViewController() : base(UITableViewStyle.Plain, null) { Title = Strings.Settings; accountsSection = new MenuSection("Accounts") { (addNewAccountElement = new SettingsElement("Add Streaming Service", async() => { try{ var vc = new ServicePickerViewController(); this.PresentModalViewController(new UINavigationController(vc), true); var service = await vc.GetServiceTypeAsync(); await ApiManager.Shared.CreateAndLogin(service); UpdateAccounts(); } catch (TaskCanceledException) { } catch (Exception ex) { Console.WriteLine(ex); } })), (lastFmElement = string.IsNullOrEmpty(ApiConstants.LastFmApiKey) ? null : new SettingsSwitch("Last.FM", Settings.LastFmEnabled)), (twitterScrobbleElement = new SettingsSwitch("Auto Tweet", Settings.TwitterEnabled) { Detail = Settings.TwitterDisplay }), new SettingsSwitch("Import iPod Music", Settings.IncludeIpod) { ValueUpdated = ToggleIPod }, new MenuHelpTextElement( "Automatically imports and plays music from your local library. This saves data and space on your phone."), }; Root = new RootElement(Strings.Settings) { accountsSection, new MenuSection(Strings.Playback) { new SettingsSwitch(Strings.EnableLikeOnTheLockScreen, Settings.ThubsUpOnLockScreen) { ValueUpdated = (b => { Settings.ThubsUpOnLockScreen = b; RemoteControlHandler.SetupThumbsUp(); }) }, new MenuHelpTextElement(Strings.EnableLikeHint), new SettingsSwitch(Strings.EnableGaplessPlayback, Settings.ThubsUpOnLockScreen) { ValueUpdated = (b => { Settings.ThubsUpOnLockScreen = b; RemoteControlHandler.SetupThumbsUp(); }) }, new MenuHelpTextElement(Strings.EnableGapplessHint), new SettingsSwitch(Strings.PlayVideosWhenAvailable, Settings.PreferVideos) { ValueUpdated = (b => { Settings.PreferVideos = b; }) }, new MenuHelpTextElement(Strings.PlaysMusicVideoHint), new SettingsSwitch(Strings.PlayCleanVersionsOfSongs, Settings.FilterExplicit) { ValueUpdated = (b => { Settings.FilterExplicit = b; }) }, new MenuHelpTextElement(Strings.PlayesCleanVersionOfSongsHint), }, new MenuSection(Strings.Streaming) { new SettingsSwitch(Strings.DisableAllAccess, Settings.DisableAllAccess) { ValueUpdated = (on) => { Settings.DisableAllAccess = on; } }, new MenuHelpTextElement(Strings.DisableAllAccessHint), (CreateQualityPicker(Strings.CellularAudioQuality, Settings.MobileStreamQuality, (q) => Settings.MobileStreamQuality = q)), (CreateQualityPicker(Strings.WifiAudioQuality, Settings.WifiStreamQuality, (q) => Settings.WifiStreamQuality = q)), (CreateQualityPicker(Strings.VideoQuality, Settings.VideoStreamQuality, (q) => Settings.VideoStreamQuality = q)), (CreateQualityPicker(Strings.OfflineAudioQuality, Settings.DownloadStreamQuality, (q) => Settings.DownloadStreamQuality = q)), new MenuHelpTextElement(Strings.QualityHints) }, new MenuSection(Strings.Feedback) { new SettingsElement(Strings.SendFeedback, SendFeedback) { TextColor = iOS.Style.DefaultStyle.MainTextColor }, new SettingsElement($"{Strings.PleaseRate} {AppDelegate.AppName}", RateAppStore) { TextColor = iOS.Style.DefaultStyle.MainTextColor }, (ratingMessage = new MenuHelpTextElement(Strings.NobodyHasRatedYet)) }, new MenuSection(Strings.Settings) { CreateThemePicker("Theme"), new SettingsElement(Strings.ResyncDatabase, () => { Settings.ResetApiModes(); ApiManager.Shared.ReSync(); }), new MenuHelpTextElement(Strings.ResyncDatabaseHint), new SettingsElement(Strings.DownloadQueue, () => NavigationController.PushViewController(new DownloadViewController(), true)), (songsElement = new SettingsElement(Strings.SongsCount)) } }; if (lastFmElement != null) { lastFmElement.ValueUpdated = async b => { if (!b) { Settings.LastFmEnabled = false; ScrobbleManager.Shared.LogOut(); return; } var success = false; try { success = await ScrobbleManager.Shared.LoginToLastFm(); } catch (TaskCanceledException ex) { lastFmElement.Value = Settings.LastFmEnabled = false; TableView.ReloadData(); return; } Settings.LastFmEnabled = success; if (success) { return; } lastFmElement.Value = false; ReloadData(); App.ShowAlert($"{Strings.ErrorLoggingInto} Last.FM", Strings.PleaseTryAgain); }; } twitterScrobbleElement.ValueUpdated = async b => { if (!b) { Settings.TwitterEnabled = false; Settings.TwitterDisplay = ""; Settings.TwitterAccount = ""; twitterScrobbleElement.Detail = ""; return; } var store = new ACAccountStore(); var accountType = store.FindAccountType(ACAccountType.Twitter); var success = false; var result = await store.RequestAccessAsync(accountType); success = result.Item1; if (!success) { Settings.TwitterEnabled = false; twitterScrobbleElement.Value = false; ReloadData(); return; } var accounts = store.FindAccounts(accountType); if ((accounts?.Length ?? 0) == 0) { Settings.TwitterEnabled = false; twitterScrobbleElement.Value = false; ReloadData(); return; } if (accounts?.Length == 1) { Settings.TwitterEnabled = true; var a = accounts[0]; Settings.TwitterAccount = a.Identifier; twitterScrobbleElement.Detail = Settings.TwitterDisplay = a.UserFullName; ReloadData(); return; } var sheet = new ActionSheet("Twitter"); foreach (var a in accounts) { sheet.Add(a.Identifier, () => { Settings.TwitterEnabled = true; Settings.TwitterAccount = a.Identifier; twitterScrobbleElement.Detail = Settings.TwitterDisplay = a.UserFullName; ReloadData(); }); } sheet.Add(Strings.Nevermind, null, true); sheet.Show(this, TableView); }; }