1 package com.folioreader.ui.folio.fragment;
3 import android.app.Dialog;
4 import android.app.SearchManager;
5 import android.content.Intent;
6 import android.media.MediaPlayer;
7 import android.os.Bundle;
8 import android.support.annotation.Nullable;
9 import android.support.v4.app.DialogFragment;
10 import android.support.v7.widget.LinearLayoutManager;
11 import android.support.v7.widget.RecyclerView;
12 import android.util.Log;
13 import android.view.LayoutInflater;
14 import android.view.View;
15 import android.view.ViewGroup;
16 import android.webkit.WebView;
17 import android.webkit.WebViewClient;
18 import android.widget.Button;
19 import android.widget.LinearLayout;
20 import android.widget.ProgressBar;
21 import android.widget.TextView;
23 import com.folioreader.Constants;
24 import com.folioreader.R;
25 import com.folioreader.model.dictionary.Dictionary;
26 import com.folioreader.model.dictionary.Wikipedia;
27 import com.folioreader.ui.base.DictionaryCallBack;
28 import com.folioreader.ui.base.DictionaryTask;
29 import com.folioreader.ui.base.WikipediaCallBack;
30 import com.folioreader.ui.base.WikipediaTask;
31 import com.folioreader.ui.folio.adapter.DictionaryAdapter;
33 import java.io.IOException;
36 * @author gautam chibde on 4/7/17.
39 public class DictionaryFragment extends DialogFragment implements DictionaryCallBack, WikipediaCallBack {
41 private static final String TAG = "DictionaryFragment";
45 private MediaPlayer mediaPlayer;
46 private RecyclerView dictResults;
47 private TextView noNetwork, dictionary, wikipedia, wikiWord, def;
48 private ProgressBar progressBar;
49 private Button googleSearch;
50 private LinearLayout wikiLayout;
51 private WebView wikiWebView;
52 private DictionaryAdapter mAdapter;
55 public void onCreate(@Nullable Bundle savedInstanceState) {
56 super.onCreate(savedInstanceState);
57 setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);
58 word = getArguments().getString(Constants.SELECTED_WORD);
59 mediaPlayer = new MediaPlayer();
63 public void onActivityCreated(Bundle arg0) {
64 super.onActivityCreated(arg0);
65 getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
70 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
71 return inflater.inflate(R.layout.layout_dictionary, container);
75 public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
76 super.onViewCreated(view, savedInstanceState);
77 noNetwork = (TextView) view.findViewById(R.id.no_network);
78 progressBar = (ProgressBar) view.findViewById(R.id.progress);
79 dictResults = (RecyclerView) view.findViewById(R.id.rv_dict_results);
81 googleSearch = (Button) view.findViewById(R.id.btn_google_search);
82 dictionary = (TextView) view.findViewById(R.id.btn_dictionary);
83 wikipedia = (TextView) view.findViewById(R.id.btn_wikipedia);
85 wikiLayout = (LinearLayout) view.findViewById(R.id.ll_wiki);
86 wikiWord = (TextView) view.findViewById(R.id.tv_word);
87 def = (TextView) view.findViewById(R.id.tv_def);
88 wikiWebView = (WebView) view.findViewById(R.id.wv_wiki);
89 wikiWebView.getSettings().setLoadsImagesAutomatically(true);
90 wikiWebView.setWebViewClient(new WebViewClient());
91 wikiWebView.getSettings().setJavaScriptEnabled(true);
92 wikiWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
94 dictionary.setOnClickListener(new View.OnClickListener() {
96 public void onClick(View v) {
101 wikipedia.setOnClickListener(new View.OnClickListener() {
103 public void onClick(View v) {
108 googleSearch.setOnClickListener(new View.OnClickListener() {
110 public void onClick(View v) {
111 Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
112 intent.putExtra(SearchManager.QUERY, word);
113 startActivity(intent);
117 view.findViewById(R.id.btn_close).setOnClickListener(new View.OnClickListener() {
119 public void onClick(View v) {
123 dictResults.setLayoutManager(new LinearLayoutManager(getActivity()));
124 mAdapter = new DictionaryAdapter(getActivity(), this);
128 private void loadDictionary() {
129 if(noNetwork.getVisibility() == View.VISIBLE || googleSearch.getVisibility() == View.VISIBLE) {
130 noNetwork.setVisibility(View.GONE);
131 googleSearch.setVisibility(View.GONE);
133 wikiWebView.loadUrl("about:blank");
135 dictionary.setSelected(true);
136 wikipedia.setSelected(false);
137 wikiLayout.setVisibility(View.GONE);
138 dictResults.setVisibility(View.VISIBLE);
139 DictionaryTask task = new DictionaryTask(this);
140 String baseUrl = Constants.DICTIONARY_BASE_URL + word.trim();
141 task.execute(baseUrl);
144 private void loadWikipedia() {
145 if(noNetwork.getVisibility() == View.VISIBLE || googleSearch.getVisibility() == View.VISIBLE) {
146 noNetwork.setVisibility(View.GONE);
147 googleSearch.setVisibility(View.GONE);
149 wikiWebView.loadUrl("about:blank");
151 wikiLayout.setVisibility(View.VISIBLE);
152 dictResults.setVisibility(View.GONE);
153 dictionary.setSelected(false);
154 wikipedia.setSelected(true);
155 WikipediaTask task = new WikipediaTask(this);
156 task.execute(Constants.WIKIPEDIA_API_URL + word.trim());
160 public void onError() {
161 noNetwork.setVisibility(View.VISIBLE);
162 progressBar.setVisibility(View.GONE);
163 noNetwork.setText("offline");
164 googleSearch.setVisibility(View.GONE);
168 public void onDictionaryDataReceived(Dictionary dictionary) {
169 progressBar.setVisibility(View.GONE);
170 if (dictionary.getResults().isEmpty()) {
171 noNetwork.setVisibility(View.VISIBLE);
172 googleSearch.setVisibility(View.VISIBLE);
173 noNetwork.setText("Word not found");
175 mAdapter.setResults(dictionary.getResults());
176 dictResults.setAdapter(mAdapter);
181 public void onWikipediaDataReceived(Wikipedia wikipedia) {
182 wikiWord.setText(wikipedia.getWord());
183 if (wikipedia.getDefinition().trim().isEmpty()) {
184 def.setVisibility(View.GONE);
186 String definition = "\"" +
187 wikipedia.getDefinition() +
189 def.setText(definition);
191 wikiWebView.loadUrl(wikipedia.getLink());
196 public void playMedia(String url) {
197 if (mediaPlayer != null) {
199 mediaPlayer.setDataSource(url);
200 mediaPlayer.prepare();
202 } catch (IOException e) {
203 Log.e(TAG, "playMedia failed", e);
209 public void onStart() {
211 Dialog d = getDialog();
213 d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
218 public void onStop() {
220 if (mediaPlayer.isPlaying()) {
222 mediaPlayer.release();