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}