From 8a44a9688b2c3bc523cbbb46ea9bb37f067f4dff Mon Sep 17 00:00:00 2001 From: artdeell Date: Sun, 22 Aug 2021 16:09:45 +0300 Subject: [PATCH] Make Microsoft Login a full-screen webview --- .../src/main/AndroidManifest.xml | 4 +- .../kdt/pojavlaunch/PojavLoginActivity.java | 73 ++++++++++--------- .../ui/MicrosoftLoginGUIActivity.java | 69 ++++++++++++++++++ 3 files changed, 111 insertions(+), 35 deletions(-) create mode 100644 app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/ui/MicrosoftLoginGUIActivity.java diff --git a/app_pojavlauncher/src/main/AndroidManifest.xml b/app_pojavlauncher/src/main/AndroidManifest.xml index b21901cf4..b643d52f4 100644 --- a/app_pojavlauncher/src/main/AndroidManifest.xml +++ b/app_pojavlauncher/src/main/AndroidManifest.xml @@ -69,7 +69,9 @@ android:screenOrientation="sensorLandscape" android:name=".CustomControlsActivity" android:configChanges="keyboardHidden|orientation|screenSize|keyboard|navigation"/> - + { - try { - MultiRTUtils.installRuntimeNamed(getContentResolver().openInputStream(uri), BaseLauncherActivity.getFileName(this,uri), - (resid, stuff) ->PojavLoginActivity.this.runOnUiThread( - () -> {if(startupTextView!=null)startupTextView.setText(PojavLoginActivity.this.getString(resid,stuff));})); - synchronized (mLockSelectJRE) { - mLockSelectJRE.notifyAll(); + if(resultCode == Activity.RESULT_OK) { + if (requestCode == MultiRTConfigDialog.MULTIRT_PICK_RUNTIME_STARTUP) { + if (data != null) { + final Uri uri = data.getData(); + Thread t = new Thread(() -> { + try { + MultiRTUtils.installRuntimeNamed(getContentResolver().openInputStream(uri), BaseLauncherActivity.getFileName(this, uri), + (resid, stuff) -> PojavLoginActivity.this.runOnUiThread( + () -> { + if (startupTextView != null) + startupTextView.setText(PojavLoginActivity.this.getString(resid, stuff)); + })); + synchronized (mLockSelectJRE) { + mLockSelectJRE.notifyAll(); + } + } catch (IOException e) { + Tools.showError(PojavLoginActivity.this + , e); } - }catch (IOException e) { - Tools.showError(PojavLoginActivity.this - ,e); - } - }); - t.start(); + }); + t.start(); + } + }else if(requestCode == MicrosoftLoginGUIActivity.AUTHENTICATE_MICROSOFT_REQUEST) { + //Log.i("MicroLoginWrap","Got microsoft login result:" + data); + performMicroLogin(data); } } } @@ -411,18 +420,15 @@ public class PojavLoginActivity extends BaseActivity public void loginMicrosoft(View view) { - CustomTabs.openTab(this, - "https://login.live.com/oauth20_authorize.srf" + - "?client_id=00000000402b5328" + - "&response_type=code" + - "&scope=service%3A%3Auser.auth.xboxlive.com%3A%3AMBI_SSL" + - "&redirect_url=https%3A%2F%2Flogin.live.com%2Foauth20_desktop.srf"); + Intent i = new Intent(this,MicrosoftLoginGUIActivity.class); + startActivityForResult(i,MicrosoftLoginGUIActivity.AUTHENTICATE_MICROSOFT_REQUEST); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - + } + public void performMicroLogin(Intent intent) { Uri data = intent.getData(); //Log.i("MicroAuth", data.toString()); if (data != null && data.getScheme().equals("ms-xal-00000000402b5328") && data.getHost().equals("auth")) { @@ -436,22 +442,21 @@ public class PojavLoginActivity extends BaseActivity } else { String code = data.getQueryParameter("code"); new MicrosoftAuthTask(this, new RefreshListener(){ - @Override - public void onFailed(Throwable e) { - Tools.showError(PojavLoginActivity.this, e); - } + @Override + public void onFailed(Throwable e) { + Tools.showError(PojavLoginActivity.this, e); + } - @Override - public void onSuccess(MinecraftAccount b) { - mProfile = b; - playProfile(false); - } - }).execute("false", code); + @Override + public void onSuccess(MinecraftAccount b) { + mProfile = b; + playProfile(false); + } + }).execute("false", code); // Toast.makeText(this, "Logged in to Microsoft account, but NYI", Toast.LENGTH_LONG).show(); } } } - private View getViewFromList(int pos, ListView listView) { final int firstItemPos = listView.getFirstVisiblePosition(); final int lastItemPos = firstItemPos + listView.getChildCount() - 1; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/ui/MicrosoftLoginGUIActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/ui/MicrosoftLoginGUIActivity.java new file mode 100644 index 000000000..6285cbb59 --- /dev/null +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/authenticator/microsoft/ui/MicrosoftLoginGUIActivity.java @@ -0,0 +1,69 @@ +package net.kdt.pojavlaunch.authenticator.microsoft.ui; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Bundle; +import android.util.Log; +import android.view.ViewGroup; +import android.webkit.WebResourceRequest; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import androidx.appcompat.app.AppCompatActivity; + +import net.kdt.pojavlaunch.R; + +public class MicrosoftLoginGUIActivity extends AppCompatActivity { + public static final int AUTHENTICATE_MICROSOFT_REQUEST = 60; + WebView webView; + ProgressDialog waitDialog; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + waitDialog = new ProgressDialog(this); + waitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); + waitDialog.setIndeterminate(true); + waitDialog.setMessage(getString(R.string.global_waiting)); + webView = new WebView(this); + webView.setWebViewClient(new WebViewTrackClient()); + WebSettings settings = webView.getSettings(); + settings.setJavaScriptEnabled(true); + webView.loadUrl("https://login.live.com/oauth20_authorize.srf" + + "?client_id=00000000402b5328" + + "&response_type=code" + + "&scope=service%3A%3Auser.auth.xboxlive.com%3A%3AMBI_SSL" + + "&redirect_url=https%3A%2F%2Flogin.live.com%2Foauth20_desktop.srf"); + setContentView(webView); + } + class WebViewTrackClient extends WebViewClient { + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if(url.startsWith("ms-xal-00000000402b5328")) { + Intent data = new Intent(); + data.setData(Uri.parse(url)); + if(waitDialog.isShowing()) waitDialog.dismiss(); + setResult(Activity.RESULT_OK,data); + finish(); + return true; + }else{ + return super.shouldOverrideUrlLoading(view, url); + } + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + //super.onPageStarted(view, url, favicon); + if(!waitDialog.isShowing()) waitDialog.show(); + } + + @Override + public void onPageFinished(WebView view, String url) { + waitDialog.hide(); + } + } +}