diff --git a/src/DodoSSH.Client.Android/App.axaml.cs b/src/DodoSSH.Client.Android/App.axaml.cs index 38a93f1..9b23117 100644 --- a/src/DodoSSH.Client.Android/App.axaml.cs +++ b/src/DodoSSH.Client.Android/App.axaml.cs @@ -246,11 +246,7 @@ public sealed partial class DodoSshApp : Avalonia.Application knownHosts, deviceKeys, - // Difference 4: the system browser by intent, and the response by intent too rather than on a - // loopback socket. See AndroidAuthorization for why the desktop's listener is not reused. - async (url, cancellationToken) => await ServerConnection - .SignInAsync(url, browser, TimeProvider.System, cancellationToken, ConfigureAndroidOidc) - .ConfigureAwait(false), + SignInThroughBrowser(browser), TimeProvider.System, connections, @@ -273,14 +269,7 @@ public sealed partial class DodoSshApp : Avalonia.Application updates: updates, - // Signing in to Spelunk comes back the way signing in to DodoSSH does — by intent, to the same - // registered scheme, at the dev.dodotech.dodossh:/callback Spelunk allows — and names this phone as - // the account's device list does, for difference 5's reason. - spelunkAccounts: new SpelunkAccounts( - browser, - path => new AndroidRedirectCallback(path), - TimeProvider.System, - PhoneEnvironment.DeviceName)); + spelunkAccounts: PhoneSpelunkAccounts(browser)); // Started rather than awaited: framework initialisation must not block on a schema migration. The // view model shows its own progress and handles its own failures. @@ -289,6 +278,23 @@ public sealed partial class DodoSshApp : Avalonia.Application return viewModel; } + /// + /// Difference 4: the system browser by intent, and the response by intent too rather than on a loopback + /// socket. See AndroidAuthorization for why the desktop's listener is not reused. + /// + private static MainWindowViewModel.SignInHandler SignInThroughBrowser(AndroidBrowserLauncher browser) => + async (url, cancellationToken) => await ServerConnection + .SignInAsync(url, browser, TimeProvider.System, cancellationToken, ConfigureAndroidOidc) + .ConfigureAwait(false); + + /// + /// Signing in to Spelunk comes back the way signing in to DodoSSH does — by intent, to the same registered + /// scheme, at the dev.dodotech.dodossh:/callback Spelunk allows — and names this phone as the account's + /// device list does, for difference 5's reason. + /// + private static SpelunkAccounts PhoneSpelunkAccounts(AndroidBrowserLauncher browser) => + new(browser, path => new AndroidRedirectCallback(path), TimeProvider.System, PhoneEnvironment.DeviceName); + /// /// Difference 4: where the authorization response comes back to. ///