/*
* Copyright (C) 2013 Paragon Software Group
* Author: Andrey Tumanov <Andrey_Tumanov@penreader.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
package com.paragon.dictionary.fbreader;
import java.io.FileOutputStream;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebView;
import android.widget.*;
import com.paragon.open.dictionary.api.*;
import org.geometerplus.zlibrary.core.util.MiscUtil;
import org.geometerplus.zlibrary.ui.android.R;
public class OpenDictionaryActivity extends Activity {
public final static String OPEN_DICTIONARY_QUERY_KEY = "open_dictionary_query";
public final static String OPEN_DICTIONARY_HEIGHT_KEY = "open_dictionary_height";
public final static String OPEN_DICTIONARY_GRAVITY_KEY = "open_dictionary_gravity";
private WebView myArticleView = null;
private TextView myTitleLabel = null;
private ImageButton myOpenDictionaryButton = null;
private String myQuery = null;
private int myHeight;
private int myGravity;
private static Dictionary ourDictionary = null;
static void setDictionary(Dictionary dictionary) {
ourDictionary = dictionary;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.opendictionary_flyout);
myArticleView = (WebView) findViewById(R.id.opendictionary_article_view);
myTitleLabel = (TextView) findViewById(R.id.opendictionary_title_label);
myOpenDictionaryButton = (ImageButton) findViewById(R.id.opendictionary_open_button);
myOpenDictionaryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
openTextInDictionary(myQuery);
}
});
}
@Override
protected void onResume() {
super.onResume();
myQuery = getIntent().getStringExtra(OPEN_DICTIONARY_QUERY_KEY);
if (myQuery == null)
myQuery = "";
myHeight = getIntent().getIntExtra(OPEN_DICTIONARY_HEIGHT_KEY, -1);
myGravity = getIntent().getIntExtra(OPEN_DICTIONARY_GRAVITY_KEY, android.view.Gravity.BOTTOM);
setViewSize(myHeight, myGravity);
myArticleView.loadData("", "text/text", "UTF-8");
if (ourDictionary != null) {
myTitleLabel.setText(ourDictionary.getName());
Log.d("FBReader", "OpenDictionaryActivity: get translation as text");
ourDictionary.getTranslationAsText(myQuery, TranslateMode.SHORT, TranslateFormat.HTML, new Dictionary.TranslateAsTextListener() {
@Override
public void onComplete(String s, TranslateMode translateMode) {
final String url = saveArticle(s.replace("</BODY>", "<br><br></BODY>"), getApplicationContext());
if (MiscUtil.isEmptyString(url)) {
openTextInDictionary(myQuery);
} else {
myArticleView.loadUrl(url);
}
Log.d("FBReader", "OpenDictionaryActivity: translation ready");
}
@Override
public void onWordNotFound(ArrayList<String> similarWords) {
finish();
openTextInDictionary(myQuery);
Log.d("FBReader", "OpenDictionaryActivity: word not found");
}
@Override
public void onError(com.paragon.open.dictionary.api.Error error) {
finish();
Log.e("FBReader", error.getName());
Log.e("FBReader", error.getMessage());
}
@Override
public void onIPCError(String s) {
finish();
Log.e("FBReader", s);
}
});
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setViewSize(myHeight, myGravity);
}
private void setViewSize(int height, int gravity) {
final DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
if (height < 0)
height = metrics.heightPixels / 3;
TableRow bottomRow = (TableRow)findViewById(R.id.bottom_row);
TableRow topRow = (TableRow)findViewById(R.id.top_row);
View.OnTouchListener touchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
finish();
return false;
}
};
topRow.setOnTouchListener(touchListener);
bottomRow.setOnTouchListener(touchListener);
switch (gravity) {
case android.view.Gravity.TOP:
topRow.setMinimumHeight(0);
bottomRow.setMinimumHeight(metrics.heightPixels - height);
break;
case android.view.Gravity.BOTTOM:
default:
bottomRow.setMinimumHeight(0);
topRow.setMinimumHeight(metrics.heightPixels - height);
break;
}
}
private void openTextInDictionary(String text) {
if (ourDictionary != null)
ourDictionary.showTranslation(text);
}
private String saveArticle(String data, Context context) {
final String filename = "open_dictionary_article.html";
final FileOutputStream outputStream;
try {
outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(data.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
return null;
}
return "file://" + context.getFilesDir().getAbsolutePath() + "/" + filename;
}
}