001package com.gigya.android.sdk.ui;
002
003import android.annotation.SuppressLint;
004import android.app.Dialog;
005import android.graphics.Color;
006import android.graphics.drawable.ColorDrawable;
007import android.os.Bundle;
008import android.support.annotation.NonNull;
009import android.support.annotation.Nullable;
010import android.support.v4.app.DialogFragment;
011import android.view.LayoutInflater;
012import android.view.View;
013import android.view.ViewGroup;
014import android.view.Window;
015import android.view.WindowManager;
016import android.webkit.WebSettings;
017import android.webkit.WebView;
018import android.widget.ProgressBar;
019import android.widget.TextView;
020
021import com.gigya.android.sdk.R;
022
023import java.util.HashMap;
024import java.util.Map;
025
026public abstract class WebViewFragment extends DialogFragment {
027
028    private static final String LOG_TAG = "WebViewFragment";
029
030    public static final String ARG_PARAMS = "arg_params";
031
032    // Content views.
033    protected WebView _webView;
034    protected ProgressBar _progressBar;
035    protected HashMap<String, Object> _params;
036
037    // Style parameters.
038    protected boolean _fullScreen;
039    @Nullable
040    protected String _url, _body, _redirectPrefix, _title;
041
042    protected abstract void parseArguments();
043
044    @Override
045    public void onCreate(@Nullable Bundle savedInstanceState) {
046        super.onCreate(savedInstanceState);
047        parseArguments();
048    }
049
050    @NonNull
051    @Override
052    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
053        Dialog dialog = super.onCreateDialog(savedInstanceState);
054        if (dialog.getWindow() != null) {
055            dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
056        }
057        return dialog;
058    }
059
060    protected void dismissAndFinish() {
061        _webView.post(new Runnable() {
062            @Override
063            public void run() {
064                if (getActivity() != null) {
065                    getActivity().onBackPressed();
066                }
067            }
068        });
069    }
070
071
072    @Nullable
073    @Override
074    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
075        if (getActivity() == null) {
076            return null;
077        }
078        return inflater.inflate(R.layout.gigya_fragment_webview, container, false);
079    }
080
081    @Override
082    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
083        super.onViewCreated(view, savedInstanceState);
084
085        // Reference views.
086        _webView = view.findViewById(R.id.web_frag_web_view);
087        _progressBar = view.findViewById(R.id.web_frag_progress_bar);
088        // Title text view.
089        final TextView titleTextView = view.findViewById(R.id.web_frag_title_text);
090        if (_title != null) {
091            titleTextView.setVisibility(View.VISIBLE);
092            titleTextView.setText(_title);
093        } else {
094            titleTextView.setVisibility(View.GONE);
095        }
096
097        setUpWebView();
098    }
099
100    @SuppressLint("SetJavaScriptEnabled")
101    protected void setUpWebView() {
102        final WebSettings webSettings = _webView.getSettings();
103        webSettings.setJavaScriptEnabled(true);
104        webSettings.setAllowFileAccess(true);
105    }
106
107    @Override
108    public void onStart() {
109        super.onStart();
110        final Dialog dialog = getDialog();
111        if (dialog != null) {
112            final Window window = dialog.getWindow();
113            if (window != null) {
114                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
115                final Bundle args = getArguments();
116                if (args != null) {
117                    // Check fullscreen mode request.
118                    final boolean fullScreen = args.getBoolean(Presenter.ARG_STYLE_SHOW_FULL_SCREEN, false);
119                    if (fullScreen) {
120                        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
121                        window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
122                    }
123                }
124            }
125        }
126    }
127
128    public interface WebViewFragmentLifecycleCallbacks {
129
130        void onWebViewResult(Map<String, Object> result);
131
132        void onWebViewCancel();
133
134    }
135}