Deals with translations

This commit is contained in:
stom79 2017-12-03 11:14:52 +01:00
parent 09802c4860
commit a5593cd517
4 changed files with 88 additions and 55 deletions

View File

@ -1581,7 +1581,7 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
}
@Override
public void onRetrieveEmoji(Status status, SpannableString spannableString, Boolean error) {
public void onRetrieveEmoji(Status status) {
}

View File

@ -443,7 +443,7 @@ public class Status implements Parcelable {
public void makeClickable(Context context){
SpannableString spannableStringContent, spannableStringCW, spannableStringTranslated;
SpannableString spannableStringContent, spannableStringCW;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
spannableStringContent = new SpannableString(Html.fromHtml(status.getReblog() != null ?status.getReblog().getContent():status.getContent(), Html.FROM_HTML_MODE_LEGACY));
else
@ -455,22 +455,31 @@ public class Status implements Parcelable {
//noinspection deprecation
spannableStringCW = new SpannableString(Html.fromHtml(status.getReblog() != null ?status.getReblog().getSpoiler_text():status.getSpoiler_text()));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
spannableStringTranslated = new SpannableString(Html.fromHtml(status.getContent_translated(), Html.FROM_HTML_MODE_LEGACY));
else
//noinspection deprecation
spannableStringTranslated = new SpannableString(Html.fromHtml(status.getContent_translated()));
status.setContentSpan(treatment(context, spannableStringContent));
status.setContentSpanCW(treatment(context, spannableStringCW));
status.setContentSpanTranslated(treatment(context, spannableStringTranslated));
isClickable = true;
}
public void makeClickableTranslation(Context context){
SpannableString spannableStringTranslated;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
spannableStringTranslated = new SpannableString(Html.fromHtml(status.getContent_translated(), Html.FROM_HTML_MODE_LEGACY));
else
//noinspection deprecation
spannableStringTranslated = new SpannableString(Html.fromHtml(status.getContent_translated()));
status.setContentSpanTranslated(treatment(context, spannableStringTranslated));
}
public void makeEmojis(final Context context, final OnRetrieveEmojiInterface listener){
final SpannableString spannableStringContent, spannableStringCW, spannableStringTranslated;
final SpannableString spannableStringContent;
final SpannableString spannableStringCW;
SpannableString spannableStringTranslated = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
@ -478,22 +487,27 @@ public class Status implements Parcelable {
else
//noinspection deprecation
spannableStringContent = new SpannableString(Html.fromHtml(status.getReblog() != null ?status.getReblog().getContent():status.getContent()));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
spannableStringCW = new SpannableString(Html.fromHtml(status.getReblog() != null ?status.getReblog().getSpoiler_text():status.getSpoiler_text(), Html.FROM_HTML_MODE_LEGACY));
else
//noinspection deprecation
spannableStringCW = new SpannableString(Html.fromHtml(status.getReblog() != null ?status.getReblog().getSpoiler_text():status.getSpoiler_text()));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
spannableStringTranslated = new SpannableString(Html.fromHtml(status.getContent_translated(), Html.FROM_HTML_MODE_LEGACY));
else
//noinspection deprecation
spannableStringTranslated = new SpannableString(Html.fromHtml(status.getContent_translated()));
if( status.getContent_translated() != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
spannableStringTranslated = new SpannableString(Html.fromHtml(status.getContent_translated(), Html.FROM_HTML_MODE_LEGACY));
else
//noinspection deprecation
spannableStringTranslated = new SpannableString(Html.fromHtml(status.getContent_translated()));
}
final List<Emojis> emojis = status.getReblog() != null ? status.getReblog().getEmojis() : status.getEmojis();
if( emojis != null && emojis.size() > 0 ) {
final int[] i = {0};
for (final Emojis emoji : emojis) {
final SpannableString finalSpannableStringTranslated = spannableStringTranslated;
Glide.with(context)
.asBitmap()
.load(emoji.getUrl())
@ -509,7 +523,8 @@ public class Status implements Parcelable {
if( i[0] == (emojis.size())) {
status.setContentSpan(spannableStringContent);
status.setContentSpanCW(spannableStringCW);
status.setContentSpanTranslated(spannableStringTranslated);
if( finalSpannableStringTranslated != null)
status.setContentSpanTranslated(finalSpannableStringTranslated);
listener.onRetrieveEmoji(status);
}
return false;
@ -541,11 +556,11 @@ public class Status implements Parcelable {
endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
if (spannableStringTranslated.toString().contains(targetedEmoji)) {
if (finalSpannableStringTranslated != null && finalSpannableStringTranslated.toString().contains(targetedEmoji)) {
//emojis can be used several times so we have to loop
for (int startPosition = -1; (startPosition = spannableStringTranslated.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) {
for (int startPosition = -1; (startPosition = finalSpannableStringTranslated.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) {
final int endPosition = startPosition + targetedEmoji.length();
spannableStringTranslated.setSpan(
finalSpannableStringTranslated.setSpan(
new ImageSpan(context,
Bitmap.createScaledBitmap(resource, (int) Helper.convertDpToPixel(20, context),
(int) Helper.convertDpToPixel(20, context), false)), startPosition,
@ -556,7 +571,8 @@ public class Status implements Parcelable {
if( i[0] == (emojis.size())) {
status.setContentSpan(spannableStringContent);
status.setContentSpanCW(spannableStringCW);
status.setContentSpanTranslated(spannableStringTranslated);
if( finalSpannableStringTranslated != null)
status.setContentSpanTranslated(finalSpannableStringTranslated);
listener.onRetrieveEmoji(status);
}
}

View File

@ -248,7 +248,12 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
holder.notification_status_content.setTypeface(tf);
String content;
if( status.getContents() != null){
if( !status.isClickable())
status.makeClickable(context);
if( !status.isEmojiFound())
status.makeEmojis(context, NotificationsListAdapter.this);
/*if( status.getContents() != null){
holder.notification_status_content.setText(status.getContents(), TextView.BufferType.SPANNABLE);
}else {
content = status.getContent();
@ -267,8 +272,9 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
position,
true, NotificationsListAdapter.this);*/
holder.notification_status_content.setText(spannableString, TextView.BufferType.SPANNABLE);
}
// holder.notification_status_content.setText(spannableString, TextView.BufferType.SPANNABLE);
//}
holder.notification_status_content.setMovementMethod(null);
holder.notification_status_content.setMovementMethod(LinkMovementMethod.getInstance());
holder.status_favorite_count.setText(String.valueOf(status.getFavourites_count()));
@ -900,8 +906,7 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
@Override
public void onRetrieveEmoji(Status status, SpannableString spannableString, Boolean error) {
status.setContents(spannableString);
public void onRetrieveEmoji(Status status) {
if( !status.isEmojiFound()) {
for (int i = 0; i < notificationsListAdapter.getItemCount(); i++) {
if (notificationsListAdapter.getItemAt(i) != null && notificationsListAdapter.getItemAt(i).getStatus() != null && notificationsListAdapter.getItemAt(i).getStatus().getId().equals(status.getId())) {

View File

@ -468,6 +468,43 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_spoiler.setText(status.getContentSpanCW());
//Manages translations
final MyTransL myTransL = MyTransL.getInstance(MyTransL.translatorEngine.YANDEX);
myTransL.setObfuscation(true);
myTransL.setYandexAPIKey(Helper.YANDEX_KEY);
holder.status_translate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( !status.isTranslated() ){
myTransL.translate(status.getContent(), myTransL.getLocale(), new Results() {
@Override
public void onSuccess(Translate translate) {
if( translate.getTranslatedContent() != null) {
status.setTranslated(true);
status.setTranslationShown(true);
status.setContent_translated(translate.getTranslatedContent());
status.makeClickableTranslation(context);
holder.status_content_translated.setMovementMethod(LinkMovementMethod.getInstance());
statusListAdapter.notifyDataSetChanged();
}else {
Toast.makeText(context, R.string.toast_error_translate, Toast.LENGTH_LONG).show();
}
}
@Override
public void onFail(HttpsConnectionException e) {
Toast.makeText(context, R.string.toast_error_translate, Toast.LENGTH_LONG).show();
}
});
}else {
status.setTranslationShown(!status.isTranslationShown());
statusListAdapter.notifyDataSetChanged();
}
}
});
//-------- END -> Manages translations
//Displays name & emoji in toot header
final String displayName;
final String username;
@ -743,8 +780,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
imgReply = ContextCompat.getDrawable(context, R.drawable.ic_reply);
assert imgFav != null;
imgFav.setBounds(0,0,(int) (20 * iconSizePercent/100 * scale + 0.5f),(int) (20 * iconSizePercent/100 * scale + 0.5f));
assert imgReblog != null;
imgReblog.setBounds(0,0,(int) (20 * iconSizePercent/100 * scale + 0.5f),(int) (20 * iconSizePercent/100 * scale + 0.5f));
assert imgReply != null;
imgReply.setBounds(0,0,(int) (20 * iconSizePercent/100 * scale + 0.5f),(int) (20 * iconSizePercent/100 * scale + 0.5f));
holder.status_favorite_count.setCompoundDrawables(imgFav, null, null, null);
@ -767,6 +807,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
changeDrawableColor(context, R.drawable.ic_pin_drop,R.color.black);
imgPin = ContextCompat.getDrawable(context, R.drawable.ic_pin_drop);
}
assert imgPin != null;
imgPin.setBounds(0,0,(int) (20 * iconSizePercent/100 * scale + 0.5f),(int) (20 * iconSizePercent/100 * scale + 0.5f));
holder.status_pin.setImageDrawable(imgPin);
@ -884,36 +925,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
return false;
}
});
final MyTransL myTransL = MyTransL.getInstance(MyTransL.translatorEngine.YANDEX);
myTransL.setObfuscation(true);
myTransL.setYandexAPIKey(Helper.YANDEX_KEY);
holder.status_translate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( !status.isTranslated() ){
myTransL.translate(status.getContent(), myTransL.getLocale(), new Results() {
@Override
public void onSuccess(Translate translate) {
if( translate.getTranslatedContent() != null) {
status.setTranslated(true);
status.setTranslationShown(true);
status.setContent_translated(translate.getTranslatedContent());
statusListAdapter.notifyDataSetChanged();
}else {
Toast.makeText(context, R.string.toast_error_translate, Toast.LENGTH_LONG).show();
}
}
@Override
public void onFail(HttpsConnectionException e) {
Toast.makeText(context, R.string.toast_error_translate, Toast.LENGTH_LONG).show();
}
});
}else {
status.setTranslationShown(!status.isTranslationShown());
statusListAdapter.notifyDataSetChanged();
}
}
});
holder.yandex_translate.setOnClickListener(new View.OnClickListener() {
@Override