diff --git a/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java b/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java index c453a2d95b..9e63a92cf5 100644 --- a/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java +++ b/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java @@ -42,6 +42,7 @@ import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.webkit.WebViewClientCompat; @@ -49,6 +50,7 @@ import org.json.JSONArray; import org.microg.gms.accountaction.AccountNotificationKt; +import org.microg.gms.accountsettings.ui.MainActivity; import org.microg.gms.auth.AuthConstants; import org.microg.gms.auth.AuthManager; import org.microg.gms.auth.AuthRequest; @@ -74,6 +76,7 @@ import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; import static android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT; +import static org.microg.gms.accountsettings.ui.ExtensionsKt.EXTRA_URL; import static org.microg.gms.auth.AuthPrefs.isAuthVisible; import static org.microg.gms.common.Constants.GMS_PACKAGE_NAME; import static org.microg.gms.common.Constants.GMS_VERSION_CODE; @@ -94,10 +97,12 @@ public class LoginActivity extends AssistantActivity { private static final String EMBEDDED_RE_AUTH_URL = "https://accounts.google.com/embedded/reauth/v2/android"; private static final String PROGRAMMATIC_AUTH_URL = "https://accounts.google.com/o/oauth2/programmatic_auth"; private static final String GOOGLE_SUITE_URL = "https://accounts.google.com/signin/continue"; + private static final String GOOGLE_SIGNUP_URL = "https://accounts.google.com/signup"; private static final String MAGIC_USER_AGENT = " MinuteMaid"; private static final String COOKIE_OAUTH_TOKEN = "oauth_token"; private static final String ACTION_UPDATE_ACCOUNT = "com.google.android.gms.auth.GOOGLE_ACCOUNT_CHANGE"; private static final String PERMISSION_UPDATE_ACCOUNT = "com.google.android.gms.auth.permission.GOOGLE_ACCOUNT_CHANGE"; + private static final int REQUEST_CODE_SIGNUP = 1001; private final FidoHandler fidoHandler = new FidoHandler(this); private final DroidGuardHandler dgHandler = new DroidGuardHandler(this); @@ -124,6 +129,22 @@ protected void onCreate(Bundle savedInstanceState) { authContent = (ViewGroup) findViewById(R.id.auth_content); ((ViewGroup) findViewById(R.id.auth_root)).addView(webView); webView.setWebViewClient(new WebViewClientCompat() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + Log.d(TAG, "shouldOverrideUrlLoading: url: " + url); + Uri uri = Uri.parse(url); + String uriPath = uri.getPath(); + if (uriPath != null && uriPath.contains("/signup")) { + String biz = uri.getQueryParameter("biz"); + Intent intent = new Intent(LoginActivity.this, MainActivity.class); + intent.setPackage(GMS_PACKAGE_NAME); + intent.putExtra(EXTRA_URL, biz != null ? GOOGLE_SIGNUP_URL + "?biz=" + biz : GOOGLE_SIGNUP_URL); + startActivityForResult(intent, REQUEST_CODE_SIGNUP); + return true; + } + return super.shouldOverrideUrlLoading(view, url); + } + @Override public void onPageFinished(WebView view, String url) { Log.d(TAG, "pageFinished: " + view.getUrl()); @@ -178,6 +199,14 @@ public void onPageFinished(WebView view, String url) { } } + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == REQUEST_CODE_SIGNUP) { + webView.reload(); + } + } + @Override protected void onNextButtonClicked() { super.onNextButtonClicked(); diff --git a/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt b/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt index 09c12663e0..a1e5654356 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt @@ -153,6 +153,7 @@ private val ALLOWED_WEB_PREFIXES = setOf( "https://myadcenter.google.com/controls", "https://families.google.com/kidonboarding", "https://profilewidgets.google.com/alternate-profile/edit", + "https://workspace.google.com/", ) private val ACTION_TO_SCREEN_ID = hashMapOf( diff --git a/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/WebViewHelper.kt b/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/WebViewHelper.kt index 05430a7ff6..518d0faa72 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/WebViewHelper.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/WebViewHelper.kt @@ -96,6 +96,17 @@ class WebViewHelper(private val activity: MainActivity, private val webView: Web } return false } + if (url.startsWith("sms:")) { + try { + val fixedUrl = url.replaceFirst("sms://", "sms:") + val intent = Intent(Intent.ACTION_VIEW, fixedUrl.toUri()) + activity.startActivity(intent) + return true + } catch (e: Exception) { + Log.w(TAG, "Failed to open SMS", e) + } + return false + } val overrideUri = url.toUri() if (overrideUri.path?.endsWith("/signin/identifier") == true) { val intent = Intent(activity, LoginActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) }