Last active
March 1, 2023 15:36
-
-
Save EdenStack/de679c9200be5d9816bf49ad51032f57 to your computer and use it in GitHub Desktop.
Webview with swipeRefreshLayout
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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