Skip to content

Commit 96d3a64

Browse files
DaVinci9196WSTxda
authored andcommitted
fix: Fix entering account registration flow from microG signin (microg#3087)
(cherry picked from commit 645a7cc)
1 parent 66e1d85 commit 96d3a64

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import android.widget.RelativeLayout;
4545
import android.widget.TextView;
4646

47+
import androidx.annotation.Nullable;
4748
import androidx.annotation.StringRes;
4849
import androidx.webkit.WebSettingsCompat;
4950
import androidx.webkit.WebViewClientCompat;
@@ -52,6 +53,7 @@
5253
import com.google.android.gms.R;
5354

5455
import org.json.JSONArray;
56+
import org.microg.gms.accountsettings.ui.MainActivity;
5557
import org.microg.gms.auth.AuthConstants;
5658
import org.microg.gms.auth.AuthManager;
5759
import org.microg.gms.auth.AuthRequest;
@@ -67,6 +69,7 @@
6769
import java.io.IOException;
6870
import java.security.MessageDigest;
6971
import java.util.Locale;
72+
import java.util.Objects;
7073

7174
import static android.accounts.AccountManager.PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE;
7275
import 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();

play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/MainActivity.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ private val ALLOWED_WEB_PREFIXES = setOf(
112112
"https://policies.google.com/",
113113
"https://fit.google.com/privacy/settings",
114114
"https://maps.google.com/maps/timeline",
115+
"https://myadcenter.google.com/controls",
116+
"https://families.google.com/kidonboarding",
117+
"https://profilewidgets.google.com/alternate-profile/edit",
118+
"https://workspace.google.com/",
115119
)
116120

117121
private val ACTION_TO_SCREEN_ID = hashMapOf(

play-services-core/src/main/kotlin/org/microg/gms/accountsettings/ui/WebViewHelper.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import android.webkit.WebResourceRequest
1414
import android.webkit.WebSettings
1515
import android.webkit.WebView
1616
import androidx.appcompat.app.AppCompatActivity
17+
import androidx.core.net.toUri
1718
import androidx.lifecycle.lifecycleScope
1819
import androidx.webkit.WebResourceErrorCompat
1920
import androidx.webkit.WebViewClientCompat
@@ -57,6 +58,17 @@ class WebViewHelper(private val activity: AppCompatActivity, private val webView
5758
}
5859
return false
5960
}
61+
if (url.startsWith("sms:")) {
62+
try {
63+
val fixedUrl = url.replaceFirst("sms://", "sms:")
64+
val intent = Intent(Intent.ACTION_VIEW, fixedUrl.toUri())
65+
activity.startActivity(intent)
66+
return true
67+
} catch (e: Exception) {
68+
Log.w(TAG, "Failed to open SMS", e)
69+
}
70+
return false
71+
}
6072
if (allowedPrefixes.isNotEmpty() && allowedPrefixes.none { url.startsWith(it) }) {
6173
try {
6274
// noinspection UnsafeImplicitIntentLaunch

0 commit comments

Comments
 (0)