2020-07-14 11:30:34 +02:00
|
|
|
package app.fedilab.android.activities;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.DialogInterface;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.SharedPreferences;
|
|
|
|
import android.net.Uri;
|
2020-07-14 12:00:58 +02:00
|
|
|
import android.os.Bundle;
|
2020-07-14 11:30:34 +02:00
|
|
|
import android.view.View;
|
|
|
|
import android.widget.Button;
|
|
|
|
import android.widget.LinearLayout;
|
|
|
|
import android.widget.ProgressBar;
|
|
|
|
import android.widget.TextView;
|
|
|
|
import android.widget.Toast;
|
|
|
|
|
|
|
|
import androidx.appcompat.app.AlertDialog;
|
|
|
|
import androidx.fragment.app.DialogFragment;
|
|
|
|
|
2020-07-14 12:00:58 +02:00
|
|
|
import com.github.stom79.localepicker.CountryPicker;
|
2020-07-14 11:30:34 +02:00
|
|
|
import com.github.stom79.mytransl.MyTransL;
|
|
|
|
import com.github.stom79.mytransl.client.HttpsConnectionException;
|
|
|
|
import com.github.stom79.mytransl.translate.Translate;
|
2020-07-14 12:00:58 +02:00
|
|
|
import com.vanniktech.emoji.EmojiPopup;
|
2020-07-14 11:30:34 +02:00
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
import app.fedilab.android.R;
|
|
|
|
import app.fedilab.android.helper.Helper;
|
|
|
|
import es.dmoral.toasty.Toasty;
|
|
|
|
|
|
|
|
/* Copyright 2020 Thomas Schneider
|
|
|
|
*
|
|
|
|
* This file is a part of Fedilab
|
|
|
|
*
|
|
|
|
* 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 3 of the
|
|
|
|
* License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* Fedilab 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 Fedilab; if not,
|
|
|
|
* see <http://www.gnu.org/licenses>. */
|
2020-07-14 12:13:36 +02:00
|
|
|
|
2020-07-14 11:30:34 +02:00
|
|
|
public class TootActivity extends BaseTootActivity{
|
2020-07-14 12:13:36 +02:00
|
|
|
|
|
|
|
private AlertDialog dialogTrans;
|
|
|
|
|
2020-07-14 11:30:34 +02:00
|
|
|
@Override
|
|
|
|
protected boolean actionTranslateClick() {
|
|
|
|
|
|
|
|
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
|
|
|
final CountryPicker picker = CountryPicker.newInstance(getString(R.string.which_language)); // dialog title
|
|
|
|
if (theme == Helper.THEME_LIGHT) {
|
|
|
|
picker.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog);
|
|
|
|
} else {
|
|
|
|
picker.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogDark);
|
|
|
|
}
|
|
|
|
if (toot_content.getText().length() == 0 && toot_cw_content.getText().length() == 0)
|
|
|
|
return true;
|
|
|
|
String dateString = sharedpreferences.getString(Helper.LAST_TRANSLATION_TIME, null);
|
|
|
|
if (dateString != null) {
|
|
|
|
Date dateCompare = Helper.stringToDate(TootActivity.this, dateString);
|
|
|
|
Date date = new Date();
|
|
|
|
if (date.before(dateCompare)) {
|
|
|
|
Toasty.info(TootActivity.this, getString(R.string.please_wait), Toast.LENGTH_SHORT).show();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
picker.setListener((name, locale, flagDrawableResID) -> {
|
|
|
|
picker.dismiss();
|
|
|
|
AlertDialog.Builder transAlert = new AlertDialog.Builder(TootActivity.this, style);
|
|
|
|
transAlert.setTitle(R.string.translate_toot);
|
|
|
|
|
2020-07-14 12:13:36 +02:00
|
|
|
View popup_trans = getLayoutInflater().inflate(R.layout.popup_translate, new LinearLayout(TootActivity.this), false);
|
2020-07-14 11:30:34 +02:00
|
|
|
transAlert.setView(popup_trans);
|
|
|
|
SharedPreferences.Editor editor = sharedpreferences.edit();
|
|
|
|
editor.putString(Helper.LAST_TRANSLATION_TIME, Helper.dateToString(new Date(System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(Helper.SECONDES_BETWEEN_TRANSLATE))));
|
|
|
|
editor.apply();
|
|
|
|
TextView yandex_translate = popup_trans.findViewById(R.id.yandex_translate);
|
|
|
|
yandex_translate.setOnClickListener(v -> {
|
|
|
|
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://translate.yandex.com/"));
|
|
|
|
startActivity(browserIntent);
|
|
|
|
});
|
|
|
|
MyTransL myTransL = MyTransL.getInstance(MyTransL.translatorEngine.YANDEX);
|
|
|
|
myTransL.setYandexAPIKey(Helper.YANDEX_KEY);
|
|
|
|
myTransL.setObfuscation(true);
|
|
|
|
myTransL.setTimeout(60);
|
|
|
|
if (toot_cw_content.getText().toString().length() > 0)
|
|
|
|
myTransL.translate(toot_cw_content.getText().toString(), locale, new com.github.stom79.mytransl.client.Results() {
|
|
|
|
@Override
|
|
|
|
public void onSuccess(Translate translate) {
|
|
|
|
try {
|
|
|
|
if (translate.getTranslatedContent() == null)
|
|
|
|
return;
|
2020-07-14 12:13:36 +02:00
|
|
|
ProgressBar trans_progress_cw = popup_trans.findViewById(R.id.trans_progress_cw);
|
|
|
|
ProgressBar trans_progress_toot = popup_trans.findViewById(R.id.trans_progress_toot);
|
|
|
|
if (trans_progress_cw != null)
|
|
|
|
trans_progress_cw.setVisibility(View.GONE);
|
|
|
|
LinearLayout trans_container = popup_trans.findViewById(R.id.trans_container);
|
|
|
|
if (trans_container != null) {
|
|
|
|
TextView cw_trans = popup_trans.findViewById(R.id.cw_trans);
|
|
|
|
if (cw_trans != null) {
|
|
|
|
cw_trans.setVisibility(View.VISIBLE);
|
|
|
|
cw_trans.setText(translate.getTranslatedContent());
|
2020-07-14 11:30:34 +02:00
|
|
|
}
|
2020-07-14 12:13:36 +02:00
|
|
|
} else {
|
|
|
|
Toasty.error(TootActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
|
2020-07-14 11:30:34 +02:00
|
|
|
}
|
2020-07-14 12:13:36 +02:00
|
|
|
if (trans_progress_cw != null && trans_progress_toot != null && trans_progress_cw.getVisibility() == View.GONE && trans_progress_toot.getVisibility() == View.GONE)
|
|
|
|
if (dialogTrans.getButton(DialogInterface.BUTTON_NEGATIVE) != null)
|
|
|
|
dialogTrans.getButton(DialogInterface.BUTTON_NEGATIVE).setEnabled(true);
|
2020-07-14 11:30:34 +02:00
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
Toasty.error(TootActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFail(HttpsConnectionException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
else {
|
|
|
|
ProgressBar trans_progress_cw = popup_trans.findViewById(R.id.trans_progress_cw);
|
|
|
|
trans_progress_cw.setVisibility(View.GONE);
|
|
|
|
}
|
|
|
|
if (toot_content.getText().toString().length() > 0)
|
|
|
|
myTransL.translate(toot_content.getText().toString(), locale, new com.github.stom79.mytransl.client.Results() {
|
|
|
|
@Override
|
|
|
|
public void onSuccess(Translate translate) {
|
|
|
|
try {
|
|
|
|
if (translate.getTranslatedContent() == null)
|
|
|
|
return;
|
2020-07-14 12:13:36 +02:00
|
|
|
ProgressBar trans_progress_cw = popup_trans.findViewById(R.id.trans_progress_cw);
|
|
|
|
ProgressBar trans_progress_toot = popup_trans.findViewById(R.id.trans_progress_toot);
|
|
|
|
if (trans_progress_toot != null)
|
|
|
|
trans_progress_toot.setVisibility(View.GONE);
|
|
|
|
LinearLayout trans_container = popup_trans.findViewById(R.id.trans_container);
|
|
|
|
if (trans_container != null) {
|
|
|
|
TextView toot_trans = popup_trans.findViewById(R.id.toot_trans);
|
|
|
|
if (toot_trans != null) {
|
|
|
|
toot_trans.setVisibility(View.VISIBLE);
|
|
|
|
toot_trans.setText(translate.getTranslatedContent());
|
2020-07-14 11:30:34 +02:00
|
|
|
}
|
2020-07-14 12:13:36 +02:00
|
|
|
} else {
|
|
|
|
Toasty.error(TootActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
|
2020-07-14 11:30:34 +02:00
|
|
|
}
|
2020-07-14 12:13:36 +02:00
|
|
|
if (trans_progress_cw != null && trans_progress_toot != null && trans_progress_cw.getVisibility() == View.GONE && trans_progress_toot.getVisibility() == View.GONE)
|
|
|
|
if (dialogTrans.getButton(DialogInterface.BUTTON_NEGATIVE) != null)
|
|
|
|
dialogTrans.getButton(DialogInterface.BUTTON_NEGATIVE).setEnabled(true);
|
2020-07-14 11:30:34 +02:00
|
|
|
} catch (IllegalArgumentException e) {
|
2020-07-14 12:00:58 +02:00
|
|
|
Toasty.error(TootActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
|
2020-07-14 11:30:34 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFail(HttpsConnectionException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
transAlert.setPositiveButton(R.string.close, (dialog, whichButton) -> dialog.dismiss());
|
|
|
|
transAlert.setNegativeButton(R.string.validate, (dialog, whichButton) -> {
|
|
|
|
TextView toot_trans = popup_trans.findViewById(R.id.toot_trans);
|
|
|
|
TextView cw_trans = popup_trans.findViewById(R.id.cw_trans);
|
|
|
|
if (toot_trans != null) {
|
|
|
|
toot_content.setText(toot_trans.getText().toString());
|
|
|
|
toot_content.setSelection(toot_content.getText().length());
|
|
|
|
}
|
|
|
|
if (cw_trans != null)
|
|
|
|
toot_cw_content.setText(cw_trans.getText().toString());
|
|
|
|
dialog.dismiss();
|
|
|
|
});
|
|
|
|
dialogTrans = transAlert.create();
|
|
|
|
transAlert.show();
|
|
|
|
|
|
|
|
dialogTrans.setOnShowListener(dialog -> {
|
|
|
|
Button negativeButton = ((AlertDialog) dialog)
|
|
|
|
.getButton(AlertDialog.BUTTON_NEGATIVE);
|
|
|
|
if (negativeButton != null)
|
|
|
|
negativeButton.setEnabled(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
picker.show(getSupportFragmentManager(), "COUNTRY_PICKER");
|
2020-07-14 12:00:58 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void launchPhotoEditor(Uri uri) {
|
|
|
|
Intent intent = new Intent(TootActivity.this, PhotoEditorActivity.class);
|
|
|
|
Bundle b = new Bundle();
|
|
|
|
intent.putExtra("imageUri", uri.toString());
|
|
|
|
intent.putExtras(b);
|
|
|
|
startActivity(intent);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void displayEmojiPopup() {
|
|
|
|
final EmojiPopup emojiPopup = EmojiPopup.Builder.fromRootView(drawer_layout).build(toot_content);
|
|
|
|
|
|
|
|
toot_emoji.setOnClickListener(v -> {
|
|
|
|
emojiPopup.toggle(); // Toggles visibility of the Popup.
|
|
|
|
});
|
2020-07-14 11:30:34 +02:00
|
|
|
}
|
|
|
|
}
|