package io.filepicker; import android.app.Fragment; import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.CookieManager; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import io.filepicker.api.FpApiClient; import io.filepicker.utils.SessionUtils; /** * Created by maciejwitowski on 10/23/14. */ public class AuthFragment extends Fragment { private static final String AUTH_OPEN = "open/?auth=true"; private String providerUrl; private WebView webViewAuth; private ProgressBar mProgressBar; public static AuthFragment newInstance(String providerUrl) { AuthFragment frag = new AuthFragment(); Bundle args = new Bundle(); args.putString(Filepicker.NODE_EXTRA, providerUrl); frag.setArguments(args); return frag; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(false); providerUrl = getArguments().getString(Filepicker.NODE_EXTRA); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_auth, container, false); mProgressBar = (ProgressBar) rootView.findViewById(R.id.progressBarAuth); webViewAuth = (WebView) rootView.findViewById(R.id.webViewAuth); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { CookieManager.getInstance().setAcceptThirdPartyCookies(webViewAuth, true); } return rootView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { webViewAuth.getSettings().setJavaScriptEnabled(true); webViewAuth.setWebViewClient(new AuthWebviewClient()); String url = buildServiceAuthUrl(); webViewAuth.loadUrl(url); hideProgressBar(); } private String buildServiceAuthUrl() { return FpApiClient.DIALOG_ENDPOINT + FpApiClient.API_CLIENT_URL + providerUrl + FpApiClient.AUTH_OPEN_URL; } Contract getContract() { return (Contract) getActivity(); } private class AuthWebviewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.contains(AUTH_OPEN)) { SessionUtils.setSessionCookie(getActivity()); if (getContract() != null) { getContract().proceedAfterAuth(); } return true; } else { return false; } } } private void hideProgressBar() { if (mProgressBar != null) { mProgressBar.setVisibility(View.GONE); } } public interface Contract { void proceedAfterAuth(); } }