Skip to content

Instantly share code, notes, and snippets.

@EdenStack
Last active March 1, 2023 15:36
Show Gist options
  • Save EdenStack/de679c9200be5d9816bf49ad51032f57 to your computer and use it in GitHub Desktop.
Save EdenStack/de679c9200be5d9816bf49ad51032f57 to your computer and use it in GitHub Desktop.
Webview with swipeRefreshLayout
package com.credit.checktool.ui;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.CookieManager;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.credit.checktool.R;
import static com.credit.checktool.common.SystemUtil.getPackageInfo;
public class WebviewFragment extends Fragment implements HomeActivity.BackPressedListener, SwipeRefreshLayout.OnRefreshListener {
private WebView mWebView;
private SwipeRefreshLayout mRefreshLayout;
private static final String WEB_URL = "https://www.v2ex.com";
private String mPreviewUrl;
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_webview, container, false);
mRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refreshLayout);
initFreshLayout();
mWebView = (WebView) view.findViewById(R.id.webView);
initWebView();
return view;
}
public WebviewFragment() {
}
public static WebviewFragment newInstance(String param1, String param2) {
WebviewFragment fragment = new WebviewFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
private void initFreshLayout() {
mRefreshLayout.setOnRefreshListener(this);
int colorPrimary = ContextCompat.getColor(getActivity(), R.color.colorPrimary);
int colorAccent = ContextCompat.getColor(getActivity(), R.color.colorAccent);
int colorPrimaryDark = ContextCompat.getColor(getActivity(), R.color.colorPrimaryDark);
mRefreshLayout.setColorSchemeColors(colorPrimary, colorAccent, colorPrimaryDark);
}
private void initWebView() {
mWebView.setWebViewClient(new CustWebViewClient());
mWebView.setWebChromeClient(new CustChromeClient());
CookieManager.getInstance().setAcceptCookie(true);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);
String cacheDirPath = getActivity().getFilesDir().getAbsolutePath() + "checktool";
webSettings.setDatabasePath(cacheDirPath);
webSettings.setAppCachePath(cacheDirPath);
webSettings.setDefaultTextEncodingName("utf-8");
webSettings.setAppCacheEnabled(true);
String userAgentString = webSettings.getUserAgentString();
userAgentString += " UDAndroid/" + getPackageInfo(getActivity()).versionName;
webSettings.setUserAgentString(userAgentString);
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);
webSettings.setDisplayZoomControls(false);
Log.d("WebviewFragment UA", webSettings.getUserAgentString());
mWebView.loadUrl(WEB_URL);
}
private long exitTime = 0;
private void doubleBack2Exit() {
if ((System.currentTimeMillis() - exitTime) > 3000) {
Snackbar.make(mWebView, getString(R.string.repress_to_exit), Snackbar.LENGTH_LONG)
.setAction(getString(R.string.close_btn_text), v -> getActivity().finish())
.show();
exitTime = System.currentTimeMillis();
} else {
getActivity().finish();
}
}
@Override
public void onPressed() {
if (mWebView.canGoBack() && !mWebView.getUrl().equals(mPreviewUrl)) {
mPreviewUrl = mWebView.getUrl();
mWebView.goBack();
} else {
mPreviewUrl = mWebView.getUrl();
doubleBack2Exit();
}
}
@Override
public void onRefresh() {
mWebView.reload();
}
class CustChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
Log.d("CustChromeClient", "newProgress:" + newProgress);
if (newProgress == 100) {
mRefreshLayout.setRefreshing(false);
}
super.onProgressChanged(view, newProgress);
}
}
class CustWebViewClient extends WebViewClient {
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
Log.d("CustWebViewClient", "error:" + error.toString());
mRefreshLayout.setRefreshing(false);
super.onReceivedError(view, request, error);
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
Log.d("CustWebViewClient", "errorResponse:" + errorResponse.getData());
mRefreshLayout.setRefreshing(false);
super.onReceivedHttpError(view, request, errorResponse);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
mRefreshLayout.setRefreshing(true);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
mRefreshLayout.setRefreshing(false);
super.onPageFinished(view, url);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment