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();
+ }
+ }
+}