mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-02 07:45:40 +00:00
117 lines
4.0 KiB
Java
117 lines
4.0 KiB
Java
package com.limelight;
|
|
|
|
import android.app.Activity;
|
|
import android.graphics.Bitmap;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.webkit.WebView;
|
|
import android.webkit.WebViewClient;
|
|
import android.window.OnBackInvokedCallback;
|
|
import android.window.OnBackInvokedDispatcher;
|
|
|
|
import com.limelight.utils.SpinnerDialog;
|
|
|
|
public class HelpActivity extends Activity {
|
|
|
|
private SpinnerDialog loadingDialog;
|
|
private WebView webView;
|
|
|
|
private boolean backCallbackRegistered;
|
|
private OnBackInvokedCallback onBackInvokedCallback;
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
|
onBackInvokedCallback = new OnBackInvokedCallback() {
|
|
@Override
|
|
public void onBackInvoked() {
|
|
// We should always be able to go back because we unregister our callback
|
|
// when we can't go back. Nonetheless, we will still check anyway.
|
|
if (webView.canGoBack()) {
|
|
webView.goBack();
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
webView = new WebView(this);
|
|
setContentView(webView);
|
|
|
|
// These allow the user to zoom the page
|
|
webView.getSettings().setBuiltInZoomControls(true);
|
|
webView.getSettings().setDisplayZoomControls(false);
|
|
|
|
// This sets the view to display the whole page by default
|
|
webView.getSettings().setUseWideViewPort(true);
|
|
webView.getSettings().setLoadWithOverviewMode(true);
|
|
|
|
// This allows the links to places on the same page to work
|
|
webView.getSettings().setJavaScriptEnabled(true);
|
|
|
|
webView.setWebViewClient(new WebViewClient() {
|
|
@Override
|
|
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
|
if (loadingDialog == null) {
|
|
loadingDialog = SpinnerDialog.displayDialog(HelpActivity.this,
|
|
getResources().getString(R.string.help_loading_title),
|
|
getResources().getString(R.string.help_loading_msg), false);
|
|
}
|
|
|
|
refreshBackDispatchState();
|
|
}
|
|
|
|
@Override
|
|
public void onPageFinished(WebView view, String url) {
|
|
if (loadingDialog != null) {
|
|
loadingDialog.dismiss();
|
|
loadingDialog = null;
|
|
}
|
|
|
|
refreshBackDispatchState();
|
|
}
|
|
});
|
|
|
|
webView.loadUrl(getIntent().getData().toString());
|
|
}
|
|
|
|
private void refreshBackDispatchState() {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
|
if (webView.canGoBack() && !backCallbackRegistered) {
|
|
getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
|
|
OnBackInvokedDispatcher.PRIORITY_DEFAULT, onBackInvokedCallback);
|
|
backCallbackRegistered = true;
|
|
}
|
|
else if (!webView.canGoBack() && backCallbackRegistered) {
|
|
getOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(onBackInvokedCallback);
|
|
backCallbackRegistered = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onDestroy() {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
|
if (backCallbackRegistered) {
|
|
getOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(onBackInvokedCallback);
|
|
}
|
|
}
|
|
|
|
super.onDestroy();
|
|
}
|
|
|
|
@Override
|
|
// NOTE: This will NOT be called on Android 13+ with android:enableOnBackInvokedCallback="true"
|
|
public void onBackPressed() {
|
|
// Back goes back through the WebView history
|
|
// until no more history remains
|
|
if (webView.canGoBack()) {
|
|
webView.goBack();
|
|
}
|
|
else {
|
|
super.onBackPressed();
|
|
}
|
|
}
|
|
}
|