150 lines
4.4 KiB
Java
150 lines
4.4 KiB
Java
package org.moire.ultrasonic.fragment;
|
|
|
|
import android.graphics.Bitmap;
|
|
import android.os.Bundle;
|
|
import android.view.KeyEvent;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.webkit.WebView;
|
|
import android.webkit.WebViewClient;
|
|
import android.widget.Button;
|
|
import android.widget.ImageView;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.moire.ultrasonic.R;
|
|
import org.moire.ultrasonic.util.Util;
|
|
|
|
/**
|
|
* Displays online help and about information in a WebView
|
|
*/
|
|
public class AboutFragment extends Fragment {
|
|
|
|
private WebView webView;
|
|
private ImageView backButton;
|
|
private ImageView forwardButton;
|
|
private SwipeRefreshLayout swipeRefresh;
|
|
|
|
@Override
|
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
|
Util.applyTheme(this.getContext());
|
|
super.onCreate(savedInstanceState);
|
|
}
|
|
|
|
@Override
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
|
return inflater.inflate(R.layout.help, container, false);
|
|
}
|
|
|
|
@Override
|
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
|
|
|
swipeRefresh = view.findViewById(R.id.help_refresh);
|
|
swipeRefresh.setEnabled(false);
|
|
|
|
webView = view.findViewById(R.id.help_contents);
|
|
webView.getSettings().setJavaScriptEnabled(true);
|
|
webView.setWebViewClient(new HelpClient());
|
|
|
|
if (savedInstanceState != null)
|
|
{
|
|
webView.restoreState(savedInstanceState);
|
|
}
|
|
else
|
|
{
|
|
webView.loadUrl(getResources().getString(R.string.help_url));
|
|
}
|
|
|
|
backButton = view.findViewById(R.id.help_back);
|
|
backButton.setOnClickListener(new Button.OnClickListener()
|
|
{
|
|
@Override
|
|
public void onClick(View view)
|
|
{
|
|
webView.goBack();
|
|
}
|
|
});
|
|
|
|
ImageView stopButton = view.findViewById(R.id.help_stop);
|
|
stopButton.setOnClickListener(new Button.OnClickListener()
|
|
{
|
|
@Override
|
|
public void onClick(View view)
|
|
{
|
|
webView.stopLoading();
|
|
swipeRefresh.setRefreshing(false);
|
|
}
|
|
});
|
|
|
|
forwardButton = view.findViewById(R.id.help_forward);
|
|
forwardButton.setOnClickListener(new Button.OnClickListener()
|
|
{
|
|
@Override
|
|
public void onClick(View view)
|
|
{
|
|
webView.goForward();
|
|
}
|
|
});
|
|
|
|
// TODO: Nicer Back key handling?
|
|
webView.setFocusableInTouchMode(true);
|
|
webView.requestFocus();
|
|
webView.setOnKeyListener( new View.OnKeyListener()
|
|
{
|
|
@Override
|
|
public boolean onKey( View v, int keyCode, KeyEvent event )
|
|
{
|
|
if (keyCode == KeyEvent.KEYCODE_BACK)
|
|
{
|
|
if (webView.canGoBack())
|
|
{
|
|
webView.goBack();
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
} );
|
|
}
|
|
|
|
@Override
|
|
public void onSaveInstanceState(@NotNull Bundle state)
|
|
{
|
|
webView.saveState(state);
|
|
super.onSaveInstanceState(state);
|
|
}
|
|
|
|
private final class HelpClient extends WebViewClient
|
|
{
|
|
@Override
|
|
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
|
swipeRefresh.setRefreshing(true);
|
|
super.onPageStarted(view, url, favicon);
|
|
}
|
|
|
|
@Override
|
|
public void onPageFinished(WebView view, String url)
|
|
{
|
|
swipeRefresh.setRefreshing(false);
|
|
String versionName = Util.getVersionName(getContext());
|
|
String title = String.format("%s (%s)", view.getTitle(), versionName);
|
|
|
|
FragmentTitle.Companion.setTitle(AboutFragment.this, title);
|
|
|
|
backButton.setEnabled(view.canGoBack());
|
|
forwardButton.setEnabled(view.canGoForward());
|
|
}
|
|
|
|
@Override
|
|
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
|
|
{
|
|
Util.toast(getContext(), description);
|
|
}
|
|
}
|
|
}
|