Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / ui / folio / fragment / DictionaryFragment.java
diff --git a/Android/folioreader/src/main/java/com/folioreader/ui/folio/fragment/DictionaryFragment.java b/Android/folioreader/src/main/java/com/folioreader/ui/folio/fragment/DictionaryFragment.java
new file mode 100755 (executable)
index 0000000..4d4b42a
--- /dev/null
@@ -0,0 +1,225 @@
+package com.folioreader.ui.folio.fragment;
+
+import android.app.Dialog;
+import android.app.SearchManager;
+import android.content.Intent;
+import android.media.MediaPlayer;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.DialogFragment;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.Button;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import com.folioreader.Constants;
+import com.folioreader.R;
+import com.folioreader.model.dictionary.Dictionary;
+import com.folioreader.model.dictionary.Wikipedia;
+import com.folioreader.ui.base.DictionaryCallBack;
+import com.folioreader.ui.base.DictionaryTask;
+import com.folioreader.ui.base.WikipediaCallBack;
+import com.folioreader.ui.base.WikipediaTask;
+import com.folioreader.ui.folio.adapter.DictionaryAdapter;
+
+import java.io.IOException;
+
+/**
+ * @author gautam chibde on 4/7/17.
+ */
+
+public class DictionaryFragment extends DialogFragment implements DictionaryCallBack, WikipediaCallBack {
+
+    private static final String TAG = "DictionaryFragment";
+
+    private String word;
+
+    private MediaPlayer mediaPlayer;
+    private RecyclerView dictResults;
+    private TextView noNetwork, dictionary, wikipedia, wikiWord, def;
+    private ProgressBar progressBar;
+    private Button googleSearch;
+    private LinearLayout wikiLayout;
+    private WebView wikiWebView;
+    private DictionaryAdapter mAdapter;
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);
+        word = getArguments().getString(Constants.SELECTED_WORD);
+        mediaPlayer = new MediaPlayer();
+    }
+
+    @Override
+    public void onActivityCreated(Bundle arg0) {
+        super.onActivityCreated(arg0);
+        getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
+    }
+
+    @Nullable
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.layout_dictionary, container);
+    }
+
+    @Override
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        noNetwork = (TextView) view.findViewById(R.id.no_network);
+        progressBar = (ProgressBar) view.findViewById(R.id.progress);
+        dictResults = (RecyclerView) view.findViewById(R.id.rv_dict_results);
+
+        googleSearch = (Button) view.findViewById(R.id.btn_google_search);
+        dictionary = (TextView) view.findViewById(R.id.btn_dictionary);
+        wikipedia = (TextView) view.findViewById(R.id.btn_wikipedia);
+
+        wikiLayout = (LinearLayout) view.findViewById(R.id.ll_wiki);
+        wikiWord = (TextView) view.findViewById(R.id.tv_word);
+        def = (TextView) view.findViewById(R.id.tv_def);
+        wikiWebView = (WebView) view.findViewById(R.id.wv_wiki);
+        wikiWebView.getSettings().setLoadsImagesAutomatically(true);
+        wikiWebView.setWebViewClient(new WebViewClient());
+        wikiWebView.getSettings().setJavaScriptEnabled(true);
+        wikiWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
+
+        dictionary.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                loadDictionary();
+            }
+        });
+
+        wikipedia.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                loadWikipedia();
+            }
+        });
+
+        googleSearch.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
+                intent.putExtra(SearchManager.QUERY, word);
+                startActivity(intent);
+            }
+        });
+
+        view.findViewById(R.id.btn_close).setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                dismiss();
+            }
+        });
+        dictResults.setLayoutManager(new LinearLayoutManager(getActivity()));
+        mAdapter = new DictionaryAdapter(getActivity(), this);
+        loadDictionary();
+    }
+
+    private void loadDictionary() {
+        if(noNetwork.getVisibility() == View.VISIBLE || googleSearch.getVisibility() == View.VISIBLE) {
+            noNetwork.setVisibility(View.GONE);
+            googleSearch.setVisibility(View.GONE);
+        }
+        wikiWebView.loadUrl("about:blank");
+        mAdapter.clear();
+        dictionary.setSelected(true);
+        wikipedia.setSelected(false);
+        wikiLayout.setVisibility(View.GONE);
+        dictResults.setVisibility(View.VISIBLE);
+        DictionaryTask task = new DictionaryTask(this);
+        String baseUrl = Constants.DICTIONARY_BASE_URL + word.trim();
+        task.execute(baseUrl);
+    }
+
+    private void loadWikipedia() {
+        if(noNetwork.getVisibility() == View.VISIBLE || googleSearch.getVisibility() == View.VISIBLE) {
+            noNetwork.setVisibility(View.GONE);
+            googleSearch.setVisibility(View.GONE);
+        }
+        wikiWebView.loadUrl("about:blank");
+        mAdapter.clear();
+        wikiLayout.setVisibility(View.VISIBLE);
+        dictResults.setVisibility(View.GONE);
+        dictionary.setSelected(false);
+        wikipedia.setSelected(true);
+        WikipediaTask task = new WikipediaTask(this);
+        task.execute(Constants.WIKIPEDIA_API_URL + word.trim());
+    }
+
+    @Override
+    public void onError() {
+        noNetwork.setVisibility(View.VISIBLE);
+        progressBar.setVisibility(View.GONE);
+        noNetwork.setText("offline");
+        googleSearch.setVisibility(View.GONE);
+    }
+
+    @Override
+    public void onDictionaryDataReceived(Dictionary dictionary) {
+        progressBar.setVisibility(View.GONE);
+        if (dictionary.getResults().isEmpty()) {
+            noNetwork.setVisibility(View.VISIBLE);
+            googleSearch.setVisibility(View.VISIBLE);
+            noNetwork.setText("Word not found");
+        } else {
+            mAdapter.setResults(dictionary.getResults());
+            dictResults.setAdapter(mAdapter);
+        }
+    }
+
+    @Override
+    public void onWikipediaDataReceived(Wikipedia wikipedia) {
+        wikiWord.setText(wikipedia.getWord());
+        if (wikipedia.getDefinition().trim().isEmpty()) {
+            def.setVisibility(View.GONE);
+        } else {
+            String definition = "\"" +
+                    wikipedia.getDefinition() +
+                    "\"";
+            def.setText(definition);
+        }
+        wikiWebView.loadUrl(wikipedia.getLink());
+    }
+
+    //TODO
+    @Override
+    public void playMedia(String url) {
+        if (mediaPlayer != null) {
+            try {
+                mediaPlayer.setDataSource(url);
+                mediaPlayer.prepare();
+                mediaPlayer.start();
+            } catch (IOException e) {
+                Log.e(TAG, "playMedia failed", e);
+            }
+        }
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+        Dialog d = getDialog();
+        if (d != null) {
+            d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+        }
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+        if (mediaPlayer.isPlaying()) {
+            mediaPlayer.stop();
+            mediaPlayer.release();
+        }
+    }
+}