4444import android .widget .RelativeLayout ;
4545import android .widget .TextView ;
4646
47+ import androidx .annotation .Nullable ;
4748import androidx .annotation .StringRes ;
4849import androidx .webkit .WebSettingsCompat ;
4950import androidx .webkit .WebViewClientCompat ;
5253import com .google .android .gms .R ;
5354
5455import org .json .JSONArray ;
56+ import org .microg .gms .accountsettings .ui .MainActivity ;
5557import org .microg .gms .auth .AuthConstants ;
5658import org .microg .gms .auth .AuthManager ;
5759import org .microg .gms .auth .AuthRequest ;
6769import java .io .IOException ;
6870import java .security .MessageDigest ;
6971import java .util .Locale ;
72+ import java .util .Objects ;
7073
7174import static android .accounts .AccountManager .PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE ;
7275import static android .accounts .AccountManager .VISIBILITY_USER_MANAGED_VISIBLE ;
@@ -94,8 +97,10 @@ public class LoginActivity extends AssistantActivity {
9497 private static final String EMBEDDED_SETUP_URL = "https://accounts.google.com/EmbeddedSetup" ;
9598 private static final String PROGRAMMATIC_AUTH_URL = "https://accounts.google.com/o/oauth2/programmatic_auth" ;
9699 private static final String GOOGLE_SUITE_URL = "https://accounts.google.com/signin/continue" ;
100+ private static final String GOOGLE_SIGNUP_URL = "https://accounts.google.com/signup" ;
97101 private static final String MAGIC_USER_AGENT = " MinuteMaid" ;
98102 private static final String COOKIE_OAUTH_TOKEN = "oauth_token" ;
103+ private static final int REQUEST_CODE_SIGNUP = 1001 ;
99104
100105 private WebView webView ;
101106 private String accountType ;
@@ -117,6 +122,24 @@ protected void onCreate(Bundle savedInstanceState) {
117122 authContent = (ViewGroup ) findViewById (R .id .auth_content );
118123 ((ViewGroup ) findViewById (R .id .auth_root )).addView (webView );
119124 webView .setWebViewClient (new WebViewClientCompat () {
125+
126+ @ SuppressWarnings ("deprecation" )
127+ @ Override
128+ public boolean shouldOverrideUrlLoading (WebView view , String url ) {
129+ Log .d (TAG , "shouldOverrideUrlLoading: url: " + url );
130+ Uri uri = Uri .parse (url );
131+ String uriPath = uri .getPath ();
132+ if (uriPath != null && uriPath .contains ("/signup" )) {
133+ String biz = uri .getQueryParameter ("biz" );
134+ Intent intent = new Intent (LoginActivity .this , MainActivity .class );
135+ intent .setPackage (GMS_PACKAGE_NAME );
136+ intent .putExtra ("extra.url" , biz != null ? GOOGLE_SIGNUP_URL + "?biz=" + biz : GOOGLE_SIGNUP_URL );
137+ startActivityForResult (intent , REQUEST_CODE_SIGNUP );
138+ return true ;
139+ }
140+ return super .shouldOverrideUrlLoading (view , url );
141+ }
142+
120143 @ Override
121144 public void onPageFinished (WebView view , String url ) {
122145 Log .d (TAG , "pageFinished: " + view .getUrl ());
@@ -151,7 +174,7 @@ public void onPageFinished(WebView view, String url) {
151174 if (getIntent ().hasExtra (EXTRA_TOKEN )) {
152175 if (getIntent ().hasExtra (EXTRA_EMAIL )) {
153176 AccountManager accountManager = AccountManager .get (this );
154- Account account = new Account (getIntent ().getStringExtra (EXTRA_EMAIL ), accountType );
177+ Account account = new Account (Objects . requireNonNull ( getIntent ().getStringExtra (EXTRA_EMAIL ) ), accountType );
155178 accountManager .addAccountExplicitly (account , getIntent ().getStringExtra (EXTRA_TOKEN ), null );
156179 if (isAuthVisible (this ) && SDK_INT >= 26 ) {
157180 accountManager .setAccountVisibility (account , PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE , VISIBILITY_USER_MANAGED_VISIBLE );
@@ -167,6 +190,13 @@ public void onPageFinished(WebView view, String url) {
167190 }
168191 }
169192
193+ protected void onActivityResult (int requestCode , int resultCode , @ Nullable Intent data ) {
194+ super .onActivityResult (requestCode , resultCode , data );
195+ if (requestCode == REQUEST_CODE_SIGNUP ) {
196+ webView .reload ();
197+ }
198+ }
199+
170200 @ Override
171201 protected void onNextButtonClicked () {
172202 super .onNextButtonClicked ();
0 commit comments