Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / ui / folio / fragment / DictionaryFragment.java
1 package com.folioreader.ui.folio.fragment;
2
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;
22
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;
32
33 import java.io.IOException;
34
35 /**
36  * @author gautam chibde on 4/7/17.
37  */
38
39 public class DictionaryFragment extends DialogFragment implements DictionaryCallBack, WikipediaCallBack {
40
41     private static final String TAG = "DictionaryFragment";
42
43     private String word;
44
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;
53
54     @Override
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();
60     }
61
62     @Override
63     public void onActivityCreated(Bundle arg0) {
64         super.onActivityCreated(arg0);
65         getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
66     }
67
68     @Nullable
69     @Override
70     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
71         return inflater.inflate(R.layout.layout_dictionary, container);
72     }
73
74     @Override
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);
80
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);
84
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);
93
94         dictionary.setOnClickListener(new View.OnClickListener() {
95             @Override
96             public void onClick(View v) {
97                 loadDictionary();
98             }
99         });
100
101         wikipedia.setOnClickListener(new View.OnClickListener() {
102             @Override
103             public void onClick(View v) {
104                 loadWikipedia();
105             }
106         });
107
108         googleSearch.setOnClickListener(new View.OnClickListener() {
109             @Override
110             public void onClick(View v) {
111                 Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
112                 intent.putExtra(SearchManager.QUERY, word);
113                 startActivity(intent);
114             }
115         });
116
117         view.findViewById(R.id.btn_close).setOnClickListener(new View.OnClickListener() {
118             @Override
119             public void onClick(View v) {
120                 dismiss();
121             }
122         });
123         dictResults.setLayoutManager(new LinearLayoutManager(getActivity()));
124         mAdapter = new DictionaryAdapter(getActivity(), this);
125         loadDictionary();
126     }
127
128     private void loadDictionary() {
129         if(noNetwork.getVisibility() == View.VISIBLE || googleSearch.getVisibility() == View.VISIBLE) {
130             noNetwork.setVisibility(View.GONE);
131             googleSearch.setVisibility(View.GONE);
132         }
133         wikiWebView.loadUrl("about:blank");
134         mAdapter.clear();
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);
142     }
143
144     private void loadWikipedia() {
145         if(noNetwork.getVisibility() == View.VISIBLE || googleSearch.getVisibility() == View.VISIBLE) {
146             noNetwork.setVisibility(View.GONE);
147             googleSearch.setVisibility(View.GONE);
148         }
149         wikiWebView.loadUrl("about:blank");
150         mAdapter.clear();
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());
157     }
158
159     @Override
160     public void onError() {
161         noNetwork.setVisibility(View.VISIBLE);
162         progressBar.setVisibility(View.GONE);
163         noNetwork.setText("offline");
164         googleSearch.setVisibility(View.GONE);
165     }
166
167     @Override
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");
174         } else {
175             mAdapter.setResults(dictionary.getResults());
176             dictResults.setAdapter(mAdapter);
177         }
178     }
179
180     @Override
181     public void onWikipediaDataReceived(Wikipedia wikipedia) {
182         wikiWord.setText(wikipedia.getWord());
183         if (wikipedia.getDefinition().trim().isEmpty()) {
184             def.setVisibility(View.GONE);
185         } else {
186             String definition = "\"" +
187                     wikipedia.getDefinition() +
188                     "\"";
189             def.setText(definition);
190         }
191         wikiWebView.loadUrl(wikipedia.getLink());
192     }
193
194     //TODO
195     @Override
196     public void playMedia(String url) {
197         if (mediaPlayer != null) {
198             try {
199                 mediaPlayer.setDataSource(url);
200                 mediaPlayer.prepare();
201                 mediaPlayer.start();
202             } catch (IOException e) {
203                 Log.e(TAG, "playMedia failed", e);
204             }
205         }
206     }
207
208     @Override
209     public void onStart() {
210         super.onStart();
211         Dialog d = getDialog();
212         if (d != null) {
213             d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
214         }
215     }
216
217     @Override
218     public void onStop() {
219         super.onStop();
220         if (mediaPlayer.isPlaying()) {
221             mediaPlayer.stop();
222             mediaPlayer.release();
223         }
224     }
225 }