Merge branch 'develop'

This commit is contained in:
stom79 2018-01-26 18:59:41 +01:00
commit d21e07a231
56 changed files with 2314 additions and 984 deletions

View File

@ -1666,8 +1666,7 @@ public abstract class BaseMainActivity extends BaseActivity
public void startSreaming(){
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
boolean liveNotifications = sharedpreferences.getBoolean(Helper.SET_LIVE_NOTIFICATIONS, true);
boolean notify = sharedpreferences.getBoolean(Helper.SET_NOTIFY, true);
if( notify && liveNotifications) {
if( liveNotifications) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
assert manager != null;
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {

View File

@ -138,7 +138,7 @@ public class EditProfileActivity extends BaseActivity implements OnRetrieveAccou
Account account = new AccountDAO(getApplicationContext(),db).getAccountByID(userId);
String url = account.getAvatar();
if( url.startsWith("/") ){
url = "https://" + Helper.getLiveInstance(getApplicationContext()) + account.getAvatar();
url = Helper.getLiveInstanceWithProtocol(getApplicationContext()) + account.getAvatar();
}

View File

@ -252,7 +252,7 @@ public class LoginActivity extends BaseActivity {
@Override
public void run() {
try {
final String response = new HttpsConnection(LoginActivity.this).post("https://" + instance + action, 30, parameters, null );
final String response = new HttpsConnection(LoginActivity.this).post(Helper.instanceWithProtocol(instance) + action, 30, parameters, null );
runOnUiThread(new Runnable() {
public void run() {
JSONObject resobj;
@ -274,11 +274,12 @@ public class LoginActivity extends BaseActivity {
i.putExtra("instance", instance);
startActivity(i);
}
} catch (JSONException ignored) {}
} catch (JSONException ignored) {ignored.printStackTrace();}
}
});
} catch (final Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
public void run() {
String message;
@ -326,7 +327,7 @@ public class LoginActivity extends BaseActivity {
@Override
public void run() {
try {
final String response = new HttpsConnection(LoginActivity.this).post("https://" + instance + "/oauth/token", 30, parameters, null );
final String response = new HttpsConnection(LoginActivity.this).post(Helper.instanceWithProtocol(instance) + "/oauth/token", 30, parameters, null );
runOnUiThread(new Runnable() {
public void run() {
JSONObject resobj;
@ -339,10 +340,11 @@ public class LoginActivity extends BaseActivity {
editor.apply();
//Update the account with the token;
new UpdateAccountInfoAsyncTask(LoginActivity.this, token, instance).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} catch (JSONException ignored) {}
} catch (JSONException ignored) {ignored.printStackTrace();}
}
});
}catch (final Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
public void run() {
connectionButton.setEnabled(true);

View File

@ -144,7 +144,7 @@ public class RemoteFollowActivity extends BaseActivity implements OnRetrieveRemo
Account account = new AccountDAO(getApplicationContext(),db).getAccountByID(userId);
String url = account.getAvatar();
if( url.startsWith("/") ){
url = "https://" + Helper.getLiveInstance(getApplicationContext()) + account.getAvatar();
url = Helper.getLiveInstanceWithProtocol(getApplicationContext()) + account.getAvatar();
}
Glide.with(getApplicationContext())
.asBitmap()

View File

@ -412,7 +412,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
}
String urlHeader = account.getHeader();
if (urlHeader.startsWith("/")) {
urlHeader = "https://" + Helper.getLiveInstance(ShowAccountActivity.this) + account.getHeader();
urlHeader = Helper.getLiveInstanceWithProtocol(ShowAccountActivity.this) + account.getHeader();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && !urlHeader.contains("missing.png")) {
@ -451,7 +451,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
pp_actionBar = findViewById(R.id.pp_actionBar);
String url = account.getAvatar();
if( url.startsWith("/") ){
url = "https://" + Helper.getLiveInstance(getApplicationContext()) + account.getAvatar();
url = Helper.getLiveInstanceWithProtocol(getApplicationContext()) + account.getAvatar();
}
Glide.with(getApplicationContext())
.asBitmap()

View File

@ -151,7 +151,7 @@ public class ShowConversationActivity extends BaseActivity implements OnRetrieve
Account account = new AccountDAO(getApplicationContext(),db).getAccountByID(userId);
String url = account.getAvatar();
if( url.startsWith("/") ){
url = "https://" + Helper.getLiveInstance(getApplicationContext()) + account.getAvatar();
url = Helper.getLiveInstanceWithProtocol(getApplicationContext()) + account.getAvatar();
}
Glide.with(getApplicationContext())
.asBitmap()

View File

@ -89,8 +89,10 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.ref.WeakReference;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@ -347,7 +349,7 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
String url = account.getAvatar();
if( url.startsWith("/") ){
url = "https://" + Helper.getLiveInstance(getApplicationContext()) + account.getAvatar();
url = Helper.getLiveInstanceWithProtocol(getApplicationContext()) + account.getAvatar();
}
Glide.with(getApplicationContext())
.asBitmap()
@ -672,11 +674,22 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
}
picture_scrollview.setVisibility(View.VISIBLE);
try {
File photoFiletmp = createImageFile(false);
InputStream inputStream = getContentResolver().openInputStream(fileUri);
toot_picture_container.setVisibility(View.VISIBLE);
picture_scrollview.setVisibility(View.VISIBLE);
toot_picture.setEnabled(false);
new HttpsConnection(TootActivity.this).upload(inputStream, TootActivity.this);
OutputStream output = new FileOutputStream(photoFile);
try {
byte[] buffer = new byte[4 * 1024]; // or other buffer size
int read;
assert inputStream != null;
while ((read = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
output.flush();
} finally {
output.close();
}
new asyncPicture(TootActivity.this, photoFiletmp).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
count++;
} catch (Exception e) {
Toast.makeText(getApplicationContext(), R.string.toot_select_image_error, Toast.LENGTH_LONG).show();
@ -699,7 +712,7 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
try {
photoFile = createImageFile();
photoFile = createImageFile(true);
} catch (IOException ignored) {Toast.makeText(getApplicationContext(),R.string.toot_select_image_error,Toast.LENGTH_LONG).show();}
// Continue only if the File was successfully created
if (photoFile != null) {
@ -713,11 +726,11 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
}
private File createImageFile() throws IOException {
private File createImageFile(boolean external) throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.ENGLISH).format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File storageDir = external?getExternalFilesDir(Environment.DIRECTORY_PICTURES):getCacheDir();
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
@ -741,9 +754,26 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
try {
//noinspection ConstantConditions
InputStream inputStream = getContentResolver().openInputStream(data.getData());
toot_picture_container.setVisibility(View.VISIBLE);
toot_picture.setEnabled(false);
new HttpsConnection(TootActivity.this).upload(inputStream, TootActivity.this);
File photoFiletmp;
try {
photoFiletmp = createImageFile(false);
OutputStream output = new FileOutputStream(photoFiletmp);
try {
byte[] buffer = new byte[4 * 1024]; // or other buffer size
int read;
assert inputStream != null;
while ((read = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, read);
}
output.flush();
new asyncPicture(TootActivity.this, photoFiletmp).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} finally {
output.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
Toast.makeText(getApplicationContext(),R.string.toot_select_image_error,Toast.LENGTH_LONG).show();
toot_picture.setEnabled(true);
@ -756,9 +786,7 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
toot_content.setSelection(toot_content.getText().length());
}
}else if (requestCode == TAKE_PHOTO && resultCode == RESULT_OK) {
new asyncPicture(TootActivity.this, photoFile).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
@ -778,8 +806,17 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
Bitmap takenImage = BitmapFactory.decodeFile(String.valueOf(this.fileWeakReference.get()));
int size = takenImage.getByteCount();
//Resize image to 2 meg
double resize = ((double)size)/((double)16777216);
SharedPreferences sharedpreferences = this.activityWeakReference.get().getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
int resizeSet = sharedpreferences.getInt(Helper.SET_PICTURE_RESIZE, Helper.S_1MO);
double resizeby = 1;
if( resizeSet == Helper.S_512KO){
resizeby = 4194304;
}else if(resizeSet == Helper.S_1MO){
resizeby = 8388608;
}else if(resizeSet == Helper.S_2MO){
resizeby = 16777216;
}
double resize = ((double)size)/resizeby;
Bitmap newBitmap;
if( resize > 1 ){
newBitmap = Bitmap.createScaledBitmap(takenImage, (int)(takenImage.getWidth()/resize),

View File

@ -119,7 +119,7 @@ public class WebviewConnectActivity extends BaseActivity {
@Override
public void run() {
try {
final String response = new HttpsConnection(WebviewConnectActivity.this).post("https://" + instance + action, 30, parameters, null);
final String response = new HttpsConnection(WebviewConnectActivity.this).post(Helper.instanceWithProtocol(instance) + action, 30, parameters, null);
JSONObject resobj;
try {
resobj = new JSONObject(response);
@ -160,7 +160,7 @@ public class WebviewConnectActivity extends BaseActivity {
queryString += "&" + Helper.REDIRECT_URI + "="+ Uri.encode(Helper.REDIRECT_CONTENT_WEB);
queryString += "&" + Helper.RESPONSE_TYPE +"=code";
queryString += "&" + Helper.SCOPE +"=" + Helper.OAUTH_SCOPES;
return "https://" + instance + Helper.EP_AUTHORIZE + "?" + queryString;
return Helper.instanceWithProtocol(instance) + Helper.EP_AUTHORIZE + "?" + queryString;
}

View File

@ -19,6 +19,7 @@ import android.os.AsyncTask;
import java.lang.ref.WeakReference;
import fr.gouv.etalab.mastodon.client.API;
import fr.gouv.etalab.mastodon.client.Entities.Results;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRemoteAccountInterface;
@ -38,7 +39,7 @@ public class RetrieveRemoteDataAsyncTask extends AsyncTask<Void, Void, Void> {
public RetrieveRemoteDataAsyncTask(Context context, String username, String instance, OnRetrieveRemoteAccountInterface onRetrieveRemoteAccountInterface){
this.url = "https://" + instance + "/@" + username;
this.url = Helper.instanceWithProtocol(instance) + "/@" + username;
this.listener = onRetrieveRemoteAccountInterface;
this.contextReference = new WeakReference<>(context);
}

View File

@ -55,7 +55,7 @@ public class UpdateAccountInfoAsyncTask extends AsyncTask<Void, Void, Void> {
try {
//At the state the instance can be encoded
instance = URLDecoder.decode(instance, "utf-8");
} catch (UnsupportedEncodingException ignored) {}
} catch (UnsupportedEncodingException ignored) {ignored.printStackTrace();}
SharedPreferences sharedpreferences = this.contextReference.get().getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
if( token == null) {
token = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null);

View File

@ -189,8 +189,10 @@ public class API {
account = parseAccountResponse(context, new JSONObject(response));
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
e.printStackTrace();
}catch (Exception e) {
setDefaultError(e);
e.printStackTrace();
}
return account;
}
@ -2030,7 +2032,7 @@ public class API {
private String getAbsoluteUrl(String action) {
return "https://" + this.instance + "/api/v1" + action;
return Helper.instanceWithProtocol(this.instance) + "/api/v1" + action;
}

View File

@ -24,12 +24,14 @@ import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
import android.text.style.URLSpan;
import android.util.Patterns;
@ -48,6 +50,7 @@ import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import fr.gouv.etalab.mastodon.R;
import fr.gouv.etalab.mastodon.activities.HashTagActivity;
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
import fr.gouv.etalab.mastodon.activities.WebviewActivity;
@ -92,7 +95,6 @@ public class Status implements Parcelable{
private boolean isClickable = false;
private boolean isTranslationShown = false;
private boolean isNew = false;
private boolean isTakingScreenShot = false;
private boolean isVisible = true;
private boolean fetchMore = false;
private Status status;
@ -408,14 +410,6 @@ public class Status implements Parcelable{
isNew = aNew;
}
public boolean isTakingScreenShot() {
return isTakingScreenShot;
}
public void setTakingScreenShot(boolean takingScreenShot) {
isTakingScreenShot = takingScreenShot;
}
public boolean isVisible() {
return isVisible;
}
@ -444,7 +438,7 @@ public class Status implements Parcelable{
public void makeClickable(Context context){
if( ((Activity)context).isFinishing() )
if( ((Activity)context).isFinishing() || status == null)
return;
SpannableString spannableStringContent, spannableStringCW;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
@ -466,7 +460,7 @@ public class Status implements Parcelable{
public void makeClickableTranslation(Context context){
if( ((Activity)context).isFinishing() )
if( ((Activity)context).isFinishing() || status == null)
return;
SpannableString spannableStringTranslated;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
@ -621,7 +615,7 @@ public class Status implements Parcelable{
spannableString.removeSpan(span);
List<Mention> mentions = this.status.getReblog() != null ? this.status.getReblog().getMentions() : this.status.getMentions();
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
Matcher matcher;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
@ -643,10 +637,13 @@ public class Status implements Parcelable{
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
},
matchStart, matchEnd,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, theme==Helper.THEME_DARK?R.color.mastodonC2:R.color.mastodonC4)), matchStart, matchEnd,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
//Deals with mention to make them clickable
@ -671,10 +668,13 @@ public class Status implements Parcelable{
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
},
startPosition, endPosition,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, theme==Helper.THEME_DARK?R.color.mastodonC2:R.color.mastodonC4)), startPosition, endPosition,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
@ -697,8 +697,11 @@ public class Status implements Parcelable{
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, theme==Helper.THEME_DARK?R.color.mastodonC2:R.color.mastodonC4)), matchStart, matchEnd,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
return spannableString;
}

View File

@ -17,7 +17,6 @@ package fr.gouv.etalab.mastodon.drawers;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.graphics.Bitmap;
import android.graphics.Typeface;
import android.os.CountDownTimer;
import android.os.Handler;
import android.support.v7.app.AlertDialog;
@ -79,6 +78,7 @@ import fr.gouv.etalab.mastodon.helper.Helper;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_DARK;
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
import static fr.gouv.etalab.mastodon.helper.Helper.getLiveInstance;
/**
@ -245,8 +245,6 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
else
holder.status_document_container.setVisibility(View.VISIBLE);
Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/DroidSans-Regular.ttf");
holder.notification_status_content.setTypeface(tf);
holder.status_reply.setText("");
if( !status.isClickable())
status.makeClickable(context);
@ -254,7 +252,7 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
status.makeEmojis(context, NotificationsListAdapter.this);
holder.notification_status_content.setText(status.getContentSpan(), TextView.BufferType.SPANNABLE);
holder.status_spoiler.setText(status.getContentSpanCW(), TextView.BufferType.SPANNABLE);
holder.status_spoiler.setMovementMethod(LinkMovementMethod.getInstance());
holder.notification_status_content.setMovementMethod(LinkMovementMethod.getInstance());
boolean displayBoost = sharedpreferences.getBoolean(Helper.SET_DISPLAY_BOOST_COUNT, true);
if( displayBoost) {
@ -291,190 +289,182 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
context.startActivity(intent);
}
});
if( status.isTakingScreenShot()){
holder.status_document_container.setVisibility(View.GONE);
holder.notification_status_content.setVisibility(View.VISIBLE);
holder.status_show_more.setVisibility(View.GONE);
holder.status_action_container.setVisibility(View.INVISIBLE);
holder.status_spoiler_button.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_action_container.setVisibility(View.VISIBLE);
Drawable imgFav, imgReblog, imgReply;
if( status.isFavourited() || (status.getReblog() != null && status.getReblog().isFavourited())) {
changeDrawableColor(context, R.drawable.ic_star,R.color.marked_icon);
imgFav = ContextCompat.getDrawable(context, R.drawable.ic_star);
}else {
holder.status_action_container.setVisibility(View.VISIBLE);
Drawable imgFav, imgReblog, imgReply;
if( status.isFavourited() || (status.getReblog() != null && status.getReblog().isFavourited())) {
changeDrawableColor(context, R.drawable.ic_star,R.color.marked_icon);
imgFav = ContextCompat.getDrawable(context, R.drawable.ic_star);
}else {
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_star_border,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_star_border,R.color.black);
imgFav = ContextCompat.getDrawable(context, R.drawable.ic_star_border);
}
if( status.isReblogged()|| (status.getReblog() != null && status.getReblog().isReblogged())) {
changeDrawableColor(context, R.drawable.ic_repeat_boost,R.color.boost_icon);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat_boost);
}else {
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_repeat,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_repeat,R.color.black);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat);
}
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_reply,R.color.dark_icon);
changeDrawableColor(context, R.drawable.ic_star_border,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_reply,R.color.black);
imgReply = ContextCompat.getDrawable(context, R.drawable.ic_reply);
changeDrawableColor(context, R.drawable.ic_star_border,R.color.black);
imgFav = ContextCompat.getDrawable(context, R.drawable.ic_star_border);
}
if( status.getReblog() == null) {
if (status.getSpoiler_text() != null && status.getSpoiler_text().trim().length() > 0 ) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if( !status.isSpoilerShown()) {
holder.notification_status_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}else {
holder.notification_status_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
if( status.isReblogged()|| (status.getReblog() != null && status.getReblog().isReblogged())) {
changeDrawableColor(context, R.drawable.ic_repeat_boost,R.color.boost_icon);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat_boost);
}else {
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_repeat,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_repeat,R.color.black);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat);
}
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_reply,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_reply,R.color.black);
imgReply = ContextCompat.getDrawable(context, R.drawable.ic_reply);
if( status.getReblog() == null) {
if (status.getSpoiler_text() != null && status.getSpoiler_text().trim().length() > 0 ) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if( !status.isSpoilerShown()) {
holder.notification_status_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}else {
holder.notification_status_container.setVisibility(View.VISIBLE);
}
}else {
if (status.getReblog().getSpoiler_text() != null && status.getReblog().getSpoiler_text().trim().length() > 0) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if( !status.isSpoilerShown()) {
holder.notification_status_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}else {
holder.notification_status_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.notification_status_container.setVisibility(View.VISIBLE);
}
}else {
if (status.getReblog().getSpoiler_text() != null && status.getReblog().getSpoiler_text().trim().length() > 0) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if( !status.isSpoilerShown()) {
holder.notification_status_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}else {
holder.notification_status_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}
}
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);
holder.status_reblog_count.setCompoundDrawables(imgReblog, null, null, null);
holder.status_reply.setCompoundDrawables(imgReply, null, null, null);
if( theme == THEME_DARK){
holder.status_favorite_count.setTextColor(ContextCompat.getColor(context, R.color.dark_icon));
holder.status_reblog_count.setTextColor(ContextCompat.getColor(context, R.color.dark_icon));
holder.status_reply.setTextColor(ContextCompat.getColor(context, R.color.dark_icon));
}else {
holder.status_favorite_count.setTextColor(ContextCompat.getColor(context, R.color.black));
holder.status_reblog_count.setTextColor(ContextCompat.getColor(context, R.color.black));
holder.status_reply.setTextColor(ContextCompat.getColor(context, R.color.black));
}
if( type.equals("favourite") || type.equals("reblog")){
holder.status_document_container.setVisibility(View.GONE);
}else {
if (status.getReblog() == null) {
if (status.getMedia_attachments().size() < 1) {
holder.status_document_container.setVisibility(View.GONE);
holder.status_show_more.setVisibility(View.GONE);
} else {
//If medias are loaded without any conditions or if device is on wifi
if (!status.isSensitive() && (behaviorWithAttachments == Helper.ATTACHMENT_ALWAYS || (behaviorWithAttachments == Helper.ATTACHMENT_WIFI && isOnWifi))) {
loadAttachments(status, holder);
holder.status_show_more.setVisibility(View.GONE);
status.setAttachmentShown(true);
} else {
//Text depending if toots is sensitive or not
String textShowMore = (status.isSensitive()) ? context.getString(R.string.load_sensitive_attachment) : context.getString(R.string.load_attachment);
holder.status_show_more.setText(textShowMore);
if (!status.isAttachmentShown()) {
holder.status_show_more.setVisibility(View.VISIBLE);
holder.status_document_container.setVisibility(View.GONE);
} else {
loadAttachments(status, holder);
}
}
}
} else { //Attachments for reblogs
if (status.getReblog().getMedia_attachments().size() < 1) {
holder.status_document_container.setVisibility(View.GONE);
holder.status_show_more.setVisibility(View.GONE);
} else {
//If medias are loaded without any conditions or if device is on wifi
if (!status.getReblog().isSensitive() && (behaviorWithAttachments == Helper.ATTACHMENT_ALWAYS || (behaviorWithAttachments == Helper.ATTACHMENT_WIFI && isOnWifi))) {
loadAttachments(status.getReblog(), holder);
holder.status_show_more.setVisibility(View.GONE);
status.getReblog().setAttachmentShown(true);
} else {
//Text depending if toots is sensitive or not
String textShowMore = (status.getReblog().isSensitive()) ? context.getString(R.string.load_sensitive_attachment) : context.getString(R.string.load_attachment);
holder.status_show_more.setText(textShowMore);
if (!status.isAttachmentShown()) {
holder.status_show_more.setVisibility(View.VISIBLE);
holder.status_document_container.setVisibility(View.GONE);
} else {
loadAttachments(status.getReblog(), holder);
}
}
}
}
}
//Spoiler opens
holder.status_spoiler_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notification.getStatus().setSpoilerShown(!status.isSpoilerShown());
notifyNotificationChanged(notification);
}
});
switch (status.getVisibility()){
case "public":
holder.status_privacy.setImageResource(R.drawable.ic_public);
break;
case "unlisted":
holder.status_privacy.setImageResource(R.drawable.ic_lock_open);
break;
case "private":
holder.status_privacy.setImageResource(R.drawable.ic_lock_outline);
break;
case "direct":
holder.status_privacy.setImageResource(R.drawable.ic_mail_outline);
break;
}
switch (status.getVisibility()){
case "direct":
case "private":
holder.status_reblog_count.setVisibility(View.GONE);
break;
case "public":
case "unlisted":
holder.status_reblog_count.setVisibility(View.VISIBLE);
break;
default:
holder.status_reblog_count.setVisibility(View.VISIBLE);
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.notification_status_container.setVisibility(View.VISIBLE);
}
}
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);
holder.status_reblog_count.setCompoundDrawables(imgReblog, null, null, null);
holder.status_reply.setCompoundDrawables(imgReply, null, null, null);
if( theme == THEME_DARK){
holder.status_favorite_count.setTextColor(ContextCompat.getColor(context, R.color.dark_icon));
holder.status_reblog_count.setTextColor(ContextCompat.getColor(context, R.color.dark_icon));
holder.status_reply.setTextColor(ContextCompat.getColor(context, R.color.dark_icon));
}else {
holder.status_favorite_count.setTextColor(ContextCompat.getColor(context, R.color.black));
holder.status_reblog_count.setTextColor(ContextCompat.getColor(context, R.color.black));
holder.status_reply.setTextColor(ContextCompat.getColor(context, R.color.black));
}
if( type.equals("favourite") || type.equals("reblog")){
holder.status_document_container.setVisibility(View.GONE);
}else {
if (status.getReblog() == null) {
if (status.getMedia_attachments().size() < 1) {
holder.status_document_container.setVisibility(View.GONE);
holder.status_show_more.setVisibility(View.GONE);
} else {
//If medias are loaded without any conditions or if device is on wifi
if (!status.isSensitive() && (behaviorWithAttachments == Helper.ATTACHMENT_ALWAYS || (behaviorWithAttachments == Helper.ATTACHMENT_WIFI && isOnWifi))) {
loadAttachments(status, holder);
holder.status_show_more.setVisibility(View.GONE);
status.setAttachmentShown(true);
} else {
//Text depending if toots is sensitive or not
String textShowMore = (status.isSensitive()) ? context.getString(R.string.load_sensitive_attachment) : context.getString(R.string.load_attachment);
holder.status_show_more.setText(textShowMore);
if (!status.isAttachmentShown()) {
holder.status_show_more.setVisibility(View.VISIBLE);
holder.status_document_container.setVisibility(View.GONE);
} else {
loadAttachments(status, holder);
}
}
}
} else { //Attachments for reblogs
if (status.getReblog().getMedia_attachments().size() < 1) {
holder.status_document_container.setVisibility(View.GONE);
holder.status_show_more.setVisibility(View.GONE);
} else {
//If medias are loaded without any conditions or if device is on wifi
if (!status.getReblog().isSensitive() && (behaviorWithAttachments == Helper.ATTACHMENT_ALWAYS || (behaviorWithAttachments == Helper.ATTACHMENT_WIFI && isOnWifi))) {
loadAttachments(status.getReblog(), holder);
holder.status_show_more.setVisibility(View.GONE);
status.getReblog().setAttachmentShown(true);
} else {
//Text depending if toots is sensitive or not
String textShowMore = (status.getReblog().isSensitive()) ? context.getString(R.string.load_sensitive_attachment) : context.getString(R.string.load_attachment);
holder.status_show_more.setText(textShowMore);
if (!status.isAttachmentShown()) {
holder.status_show_more.setVisibility(View.VISIBLE);
holder.status_document_container.setVisibility(View.GONE);
} else {
loadAttachments(status.getReblog(), holder);
}
}
}
}
}
//Spoiler opens
holder.status_spoiler_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notification.getStatus().setSpoilerShown(!status.isSpoilerShown());
notifyNotificationChanged(notification);
}
});
switch (status.getVisibility()){
case "public":
holder.status_privacy.setImageResource(R.drawable.ic_public);
break;
case "unlisted":
holder.status_privacy.setImageResource(R.drawable.ic_lock_open);
break;
case "private":
holder.status_privacy.setImageResource(R.drawable.ic_lock_outline);
break;
case "direct":
holder.status_privacy.setImageResource(R.drawable.ic_mail_outline);
break;
}
switch (status.getVisibility()){
case "direct":
case "private":
holder.status_reblog_count.setVisibility(View.GONE);
break;
case "public":
case "unlisted":
holder.status_reblog_count.setVisibility(View.VISIBLE);
break;
default:
holder.status_reblog_count.setVisibility(View.VISIBLE);
}
holder.status_show_more.setOnClickListener(new View.OnClickListener() {
@Override
@ -664,15 +654,14 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
context.startActivity(Intent.createChooser(sendIntent, context.getString(R.string.share_with)));
return true;
case R.id.action_mention:
status.setTakingScreenShot(true);
notifyNotificationChanged(notification);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Bitmap bitmap = Helper.convertTootIntoBitmap(context, holder.getView());
status.setTakingScreenShot(false);
notifyNotificationChanged(notification);
String name = "@"+(status.getReblog()!=null?status.getReblog().getAccount().getAcct():status.getAccount().getAcct());
if( name.split("@", -1).length - 1 == 1)
name = name + "@" + getLiveInstance(context);
Bitmap bitmap = Helper.convertTootIntoBitmap(context, name, holder.notification_status_content);
Intent intent = new Intent(context, TootActivity.class);
Bundle b = new Bundle();
String fname = "tootmention_" + status.getId() +".jpg";
@ -1018,6 +1007,17 @@ public class NotificationsListAdapter extends RecyclerView.Adapter implements On
}
@Override
public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {
super.onViewAttachedToWindow(holder);
final NotificationsListAdapter.ViewHolder viewHolder = (NotificationsListAdapter.ViewHolder) holder;
// Bug workaround for losing text selection ability, see:
// https://code.google.com/p/android/issues/detail?id=208169
viewHolder.notification_status_content.setEnabled(false);
viewHolder.notification_status_content.setEnabled(true);
viewHolder.status_spoiler.setEnabled(false);
viewHolder.status_spoiler.setEnabled(true);
}
class ViewHolder extends RecyclerView.ViewHolder {

View File

@ -18,7 +18,6 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.Typeface;
import android.os.Handler;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AlertDialog;
@ -90,12 +89,14 @@ import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
import fr.gouv.etalab.mastodon.activities.ShowConversationActivity;
import fr.gouv.etalab.mastodon.activities.TootActivity;
import fr.gouv.etalab.mastodon.asynctasks.PostActionAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveCardAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveRepliesAsyncTask;
import fr.gouv.etalab.mastodon.client.API;
import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.Account;
import fr.gouv.etalab.mastodon.client.Entities.Attachment;
import fr.gouv.etalab.mastodon.client.Entities.Card;
import fr.gouv.etalab.mastodon.client.Entities.Emojis;
import fr.gouv.etalab.mastodon.client.Entities.Error;
import fr.gouv.etalab.mastodon.client.Entities.Status;
@ -103,6 +104,7 @@ import fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment;
import fr.gouv.etalab.mastodon.helper.CrossActions;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveCardInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveEmojiInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRepliesInterface;
@ -113,13 +115,14 @@ import fr.gouv.etalab.mastodon.sqlite.TempMuteDAO;
import static fr.gouv.etalab.mastodon.activities.MainActivity.currentLocale;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_DARK;
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
import static fr.gouv.etalab.mastodon.helper.Helper.getLiveInstance;
/**
* Created by Thomas on 24/04/2017.
* Adapter for Status
*/
public class StatusListAdapter extends RecyclerView.Adapter implements OnPostActionInterface, OnRetrieveFeedsInterface, OnRetrieveEmojiInterface, OnRetrieveRepliesInterface {
public class StatusListAdapter extends RecyclerView.Adapter implements OnPostActionInterface, OnRetrieveFeedsInterface, OnRetrieveEmojiInterface, OnRetrieveRepliesInterface, OnRetrieveCardInterface {
private Context context;
private List<Status> statuses;
@ -133,7 +136,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
private final int DISPLAYED_STATUS = 1;
private int conversationPosition;
private List<String> timedMute;
private int oldPosition;
@ -213,6 +216,19 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
}
@Override
public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {
super.onViewAttachedToWindow(holder);
final ViewHolder viewHolder = (ViewHolder) holder;
// Bug workaround for losing text selection ability, see:
// https://code.google.com/p/android/issues/detail?id=208169
viewHolder.status_content.setEnabled(false);
viewHolder.status_content.setEnabled(true);
viewHolder.status_spoiler.setEnabled(false);
viewHolder.status_spoiler.setEnabled(true);
}
class ViewHolder extends RecyclerView.ViewHolder{
LinearLayout status_content_container;
LinearLayout status_spoiler_container;
@ -535,9 +551,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_content.setText(status.getContentSpan(), TextView.BufferType.SPANNABLE);
holder.status_spoiler.setText(status.getContentSpanCW(), TextView.BufferType.SPANNABLE);
holder.status_content.setMovementMethod(LinkMovementMethod.getInstance());
holder.status_spoiler.setMovementMethod(LinkMovementMethod.getInstance());
//Manages translations
final MyTransL myTransL = MyTransL.getInstance(MyTransL.translatorEngine.YANDEX);
myTransL.setObfuscation(true);
@ -673,217 +688,204 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_account_profile_boost_by.setVisibility(View.GONE);
holder.status_account_profile.setVisibility(View.VISIBLE);
}
if( status.isTakingScreenShot()){
holder.status_document_container.setVisibility(View.GONE);
holder.status_content.setVisibility(View.VISIBLE);
holder.status_content_translated_container.setVisibility(View.GONE);
holder.status_spoiler_button.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_content_container.setVisibility(View.VISIBLE);
holder.status_translate.setVisibility(View.GONE);
holder.status_show_more.setVisibility(View.GONE);
holder.status_action_container.setVisibility(View.INVISIBLE);
holder.status_action_container.setVisibility(View.VISIBLE);
if( trans_forced || (translator != Helper.TRANS_NONE && currentLocale != null && status.getLanguage() != null && !status.getLanguage().trim().equals(currentLocale))){
holder.status_translate.setVisibility(View.VISIBLE);
}else {
holder.status_action_container.setVisibility(View.VISIBLE);
if( trans_forced || (translator != Helper.TRANS_NONE && currentLocale != null && status.getLanguage() != null && !status.getLanguage().trim().equals(currentLocale))){
holder.status_translate.setVisibility(View.VISIBLE);
}else {
holder.status_translate.setVisibility(View.GONE);
}
if( status.getReblog() == null) {
if (status.getSpoiler_text() != null && status.getSpoiler_text().trim().length() > 0 ) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if( !status.isSpoilerShown()) {
holder.status_content_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}else {
holder.status_content_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_content_container.setVisibility(View.VISIBLE);
}
}else {
if (status.getReblog().getSpoiler_text() != null && status.getReblog().getSpoiler_text().trim().length() > 0) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if( !status.isSpoilerShown()) {
holder.status_content_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}else {
holder.status_content_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_content_container.setVisibility(View.VISIBLE);
}
}
if( status.getReblog() == null) {
if (status.getMedia_attachments().size() < 1) {
holder.status_document_container.setVisibility(View.GONE);
holder.status_show_more.setVisibility(View.GONE);
} else {
//If medias are loaded without any conditions or if device is on wifi
if (!status.isSensitive() && (behaviorWithAttachments == Helper.ATTACHMENT_ALWAYS || (behaviorWithAttachments == Helper.ATTACHMENT_WIFI && isOnWifi))) {
loadAttachments(status, holder);
holder.status_show_more.setVisibility(View.GONE);
status.setAttachmentShown(true);
} else {
//Text depending if toots is sensitive or not
String textShowMore = (status.isSensitive()) ? context.getString(R.string.load_sensitive_attachment) : context.getString(R.string.load_attachment);
holder.status_show_more.setText(textShowMore);
if (!status.isAttachmentShown()) {
holder.status_show_more.setVisibility(View.VISIBLE);
holder.status_document_container.setVisibility(View.GONE);
} else {
loadAttachments(status, holder);
}
}
}
}else { //Attachments for reblogs
if (status.getReblog().getMedia_attachments().size() < 1) {
holder.status_document_container.setVisibility(View.GONE);
holder.status_show_more.setVisibility(View.GONE);
} else {
//If medias are loaded without any conditions or if device is on wifi
if (!status.getReblog().isSensitive() && (behaviorWithAttachments == Helper.ATTACHMENT_ALWAYS || (behaviorWithAttachments == Helper.ATTACHMENT_WIFI && isOnWifi))) {
loadAttachments(status.getReblog(), holder);
holder.status_show_more.setVisibility(View.GONE);
status.getReblog().setAttachmentShown(true);
} else {
//Text depending if toots is sensitive or not
String textShowMore = (status.getReblog().isSensitive()) ? context.getString(R.string.load_sensitive_attachment) : context.getString(R.string.load_attachment);
holder.status_show_more.setText(textShowMore);
if (!status.isAttachmentShown()) {
holder.status_show_more.setVisibility(View.VISIBLE);
holder.status_document_container.setVisibility(View.GONE);
} else {
loadAttachments(status.getReblog(), holder);
}
}
}
}
Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/DroidSans-Regular.ttf");
holder.status_content.setTypeface(tf);
holder.status_content_translated.setTypeface(tf);
//Toot was translated and user asked to see it
if( status.isTranslationShown() && status.getContentSpanTranslated() != null){
holder.status_content_translated.setText(status.getContentSpanTranslated(), TextView.BufferType.SPANNABLE);
holder.status_content.setVisibility(View.GONE);
holder.status_content_translated_container.setVisibility(View.VISIBLE);
}else { //Toot is not translated
holder.status_content.setVisibility(View.VISIBLE);
holder.status_content_translated_container.setVisibility(View.GONE);
}
switch (status.getVisibility()){
case "direct":
case "private":
holder.status_reblog_count.setVisibility(View.GONE);
break;
case "public":
case "unlisted":
holder.status_reblog_count.setVisibility(View.VISIBLE);
break;
default:
holder.status_reblog_count.setVisibility(View.VISIBLE);
}
switch (status.getVisibility()){
case "public":
holder.status_privacy.setImageResource(R.drawable.ic_public);
break;
case "unlisted":
holder.status_privacy.setImageResource(R.drawable.ic_lock_open);
break;
case "private":
holder.status_privacy.setImageResource(R.drawable.ic_lock_outline);
break;
case "direct":
holder.status_privacy.setImageResource(R.drawable.ic_mail_outline);
break;
}
Drawable imgFav, imgReblog, imgReply;
if( status.isFavourited() || (status.getReblog() != null && status.getReblog().isFavourited())) {
changeDrawableColor(context, R.drawable.ic_star,R.color.marked_icon);
imgFav = ContextCompat.getDrawable(context, R.drawable.ic_star);
}else {
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_star_border,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_star_border,R.color.black);
imgFav = ContextCompat.getDrawable(context, R.drawable.ic_star_border);
}
if( status.isReblogged()|| (status.getReblog() != null && status.getReblog().isReblogged())) {
changeDrawableColor(context, R.drawable.ic_repeat_boost,R.color.boost_icon);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat_boost);
}else {
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_repeat,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_repeat,R.color.black);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat);
}
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_reply,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_reply,R.color.black);
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);
holder.status_reblog_count.setCompoundDrawables(imgReblog, null, null, null);
holder.status_reply.setCompoundDrawables(imgReply, null, null, null);
boolean isOwner = status.getAccount().getId().equals(userId);
// Pinning toots is only available on Mastodon 1._6_.0 instances.
if (isOwner && Helper.canPin && (status.getVisibility().equals("public") || status.getVisibility().equals("unlisted")) && status.getReblog() == null) {
Drawable imgPin;
if( status.isPinned()|| (status.getReblog() != null && status.getReblog().isPinned())) {
changeDrawableColor(context, R.drawable.ic_pin_drop_p,R.color.marked_icon);
imgPin = ContextCompat.getDrawable(context, R.drawable.ic_pin_drop_p);
holder.status_translate.setVisibility(View.GONE);
}
if( status.getReblog() == null) {
if (status.getSpoiler_text() != null && status.getSpoiler_text().trim().length() > 0 ) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if( !status.isSpoilerShown()) {
holder.status_content_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}else {
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_pin_drop,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_pin_drop,R.color.black);
imgPin = ContextCompat.getDrawable(context, R.drawable.ic_pin_drop);
holder.status_content_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}
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);
holder.status_pin.setVisibility(View.VISIBLE);
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_content_container.setVisibility(View.VISIBLE);
}
else {
holder.status_pin.setVisibility(View.GONE);
}else {
if (status.getReblog().getSpoiler_text() != null && status.getReblog().getSpoiler_text().trim().length() > 0) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if( !status.isSpoilerShown()) {
holder.status_content_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}else {
holder.status_content_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_content_container.setVisibility(View.VISIBLE);
}
}
if( status.getReblog() == null) {
if (status.getMedia_attachments().size() < 1) {
holder.status_document_container.setVisibility(View.GONE);
holder.status_show_more.setVisibility(View.GONE);
} else {
//If medias are loaded without any conditions or if device is on wifi
if (!status.isSensitive() && (behaviorWithAttachments == Helper.ATTACHMENT_ALWAYS || (behaviorWithAttachments == Helper.ATTACHMENT_WIFI && isOnWifi))) {
loadAttachments(status, holder);
holder.status_show_more.setVisibility(View.GONE);
status.setAttachmentShown(true);
} else {
//Text depending if toots is sensitive or not
String textShowMore = (status.isSensitive()) ? context.getString(R.string.load_sensitive_attachment) : context.getString(R.string.load_attachment);
holder.status_show_more.setText(textShowMore);
if (!status.isAttachmentShown()) {
holder.status_show_more.setVisibility(View.VISIBLE);
holder.status_document_container.setVisibility(View.GONE);
} else {
loadAttachments(status, holder);
}
}
}
}else { //Attachments for reblogs
if (status.getReblog().getMedia_attachments().size() < 1) {
holder.status_document_container.setVisibility(View.GONE);
holder.status_show_more.setVisibility(View.GONE);
} else {
//If medias are loaded without any conditions or if device is on wifi
if (!status.getReblog().isSensitive() && (behaviorWithAttachments == Helper.ATTACHMENT_ALWAYS || (behaviorWithAttachments == Helper.ATTACHMENT_WIFI && isOnWifi))) {
loadAttachments(status.getReblog(), holder);
holder.status_show_more.setVisibility(View.GONE);
status.getReblog().setAttachmentShown(true);
} else {
//Text depending if toots is sensitive or not
String textShowMore = (status.getReblog().isSensitive()) ? context.getString(R.string.load_sensitive_attachment) : context.getString(R.string.load_attachment);
holder.status_show_more.setText(textShowMore);
if (!status.isAttachmentShown()) {
holder.status_show_more.setVisibility(View.VISIBLE);
holder.status_document_container.setVisibility(View.GONE);
} else {
loadAttachments(status.getReblog(), holder);
}
}
}
}
//Toot was translated and user asked to see it
if( status.isTranslationShown() && status.getContentSpanTranslated() != null){
holder.status_content_translated.setText(status.getContentSpanTranslated(), TextView.BufferType.SPANNABLE);
holder.status_content.setVisibility(View.GONE);
holder.status_content_translated_container.setVisibility(View.VISIBLE);
}else { //Toot is not translated
holder.status_content.setVisibility(View.VISIBLE);
holder.status_content_translated_container.setVisibility(View.GONE);
}
switch (status.getVisibility()){
case "direct":
case "private":
holder.status_reblog_count.setVisibility(View.GONE);
break;
case "public":
case "unlisted":
holder.status_reblog_count.setVisibility(View.VISIBLE);
break;
default:
holder.status_reblog_count.setVisibility(View.VISIBLE);
}
switch (status.getVisibility()){
case "public":
holder.status_privacy.setImageResource(R.drawable.ic_public);
break;
case "unlisted":
holder.status_privacy.setImageResource(R.drawable.ic_lock_open);
break;
case "private":
holder.status_privacy.setImageResource(R.drawable.ic_lock_outline);
break;
case "direct":
holder.status_privacy.setImageResource(R.drawable.ic_mail_outline);
break;
}
Drawable imgFav, imgReblog, imgReply;
if( status.isFavourited() || (status.getReblog() != null && status.getReblog().isFavourited())) {
changeDrawableColor(context, R.drawable.ic_star,R.color.marked_icon);
imgFav = ContextCompat.getDrawable(context, R.drawable.ic_star);
}else {
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_star_border,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_star_border,R.color.black);
imgFav = ContextCompat.getDrawable(context, R.drawable.ic_star_border);
}
if( status.isReblogged()|| (status.getReblog() != null && status.getReblog().isReblogged())) {
changeDrawableColor(context, R.drawable.ic_repeat_boost,R.color.boost_icon);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat_boost);
}else {
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_repeat,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_repeat,R.color.black);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat);
}
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_reply,R.color.dark_icon);
else
changeDrawableColor(context, R.drawable.ic_reply,R.color.black);
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);
holder.status_reblog_count.setCompoundDrawables(imgReblog, null, null, null);
holder.status_reply.setCompoundDrawables(imgReply, null, null, null);
boolean isOwner = status.getAccount().getId().equals(userId);
// Pinning toots is only available on Mastodon 1._6_.0 instances.
if (isOwner && Helper.canPin && (status.getVisibility().equals("public") || status.getVisibility().equals("unlisted")) && status.getReblog() == null) {
Drawable imgPin;
if( status.isPinned()|| (status.getReblog() != null && status.getReblog().isPinned())) {
changeDrawableColor(context, R.drawable.ic_pin_drop_p,R.color.marked_icon);
imgPin = ContextCompat.getDrawable(context, R.drawable.ic_pin_drop_p);
}else {
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_pin_drop,R.color.dark_icon);
else
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);
holder.status_pin.setVisibility(View.VISIBLE);
}
else {
holder.status_pin.setVisibility(View.GONE);
}
holder.status_content.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
@ -931,16 +933,19 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new RetrieveFeedsAsyncTask(context, RetrieveFeedsAsyncTask.Type.ONESTATUS, status.getId(),null, false,false, StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
oldPosition = conversationPosition;
conversationPosition = holder.getAdapterPosition();
new RetrieveCardAsyncTask(context, status.getId(), StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
});
holder.main_container.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new RetrieveFeedsAsyncTask(context, RetrieveFeedsAsyncTask.Type.ONESTATUS, status.getId(),null, false,false, StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
oldPosition = conversationPosition;
conversationPosition = holder.getAdapterPosition();
new RetrieveCardAsyncTask(context, status.getId(), StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
});
if( position == conversationPosition){
if( theme == Helper.THEME_LIGHT)
holder.main_container.setBackgroundResource(R.color.mastodonC3_);
@ -993,6 +998,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
}else {
holder.status_cardview.setVisibility(View.GONE);
holder.status_cardview_video.setVisibility(View.GONE);
if( theme == Helper.THEME_LIGHT)
holder.main_container.setBackgroundResource(R.color.mastodonC3__);
else
@ -1073,7 +1080,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
@Override
public void onClick(View v) {
loadAttachments(status, holder);
holder.status_show_more.setVisibility(View.GONE);
status.setAttachmentShown(true);
notifyStatusChanged(status);
/*
@ -1094,7 +1100,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
public void onFinish() {
status.setAttachmentShown(false);
holder.status_show_more.setVisibility(View.VISIBLE);
notifyStatusChanged(status);
}
}.start();
@ -1250,7 +1255,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
break;
case R.id.action_copy:
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
String content;
final String content;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
content = Html.fromHtml(status.getContent(), Html.FROM_HTML_MODE_LEGACY).toString();
else
@ -1283,16 +1288,15 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
context.startActivity(Intent.createChooser(sendIntent, context.getString(R.string.share_with)));
return true;
case R.id.action_mention:
status.setTakingScreenShot(true);
notifyStatusChanged(status);
// Get a handler that can be used to post to the main thread
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Bitmap bitmap = Helper.convertTootIntoBitmap(context, holder.getView());
status.setTakingScreenShot(false);
notifyStatusChanged(status);
String name = "@"+(status.getReblog()!=null?status.getReblog().getAccount().getAcct():status.getAccount().getAcct());
if( name.split("@", -1).length - 1 == 1)
name = name + "@" + getLiveInstance(context);
Bitmap bitmap = Helper.convertTootIntoBitmap(context, name, holder.status_content);
Intent intent = new Intent(context, TootActivity.class);
Bundle b = new Bundle();
String fname = "tootmention_" + status.getId() +".jpg";
@ -1488,31 +1492,22 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
@Override
public void onRetrieveFeeds(APIResponse apiResponse) {
if( apiResponse.getError() != null){
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
boolean show_error_messages = sharedpreferences.getBoolean(Helper.SET_SHOW_ERROR_MESSAGES, true);
if( show_error_messages)
Toast.makeText(context, apiResponse.getError().getError(),Toast.LENGTH_LONG).show();
return;
}
if( type == RetrieveFeedsAsyncTask.Type.CONTEXT && apiResponse.getStatuses().size() == 1){
int oldPosition = conversationPosition;
int newPosition = 0;
for(Status status: statuses){
if(status.getId().equals(apiResponse.getStatuses().get(0).getId())){
conversationPosition = newPosition;
break;
}
newPosition++;
}
if( oldPosition < statuses.size())
statusListAdapter.notifyItemChanged(oldPosition);
if( conversationPosition < statuses.size())
statusListAdapter.notifyItemChanged(conversationPosition);
}
}
@Override
public void onRetrieveAccount(Card card) {
if( conversationPosition < this.statuses.size() && card != null)
this.statuses.get(conversationPosition).setCard(card);
if( oldPosition < this.statuses.size())
statusListAdapter.notifyItemChanged(oldPosition);
if( conversationPosition < this.statuses.size())
statusListAdapter.notifyItemChanged(conversationPosition);
}
@Override
public void onPostAction(int statusCode, API.StatusAction statusAction, String targetedId, Error error) {

View File

@ -70,7 +70,7 @@ public class SettingsFragment extends Fragment {
private Context context;
private static final int ACTIVITY_CHOOSE_FILE = 411;
private TextView set_folder;
int count2 = 0;
int count1, count2 = 0;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@ -520,6 +520,7 @@ public class SettingsFragment extends Fragment {
}
});
//Translators
final Spinner translation_layout_spinner = rootView.findViewById(R.id.translation_layout_spinner);
ArrayAdapter<CharSequence> adapterTrans = ArrayAdapter.createFromResource(getContext(),
R.array.settings_translation, android.R.layout.simple_spinner_item);
@ -569,8 +570,28 @@ public class SettingsFragment extends Fragment {
}
});
//Resize
final Spinner resize_layout_spinner = rootView.findViewById(R.id.set_resize_picture);
ArrayAdapter<CharSequence> adapterResize = ArrayAdapter.createFromResource(getContext(),
R.array.settings_resize_picture, android.R.layout.simple_spinner_item);
resize_layout_spinner.setAdapter(adapterResize);
int positionSpinnerResize = sharedpreferences.getInt(Helper.SET_PICTURE_RESIZE, Helper.S_1MO);
resize_layout_spinner.setSelection(positionSpinnerResize);
resize_layout_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if( count1 > 0){
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt(Helper.SET_PICTURE_RESIZE, position);
editor.apply();
}else {
count1++;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
return rootView;
}

View File

@ -224,6 +224,11 @@ public class Helper {
public static final String SET_LIVE_NOTIFICATIONS = "set_live_notifications";
public static final String SET_DISABLE_GIF = "set_disable_gif";
public static final String SET_CAPITALIZE = "set_capitalize";
public static final String SET_PICTURE_RESIZE = "set_picture_resize";
public static final int S_NONE = 0;
public static final int S_512KO = 1;
public static final int S_1MO = 2;
public static final int S_2MO = 3;
public static final int ATTACHMENT_ALWAYS = 1;
public static final int ATTACHMENT_WIFI = 2;
public static final int ATTACHMENT_ASK = 3;
@ -895,6 +900,18 @@ public class Helper {
return null;
}
public static String getLiveInstanceWithProtocol(Context context) {
return instanceWithProtocol(getLiveInstance(context));
}
public static String instanceWithProtocol(String instance){
if( instance == null)
return null;
if( instance.endsWith(".onion"))
return "http://" + instance;
else
return "https://" + instance;
}
@ -958,7 +975,7 @@ public class Helper {
item.setIcon(R.drawable.ic_person);
String url = account.getAvatar();
if( url.startsWith("/") ){
url = "https://" + Helper.getLiveInstance(activity) + account.getAvatar();
url = Helper.getLiveInstanceWithProtocol(activity) + account.getAvatar();
}
Glide.with(activity.getApplicationContext())
.asBitmap()
@ -1093,7 +1110,7 @@ public class Helper {
*/
public static void loadPictureIcon(final Activity activity, String url, final ImageView imageView){
if( url.startsWith("/") ){
url = "https://" + Helper.getLiveInstance(activity) + url;
url = Helper.getLiveInstanceWithProtocol(activity) + url;
}
Glide.with(activity.getApplicationContext())
@ -1169,14 +1186,20 @@ public class Helper {
displayedName.setText(account.getDisplay_name());
String url = account.getAvatar();
if( url.startsWith("/") ){
url = "https://" + Helper.getLiveInstance(activity) + account.getAvatar();
url = Helper.getLiveInstanceWithProtocol(activity) + account.getAvatar();
}
Glide.with(activity.getApplicationContext())
.load(url)
.into(profilePicture);
String urlHeader = account.getHeader();
if( urlHeader.startsWith("/") ){
urlHeader = "https://" + Helper.getLiveInstance(activity) + account.getHeader();
urlHeader = Helper.getLiveInstanceWithProtocol(activity) + account.getHeader();
}
LinearLayout main_header_container = headerLayout.findViewById(R.id.main_header_container);
final SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
if( theme == Helper.THEME_LIGHT){
main_header_container.setBackgroundDrawable( activity.getResources().getDrawable(R.drawable.side_nav_bar_dark));
}
if (!urlHeader.contains("missing.png")) {
Glide.with(activity.getApplicationContext())
@ -1184,7 +1207,7 @@ public class Helper {
.load(urlHeader)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
ImageView backgroundImage = headerLayout.findViewById(R.id.back_ground_image);
backgroundImage.setImageBitmap(resource);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
@ -1194,15 +1217,6 @@ public class Helper {
}
}
});
}else {
LinearLayout main_header_container = headerLayout.findViewById(R.id.main_header_container);
final SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
if( theme == Helper.THEME_DARK){
main_header_container.setBackgroundDrawable( activity.getResources().getDrawable(R.drawable.side_nav_bar_dark));
}else {
main_header_container.setBackgroundDrawable( activity.getResources().getDrawable(R.drawable.side_nav_bar));
}
}
}
profilePicture.setOnClickListener(null);
@ -1668,28 +1682,24 @@ public class Helper {
* @param view The view to convert
* @return Bitmap
*/
public static Bitmap convertTootIntoBitmap(Context context, View view) {
public static Bitmap convertTootIntoBitmap(Context context, String name, View view) {
int new_element_v = View.VISIBLE, notification_delete_v = View.VISIBLE;
//Removes some elements
ImageView new_element = view.findViewById(R.id.new_element);
if( new_element != null) {
new_element_v = new_element.getVisibility();
new_element.setVisibility(View.GONE);
}
ImageView notification_delete = view.findViewById(R.id.notification_delete);
if( notification_delete != null) {
notification_delete_v = notification_delete.getVisibility();
notification_delete.setVisibility(View.GONE);
}
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth()+10, view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
canvas.drawBitmap(returnedBitmap, 10, 0, null);
Drawable bgDrawable =view.getBackground();
if (bgDrawable!=null)
bgDrawable.draw(canvas);
else
canvas.drawColor(Color.WHITE);
else {
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
if (theme == Helper.THEME_DARK) {
canvas.drawColor(ContextCompat.getColor(context, R.color.mastodonC1));
}else {
canvas.drawColor(Color.WHITE);
}
}
view.draw(canvas);
Paint paint = new Paint();
int mastodonC4 = ContextCompat.getColor(context, R.color.mastodonC4);
@ -1697,12 +1707,8 @@ public class Helper {
paint.setStrokeWidth(12);
paint.setTextSize(30);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));
canvas.drawText("Via #Mastalab", view.getWidth()-230, view.getHeight() -50, paint);
canvas.drawText(name +" - #Mastalab", 10, view.getHeight() -50, paint);
if( new_element != null)
new_element.setVisibility(new_element_v);
if( notification_delete != null)
notification_delete.setVisibility(notification_delete_v);
return returnedBitmap;
}

View File

@ -45,7 +45,11 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
@ -84,6 +88,8 @@ public class LiveNotificationService extends Service {
protected Account account;
private boolean stop = false;
private static HashMap<String, Boolean> isRunning = new HashMap<>();
private Proxy proxy;
public void onCreate() {
super.onCreate();
}
@ -95,11 +101,34 @@ public class LiveNotificationService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
boolean proxyEnabled = sharedpreferences.getBoolean(Helper.SET_PROXY_ENABLED, false);
int type = sharedpreferences.getInt(Helper.SET_PROXY_TYPE, 0);
proxy = null;
if( proxyEnabled ){
String host = sharedpreferences.getString(Helper.SET_PROXY_HOST, "127.0.0.1");
int port = sharedpreferences.getInt(Helper.SET_PROXY_PORT, 8118);
if( type == 0 )
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port));
else
proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(host, port));
final String login = sharedpreferences.getString(Helper.SET_PROXY_LOGIN, null);
final String pwd = sharedpreferences.getString(Helper.SET_PROXY_PASSWORD, null);
if( login != null) {
Authenticator authenticator = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
assert pwd != null;
return (new PasswordAuthentication(login,
pwd.toCharArray()));
}
};
Authenticator.setDefault(authenticator);
}
}
if( intent == null || intent.getBooleanExtra("stop", false) ) {
stop = true;
stopSelf();
}
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
boolean liveNotifications = sharedpreferences.getBoolean(Helper.SET_LIVE_NOTIFICATIONS, true);
String userId;
@ -156,95 +185,191 @@ public class LiveNotificationService extends Service {
private void taks(Account account){
InputStream inputStream = null;
HttpsURLConnection httpsURLConnection = null;
HttpURLConnection httpURLConnection = null;
BufferedReader reader = null;
Helper.EventStreaming lastEvent = null;
if( account != null){
isRunning.get(account.getAcct()+account.getInstance());
if(!isRunning.containsKey(account.getAcct()+account.getInstance()) || ! isRunning.get(account.getAcct()+account.getInstance())) {
try {
URL url = new URL("https://" + account.getInstance() + "/api/v1/streaming/user");
httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setRequestProperty("Content-Type", "application/json");
httpsURLConnection.setRequestProperty("Authorization", "Bearer " + account.getToken());
httpsURLConnection.setRequestProperty("Connection", "Keep-Alive");
httpsURLConnection.setRequestProperty("Keep-Alive", "header");
httpsURLConnection.setRequestProperty("Connection", "close");
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setRequestMethod("GET");
if (httpsURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
inputStream = new BufferedInputStream(httpsURLConnection.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream));
String event;
Helper.EventStreaming eventStreaming;
while ((event = reader.readLine()) != null) {
isRunning.put(account.getAcct()+account.getInstance(), true);
if ((lastEvent == Helper.EventStreaming.NONE || lastEvent == null) && !event.startsWith("data: ")) {
switch (event.trim()) {
case "event: update":
lastEvent = Helper.EventStreaming.UPDATE;
break;
case "event: notification":
lastEvent = Helper.EventStreaming.NOTIFICATION;
break;
case "event: delete":
lastEvent = Helper.EventStreaming.DELETE;
break;
default:
lastEvent = Helper.EventStreaming.NONE;
}
} else {
if (!event.startsWith("data: ")) {
lastEvent = Helper.EventStreaming.NONE;
continue;
}
event = event.substring(6);
if (lastEvent == Helper.EventStreaming.UPDATE) {
eventStreaming = Helper.EventStreaming.UPDATE;
} else if (lastEvent == Helper.EventStreaming.NOTIFICATION) {
eventStreaming = Helper.EventStreaming.NOTIFICATION;
} else if (lastEvent == Helper.EventStreaming.DELETE) {
eventStreaming = Helper.EventStreaming.DELETE;
event = "{id:" + event + "}";
if (Helper.instanceWithProtocol(account.getInstance()).startsWith("https")) {
try {
URL url = new URL("https://" + account.getInstance() + "/api/v1/streaming/user");
if( proxy != null)
httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy);
else
httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setRequestProperty("Content-Type", "application/json");
httpsURLConnection.setRequestProperty("Authorization", "Bearer " + account.getToken());
httpsURLConnection.setRequestProperty("Connection", "Keep-Alive");
httpsURLConnection.setRequestProperty("Keep-Alive", "header");
httpsURLConnection.setRequestProperty("Connection", "close");
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setRequestMethod("GET");
if (httpsURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
inputStream = new BufferedInputStream(httpsURLConnection.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream));
String event;
Helper.EventStreaming eventStreaming;
while ((event = reader.readLine()) != null) {
isRunning.put(account.getAcct() + account.getInstance(), true);
if ((lastEvent == Helper.EventStreaming.NONE || lastEvent == null) && !event.startsWith("data: ")) {
switch (event.trim()) {
case "event: update":
lastEvent = Helper.EventStreaming.UPDATE;
break;
case "event: notification":
lastEvent = Helper.EventStreaming.NOTIFICATION;
break;
case "event: delete":
lastEvent = Helper.EventStreaming.DELETE;
break;
default:
lastEvent = Helper.EventStreaming.NONE;
}
} else {
eventStreaming = Helper.EventStreaming.UPDATE;
}
lastEvent = Helper.EventStreaming.NONE;
try {
JSONObject eventJson = new JSONObject(event);
onRetrieveStreaming(eventStreaming, account, eventJson);
} catch (JSONException ignored) { ignored.printStackTrace();
if (!event.startsWith("data: ")) {
lastEvent = Helper.EventStreaming.NONE;
continue;
}
event = event.substring(6);
if (lastEvent == Helper.EventStreaming.UPDATE) {
eventStreaming = Helper.EventStreaming.UPDATE;
} else if (lastEvent == Helper.EventStreaming.NOTIFICATION) {
eventStreaming = Helper.EventStreaming.NOTIFICATION;
} else if (lastEvent == Helper.EventStreaming.DELETE) {
eventStreaming = Helper.EventStreaming.DELETE;
event = "{id:" + event + "}";
} else {
eventStreaming = Helper.EventStreaming.UPDATE;
}
lastEvent = Helper.EventStreaming.NONE;
try {
JSONObject eventJson = new JSONObject(event);
onRetrieveStreaming(eventStreaming, account, eventJson);
} catch (JSONException ignored) {
ignored.printStackTrace();
}
}
}
isRunning.put(account.getAcct() + account.getInstance(), false);
}
isRunning.put(account.getAcct() + account.getInstance(), false);
}
} catch (Exception ignored) {
isRunning.put(account.getAcct() + account.getInstance(), false);
ignored.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException ignored) {
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException ignored) {
}
}
if (inputStream != null) {
httpsURLConnection.disconnect();
}
SystemClock.sleep(5000);
Intent streamingIntent = new Intent(this, LiveNotificationService.class);
streamingIntent.putExtra("userId", account.getId());
try {
startService(streamingIntent);
} catch (Exception ignored) {
isRunning.put(account.getAcct() + account.getInstance(), false);
ignored.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException ignored) {
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException ignored) {
}
}
if (inputStream != null) {
httpsURLConnection.disconnect();
}
SystemClock.sleep(5000);
Intent streamingIntent = new Intent(this, LiveNotificationService.class);
streamingIntent.putExtra("userId", account.getId());
try {
startService(streamingIntent);
} catch (Exception ignored) {
}
}
}else {
try {
URL url = new URL("http://" + account.getInstance() + "/api/v1/streaming/user");
if( proxy != null)
httpURLConnection = (HttpURLConnection) url.openConnection(proxy);
else
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestProperty("Content-Type", "application/json");
httpURLConnection.setRequestProperty("Authorization", "Bearer " + account.getToken());
httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
httpURLConnection.setRequestProperty("Keep-Alive", "header");
httpURLConnection.setRequestProperty("Connection", "close");
httpURLConnection.setRequestMethod("GET");
if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
inputStream = new BufferedInputStream(httpURLConnection.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream));
String event;
Helper.EventStreaming eventStreaming;
while ((event = reader.readLine()) != null) {
isRunning.put(account.getAcct() + account.getInstance(), true);
if ((lastEvent == Helper.EventStreaming.NONE || lastEvent == null) && !event.startsWith("data: ")) {
switch (event.trim()) {
case "event: update":
lastEvent = Helper.EventStreaming.UPDATE;
break;
case "event: notification":
lastEvent = Helper.EventStreaming.NOTIFICATION;
break;
case "event: delete":
lastEvent = Helper.EventStreaming.DELETE;
break;
default:
lastEvent = Helper.EventStreaming.NONE;
}
} else {
if (!event.startsWith("data: ")) {
lastEvent = Helper.EventStreaming.NONE;
continue;
}
event = event.substring(6);
if (lastEvent == Helper.EventStreaming.UPDATE) {
eventStreaming = Helper.EventStreaming.UPDATE;
} else if (lastEvent == Helper.EventStreaming.NOTIFICATION) {
eventStreaming = Helper.EventStreaming.NOTIFICATION;
} else if (lastEvent == Helper.EventStreaming.DELETE) {
eventStreaming = Helper.EventStreaming.DELETE;
event = "{id:" + event + "}";
} else {
eventStreaming = Helper.EventStreaming.UPDATE;
}
lastEvent = Helper.EventStreaming.NONE;
try {
JSONObject eventJson = new JSONObject(event);
onRetrieveStreaming(eventStreaming, account, eventJson);
} catch (JSONException ignored) {
ignored.printStackTrace();
}
}
}
isRunning.put(account.getAcct() + account.getInstance(), false);
}
} catch (Exception ignored) {
isRunning.put(account.getAcct() + account.getInstance(), false);
ignored.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException ignored) {
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException ignored) {
}
}
if (inputStream != null) {
httpURLConnection.disconnect();
}
SystemClock.sleep(5000);
Intent streamingIntent = new Intent(this, LiveNotificationService.class);
streamingIntent.putExtra("userId", account.getId());
try {
startService(streamingIntent);
} catch (Exception ignored) {
}
}
}
}

View File

@ -142,6 +142,25 @@
android:text="@string/show_boost_count"
android:layout_height="wrap_content" />
<!-- Resize pictures -->
<LinearLayout
android:layout_marginTop="10dp"
android:id="@+id/resize_layout_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/set_resize_picture"/>
<Spinner
android:id="@+id/set_resize_picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<!-- TABS Layout -->
<LinearLayout
android:id="@+id/translation_layout_container"

View File

@ -94,6 +94,7 @@
<TextView
android:id="@+id/status_spoiler"
android:layout_marginTop="10dp"
android:textIsSelectable="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button

View File

@ -139,6 +139,7 @@
<TextView
android:id="@+id/status_spoiler"
android:layout_marginTop="10dp"
android:textIsSelectable="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button

View File

@ -141,6 +141,25 @@
android:text="@string/show_boost_count"
android:layout_height="wrap_content" />
<!-- Resize pictures -->
<LinearLayout
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/set_resize_picture"/>
<Spinner
android:id="@+id/set_resize_picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<!-- Translation engine -->
<LinearLayout
android:layout_marginTop="10dp"

View File

@ -22,13 +22,7 @@
android:id="@+id/container"
android:layout_height="@dimen/nav_header_height"
>
<ImageView
android:id="@+id/back_ground_image"
android:layout_alignParentTop="true"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_alignParentTop="true"
android:layout_width="match_parent"
@ -103,5 +97,11 @@
android:layout_height="20dp"
tools:ignore="ContentDescription" />
</LinearLayout>
<ImageView
android:id="@+id/back_ground_image"
android:layout_alignParentTop="true"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
</RelativeLayout>

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -342,6 +348,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -330,6 +330,12 @@
<item>يانديكس</item>
<item>لا</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">تحديد لون الإشعار الضوئي :</string>
<string-array name="led_colours">
<item>أزرق</item>
@ -354,6 +360,7 @@
<string name="followed_by">يتابعك</string>
<string name="action_search">البحث</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">الإخطارات المدفوعة</string>
<string name="settings_popup_message">

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -342,6 +348,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -321,6 +321,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -345,6 +351,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -342,6 +348,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -322,6 +322,12 @@
<item>Yandex</item>
<item>Nein</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">LED Farbe auswählen</string>
<string-array name="led_colours">
<item>Blau</item>
@ -346,6 +352,7 @@
<string name="followed_by">folgt dir</string>
<string name="action_search">Suche</string>
<string name="set_capitalize">Ersten Buchstaben bei Antworten groß schreiben</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push Benachrichtigungen</string>
<string name="settings_popup_message">Bitte bestätige welche Push Benachrichtigungen du erhalten möchtest. Diese können später im Benachrichtungsreiter aktiviert oder deaktiviert werden.</string>

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -342,6 +348,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Establecer color LED:</string>
<string-array name="led_colours">
<item>Azul</item>
@ -342,6 +348,7 @@
<string name="followed_by">Te sigue</string>
<string name="action_search">Buscar</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notificaciones Push</string>
<string name="settings_popup_message">

View File

@ -40,7 +40,7 @@
<string name="choose_picture">Hautatu irudi bat…</string>
<string name="clear">Garbitu</string>
<string name="microphone">Mikrofonoa</string>
<string name="camera">Camera</string>
<string name="camera">Kamera</string>
<string name="speech_prompt">Esan zerbait</string>
<string name="speech_not_supported">Zure gailuak ez du onartzen ahots sarrera!</string>
<string name="delete_all">Ezabatu guztiak</string>
@ -318,6 +318,12 @@
<item>Yandex</item>
<item>Ez</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Ezarri LEDaren kolorea:</string>
<string-array name="led_colours">
<item>Urdina</item>
@ -342,6 +348,7 @@
<string name="followed_by">Zu jarraitzen</string>
<string name="action_search">Bilatu</string>
<string name="set_capitalize">Lehen letra maiuskulaz erantzunetan</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push jakinarazpenak</string>
<string name="settings_popup_message">
@ -433,11 +440,11 @@ Eskerrik asko Stéphane logoagatik. </string>
<string name="data_export_success">%1$s toot esportatu dira %2$stik.</string>
<string name="data_export_error">Zerbait ez da behar bezala joan %1$s(e)ko datuak esportatzean</string>
<!-- Proxy -->
<string name="proxy_set">Proxy</string>
<string name="proxy_type">Type</string>
<string name="proxy_enable">Enable proxy?</string>
<string name="poxy_host">Host</string>
<string name="poxy_port">Port</string>
<string name="poxy_login">Login</string>
<string name="poxy_password">Password</string>
<string name="proxy_set">Proxya</string>
<string name="proxy_type">Mota</string>
<string name="proxy_enable">Gaitu proxya?</string>
<string name="poxy_host">Ostalaria</string>
<string name="poxy_port">Ataka</string>
<string name="poxy_login">Saioa</string>
<string name="poxy_password">Pasahitza</string>
</resources>

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -342,6 +348,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -40,7 +40,7 @@
<string name="choose_picture">Changer l\'image…</string>
<string name="clear">Nettoyer</string>
<string name="microphone">Microphone</string>
<string name="camera">Camera</string>
<string name="camera">Appareil photo</string>
<string name="speech_prompt">Veuillez dire quelque chose</string>
<string name="speech_not_supported">Désolé ! Votre appareil ne supporte pas la commande vocale !</string>
<string name="delete_all">Tout effacer</string>
@ -318,6 +318,12 @@
<item>Yandex</item>
<item>Non</item>
</string-array>
<string-array name="settings_resize_picture">
<item>Non</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Couleur de la LED :</string>
<string-array name="led_colours">
<item>Bleu</item>
@ -342,6 +348,7 @@
<string name="followed_by">Vous suit</string>
<string name="action_search">Recherche</string>
<string name="set_capitalize">Première lettre en majuscule pour les réponses</string>
<string name="set_resize_picture">Redimensionner les images</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notifications push</string>
<string name="settings_popup_message">
@ -434,9 +441,9 @@
<!-- Proxy -->
<string name="proxy_set">Proxy</string>
<string name="proxy_type">Type</string>
<string name="proxy_enable">Enable proxy?</string>
<string name="poxy_host">Host</string>
<string name="proxy_enable">Activer le proxy ?</string>
<string name="poxy_host">Serveur</string>
<string name="poxy_port">Port</string>
<string name="poxy_login">Login</string>
<string name="poxy_password">Password</string>
<string name="poxy_login">Identifiant</string>
<string name="poxy_password">Mot de passe</string>
</resources>

View File

@ -324,6 +324,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -348,6 +354,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -342,6 +348,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -0,0 +1,450 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="navigation_drawer_open">Բացել ընտրացանկը</string>
<string name="navigation_drawer_close">Փակել ընտրացանկը</string>
<string name="action_about">Տեղեկություններ</string>
<string name="action_about_instance">Հանգույցի մասին</string>
<string name="action_privacy">Գաղտնիություն</string>
<string name="action_cache">Հիշապահեստ</string>
<string name="action_logout">Ելք</string>
<string name="login">Մուտք</string>
<!-- common -->
<string name="close">Փակել</string>
<string name="yes">Այո</string>
<string name="no">Ոչ</string>
<string name="cancel">Չեղարկել</string>
<string name="download">Ներբեռնել</string>
<string name="download_file">Ներբեռնել %1$s-ը</string>
<string name="download_over">Ներբեռնումն ավարտված է</string>
<string name="save_file">Պահել %1$s-ը</string>
<string name="save_over">Մեդիան պահված է</string>
<string name="download_from" formatted="false">Նիշք․ %1$s</string>
<string name="password">Գաղտնաբառ</string>
<string name="email">Էլ․հասցե</string>
<string name="accounts">Հաշիվներ</string>
<string name="toots">Թթեր</string>
<string name="tags">Պիտակներ</string>
<string name="token">Կտրոն</string>
<string name="save">Պահել</string>
<string name="restore">Վերականգնել</string>
<string name="two_factor_authentification">Երկքայլ իսկորոշո՞ւմ</string>
<string name="other_instance">mastodon.etalab.gouv.fr-ից տարբեր հանգու՞յց</string>
<string name="no_result">Ոչ մի արդյունք</string>
<string name="instance">Հանգույց</string>
<string name="instance_example">Հանգույց․ mastodon.social</string>
<string name="toast_account_changed" formatted="false">Օգտագործվող հաշիվ՝ %1$s</string>
<string name="add_account">Ավելացնել հաշիվ</string>
<string name="clipboard">Թութի բովանդակությունը պատճենվել է սեղմատախտակին</string>
<string name="change">Փոխել</string>
<string name="choose_picture">Ընտրել նկար…</string>
<string name="clear">Մաքրել</string>
<string name="microphone">Խոսափող</string>
<string name="camera">Խցիկ</string>
<string name="speech_prompt">Ինչ-որ բան ասա</string>
<string name="speech_not_supported">Ներիր։ Քո սարքը չի աջակցում ձայնային մուտքագրում։</string>
<string name="delete_all">Ջնջել ամենը</string>
<string name="translate_toot">Թարգմանել այս թութը։</string>
<string name="schedule">Հերթ</string>
<string name="text_size">Տեքստի և պատկերակների չափսերը</string>
<string name="text_size_change">Փոխել տեքստի ներկայիս չափսը․</string>
<string name="icon_size_change">Փոխել պատկերակի ներկայիս չափսը․</string>
<string name="next">Հաջորդը</string>
<string name="previous">Նախորդը</string>
<string name="open_with">Բացել այլ հավելվածով</string>
<string name="validate">Վավերացնել</string>
<string name="media">Մեդիա</string>
<string name="share_with">Կիսվել</string>
<string name="shared_via">Տարածել Մաստալաբով</string>
<string name="replies">Արձագանքներ</string>
<string name="username">Օգտանուն</string>
<string name="drafts">Սևագրեր</string>
<string name="new_data">Թարմ տվյալներն հասանելի են։ Ուզու՞մ ես դրանք տեսնել</string>
<string name="favourite">Նախընտրություններ</string>
<string name="follow">Նոր հետևորդներ</string>
<string name="mention">Հիշատակումներ</string>
<string name="reblog">Խրախուսումներ</string>
<string name="show_boosts">Ցուցադրել խրախ-ները</string>
<string name="show_replies">Ցուցադրել արձագանքները</string>
<string name="action_open_in_web">Բացել զննիչում</string>
<string name="translate">Թարգմանել</string>
<string name="please_wait">Սպասիր մի քանի վայրկյան մինչև այս գործողութ-նը կատարելը։</string>
<!--- Menu -->
<string name="home_menu">Տուն</string>
<string name="local_menu">Տեղական հոսք</string>
<string name="global_menu">Դաշնային հոսք</string>
<string name="neutral_menu_title">Ընտրանքներ</string>
<string name="favorites_menu">Նախընտրություններ</string>
<string name="communication_menu_title">Հաղորդակցում</string>
<string name="muted_menu">Խլացված օգտատերեր</string>
<string name="blocked_menu">Արգելափակված օգտատերեր</string>
<string name="remote_follow_menu">Հետևել հեռակա</string>
<string name="notifications">Ծանուցումներ</string>
<string name="follow_request">Հետևելու հայտեր</string>
<string name="optimization">Լավարկում</string>
<string name="settings">Կարգավորումներ</string>
<string name="profile">Էջ</string>
<string name="make_a_choice">Ի՞նչ ես ուզում անել</string>
<string name="delete_account_title">Ջնջել հաշիվ</string>
<string name="delete_account_message" formatted="false">Ջնջե՞լ %1$s հաշիվը հավելվածից</string>
<string name="send_email">Ուղարկել էլփոստ</string>
<string name="choose_file">Ընտրիր նիշք</string>
<string name="choose_file_error">Ոչ մի նիշքախույզ չի հայտնաբերվել!</string>
<string name="click_to_change">Կտտացրու հետագծի վրա՝ այն փոխելու համար</string>
<string name="failed">Ձախողում</string>
<string name="scheduled_toots">Հերթագրված թութեր</string>
<string name="disclaimer_full">Սույն տեղեկատվությունը կարող է օգտատիրոջ էջն արտացոլել ոչ լիարժեք։</string>
<string name="insert_emoji">Էմոջի ներմուծել</string>
<string name="no_emoji">Ներկա պահին հավելվածը չունի հավաքագրած էմոջիներ։</string>
<string name="live_notif">Ուղիղ ծանուցումներ</string>
<!-- Status -->
<string name="no_status">Թութ չկա</string>
<string name="fav_added">Թութն ավելացվել է նախընտրություններին</string>
<string name="fav_removed">Թութը հեռացվել է նախընտրություններից</string>
<string name="reblog_added">Թութը խրախուսվել է</string>
<string name="reblog_removed">Թութն այլևս խրախուսված չէ</string>
<string name="reblog_by">Խրախուսվել է %1$s-ի կողմից</string>
<string name="favourite_add">Ավելացնե՞լ այս թութը նախընտրություններին</string>
<string name="favourite_remove">Հեռացնե՞լ այս թութը Նախընտրություններից</string>
<string name="reblog_add">Խրախուսե՞լ այս թութը։</string>
<string name="reblog_remove">Ապախրախուսե՞լ այս թութը։</string>
<string name="pin_add">Մեխե՞լ այս թութը։</string>
<string name="pin_remove">Արձակե՞լ այս թութը։</string>
<string name="more_action_1">Խլացնել</string>
<string name="more_action_2">Արգելափակել</string>
<string name="more_action_3">Ահազանգել</string>
<string name="more_action_4">Հեռացնել</string>
<string name="more_action_5">Պատճենել</string>
<string name="more_action_6">Տարածել</string>
<string name="more_action_7">Հիշատակել</string>
<string name="more_action_8">Ժամանակավոր խլացում</string>
<string-array name="more_action_confirm">
<item>Խլացնե՞լ այս հաշիվը</item>
<item>Արգելափակե՞լ այս հաշիվը</item>
<item>Ահազանգե՞լ այս հաշվի մասին</item>
</string-array>
<string-array name="more_action_owner_confirm">
<item>Հեռացնե՞լ այս թութը</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d արձագանք</item>
<item quantity="other">%d արձագանք</item>
</plurals>
<!-- Date -->
<string name="date_seconds">%d վրկ</string>
<string name="date_minutes">%d ր</string>
<string name="date_hours">%d ժ</string>
<string name="date_day">%d օր</string>
<!-- TOOT -->
<string name="toot_cw_placeholder">Զգուշացում</string>
<string name="toot_placeholder">Մտքիդ ի՞նչ կա</string>
<string name="toot_it">ԹՈՒԹԵԼ!</string>
<string name="cw">cw</string>
<string name="toot_title">Թութ գրել</string>
<string name="toot_title_reply">Արձագանքել թութին</string>
<string name="toot_no_space">Մոտեցել ես 500 նիշ սահմանափակմանը</string>
<string name="toot_select_image">Ընտրել մեդիա</string>
<string name="toot_select_image_error">Մեդիան ընտրելու ընթացքում սխալ է հայտնվել</string>
<string name="toot_delete_media">Ջնջե՞լ այս մեդիան</string>
<string name="toot_error_no_content">Քո թութը դատարկ է</string>
<string name="toot_visibility_tilte">Թութի տեսանելիությունը</string>
<string name="toots_visibility_tilte">Թութերի սկզբնադիր տեսանելիությունը՝ </string>
<string name="toot_sent">Թութն ուղարկված է</string>
<string name="toot_reply_content_title">Արձագանքում ես տվյալ թութին․</string>
<string name="toot_sensitive">Զգայուն բովանդակությու՞ն</string>
<string-array name="toot_visibility">
<item>Տեղադրել հանրային հոսքերին</item>
<item>Չտեղադրել հանրային հոսքերին</item>
<item>Գրառել միայն հետևորդների համար</item>
<item>Գրառել միայն հիշատակված օգտատերերի համար</item>
</string-array>
<string name="no_draft">Ոչ մի սևագիր</string>
<string name="choose_toot">Ընտրել թութ</string>
<string name="choose_accounts">Ընտրել հաշիվ</string>
<string name="select_accounts">Ընտրել մի քանի հաշիվ</string>
<string name="remove_draft">Հեռացնե՞լ սևագիրը</string>
<string name="show_reply">Կտտացրեւ կոճակին՝ բնօրինակ թութը տեսնելու համար</string>
<string name="upload_form_description">Նկարագրիր՝ տեսողության խնդիրներ ունեցողների համար</string>
<!-- Instance -->
<string name="instance_no_description">Նկարագրություն չկա</string>
<!-- About -->
<string name="about_vesrion">Թողարկում %1$s</string>
<string name="about_developer">Մշակող․</string>
<string name="about_license">Արտոնագիր․</string>
<string name="about_license_action">GNU GPL V3</string>
<string name="about_code">Սկզբնական կոդ․</string>
<string name="about_yandex">Թութերի թարգմանությունը․</string>
<string name="about_thekinrar">Փնտրել հանգույցներ․</string>
<string name="about_thekinrar_action">instances.social</string>
<string name="thanks_text_logo">Պատկերակի հեղինակ․</string>
<!-- Conversation -->
<string name="conversation">Զրույց</string>
<!-- Accounts -->
<string name="no_accounts">Ցուցադրելու հաշիվ չկա</string>
<string name="no_follow_request">Հետևելու հայտեր չկան</string>
<string name="status_cnt">Թութեր \n %1$s</string>
<string name="following_cnt">Հետևում եմ \n %1$s</string>
<string name="followers_cnt">Հետևում են \n %1$s</string>
<string name="pins_cnt">Մեխեր \n %d</string>
<string name="authorize">Թույլատրել</string>
<string name="reject">Մերժել</string>
<!-- Scheduled toots -->
<string name="no_scheduled_toots">Հերթագրված թութեր չկան</string>
<string name="no_scheduled_toots_indications">Թութ գրիր, հետո ընտրիր <b>Հերթ</b>ը գլխավոր մենյուից</string>
<string name="remove_scheduled">Ջնջե՞լ հերթագրված թութը</string>
<string name="media_count">Մեդիա %d</string>
<string name="toot_scheduled">Թութը հերթագրված է</string>
<string name="toot_scheduled_date">Հերթագրման ամսաթիվը պետք է լինի ավելի ուշ քան ընթացիկ ժամը</string>
<string name="warning_battery">Մարտկոցի տնտեսումը միացված է։ Հնարավոր է չաշխատի այնպես ինչպես ակնկալում եք</string>
<!-- timed mute -->
<string name="timed_mute_date_error">Խլացնելու ժամանակահատվածը պետք է լինի 1 րոպեից ավել։</string>
<string name="timed_mute_date">%1$s-ը խլացվել է մինչև %2$s։ \n Կարող ես ապախլացնել հաշիվն իր էջից։</string>
<string name="timed_mute_profile">%1$s-ը խլացվել է մինչև %2$s։ \n Կտտացրու այստեղ՝ ապխլացնելու համար։</string>
<!-- Notifications -->
<string name="no_notifications">Ծանուցում չկա</string>
<string name="notif_mention">Քեզ հիշատակել է</string>
<string name="notif_reblog">խրախուսել է քո թութը</string>
<string name="notif_favourite">գրառումդ ավելացրել է նախընտրումներին</string>
<string name="notif_follow">հետևում է քեզ</string>
<string name="notif_pouet">Նոր թութ %1$s-ից</string>
<plurals name="other_notifications">
<item quantity="one">և մեկ այլ ծանուցում</item>
<item quantity="other">և %d այլ ծանուցումներ</item>
</plurals>
<plurals name="other_notif_hometimeline">
<item quantity="one">և մեկ այլ թութ</item>
<item quantity="other">և %d այլ թութ</item>
</plurals>
<string name="delete_notification_ask">Ջնջե՞լ ծանուցումը</string>
<string name="delete_notification_ask_all">Ջնջե՞լ բոլոր ծանուցումները</string>
<string name="delete_notification">Ծանուցումը ջնջված է</string>
<string name="delete_notification_all">Բոլոր ծանուցումները ջնջված են</string>
<!-- HEADER -->
<string name="following">Հետևում եմ</string>
<string name="followers">Հետևորդներ</string>
<string name="pinned_toots">Մեխած</string>
<!-- TOAST -->
<string name="client_error">Հաճախորդի id-ն հնարավոր չէ ստանալ</string>
<string name="no_internet">Կապ չկա</string>
<string name="toast_block">Հաշիվն արգելափակված է</string>
<string name="toast_unblock">Հաշիվն այլևս արգելափակված չէ</string>
<string name="toast_mute">Հաշիվը խլացված է</string>
<string name="toast_unmute">Հաշիվն այլևս խլացված չէ</string>
<string name="toast_follow">Հետևում ես հաշվին</string>
<string name="toast_unfollow">Այլևս չես հետևում հաշվին</string>
<string name="toast_reblog">Թութը խրախուսվել է</string>
<string name="toast_unreblog">Թութն այլևս չի խրախուսվում</string>
<string name="toast_favourite">Թութն ավելացվել է քո նախընտրություններին</string>
<string name="toast_unfavourite">Թութը հեռացվել է նախընտրություններից</string>
<string name="toast_report">Թութի վերաբերյալ ահազանգ կա</string>
<string name="toast_unstatus">Թութը ջնջվել է</string>
<string name="toast_pin">Թութը մեխվել է</string>
<string name="toast_unpin">Թութն ապամեխվել է</string>
<string name="toast_error">Ուպս! Ինչ-որ բան այն չէ</string>
<string name="toast_code_error">Ինչ որ բան այն չէ! Հանգույցը չվերադարձրեց հաստատման կոդը</string>
<string name="toast_error_instance">Հանգույցի դոմեյնը կարծես անվավեր է</string>
<string name="toast_error_loading_account">Ինչ-որ սխալ տեղի ունեցավ հաշիվը փոխելու ընթացքում</string>
<string name="toast_error_search">Փնտրելիս սխալ տեղի ունեցավ</string>
<string name="toast_error_login">Չես կարող մուտք գործել</string>
<string name="toast_update_credential_ok">Էջի բովանդակությունը պահպանված է</string>
<string name="nothing_to_do">Անհնար է ինչ-րո բան անել</string>
<string name="toast_saved">Մեդիան պահպանված է</string>
<string name="toast_error_translate">Թարգմանության ընթացքում սխալ տեղի ունեցավ</string>
<string name="toast_toot_saved">Սևագիրը պահված է</string>
<string name="toast_error_char_limit">Վստա՞հ ես որ սույն հանգույցը թույլատրում է նիշերի նման քանակ։ Սովորաբար առավելագույնը 500 նիշն է։</string>
<string name="toast_visibility_changed">Թութերի տեսանելությունը փոխվել է %1$s հաշվի համար</string>
<string name="toast_empty_search">Հանգույցի ու օգտատիրոջ անունները չեն կարող դատարկ լինել</string>
<!-- Settings -->
<string name="settings_title_optimisation">Բեռնման լավարկում</string>
<string name="set_toots_page">Թութերի քանակը մեկ բեռնման համար</string>
<string name="set_accounts_page">Հաշիվների քանակը՝ մեկ բեռնման համար</string>
<string name="set_notifications_page">Ծանուցումների քանակը՝ մեկ բեռնման համար</string>
<string name="set_attachment_always">Միշտ</string>
<string name="set_attachment_wifi">WIFI</string>
<string name="set_attachment_ask">Հարցնել</string>
<string name="set_attachment_action">Բեռնել մեդիան</string>
<string name="load_attachment">Բեռնել նկարները</string>
<string name="load_attachment_spoiler">Ցույց տալ…</string>
<string name="load_attachment_spoiler_less">Ցույց չտալ…</string>
<string name="load_sensitive_attachment">Զգայուն բովանդակություն</string>
<string name="set_display_reply">Ցուցադրել արձագանքին նախորդող հաղորդագրությունը</string>
<string name="set_display_local">Ցուցադրել տեղական հոսքը</string>
<string name="set_display_global">Ցուցադրել դաշնային հոսքը</string>
<string name="set_disable_gif">Անջատել գիֆ նկարները</string>
<string name="set_folder_title">Հետագիծ․ </string>
<string name="set_auto_store_toot">Ինքնաշխատ պահել սևագրերը</string>
<string name="set_bubble_counter">Ցուցադրել հաշվիչները</string>
<string name="set_auto_add_media_url">Թութում ներառել մեդիայի հղումը</string>
<string name="settings_title_notifications">Կարգավորել ծանուցումները</string>
<string name="set_notif_follow">Տեղեկացնել, երբ որևէ մեկը սկսում է հետևել քեզ</string>
<string name="set_notif_follow_ask">Տեղեկացնել, երբ երևէ մեկը հայց է ուղարկում՝ հետևելու քեզ</string>
<string name="set_notif_follow_share">Տեղեկացնել, երբ որևէ մեկը տարածում է թութդ</string>
<string name="set_notif_follow_add">Տեղեկացնել, երբ որևէ մեկը հավանում է թութդ</string>
<string name="set_notif_follow_mention">Տեղեկացնել, երբ որևէ մեկը նշում է քեզ</string>
<string name="set_share_validation">Ցուցադրել հաստատման պատուհանը տարածելուց առաջ</string>
<string name="set_share_validation_fav">Ցուցադրել հաստատման պատուհանը հավանածներին ավելացնելուց առաջ</string>
<string name="settings_title_more_options">Հավելյալ կարգավորումներ</string>
<string name="set_wifi_only">Ծանուցել միայն WIFI-ին կպած</string>
<string name="set_notify">Ծանուցե՞լ</string>
<string name="set_notif_silent">Լուռ ծանուցումներ</string>
<string name="set_night_mode">Գիշերային ոճ</string>
<string name="set_nsfw_timeout">NSFW ցուցադրման տևողությունը(վրկյ-ով, 0-ն անջատելն է)</string>
<string name="settings_title_profile">Խմբագրել Էջը</string>
<string name="set_profile_description">Կենսագրություն…</string>
<string name="set_save_changes">Պահել փոփոխությունները</string>
<string name="set_header_picture_overlay">Ընտրել գլխավոր նկար</string>
<string name="set_preview_reply">Ցուցադրել արձագանքների քանակը հարազատ հոսքում</string>
<string name="set_preview_reply_pp">Ցուցադրե՞լ անձնանկարները</string>
<string name="set_multiaccount_actions">Թույլատրե՞լ հաշիվների միջև փոխհարաբերությունները</string>
<string name="note_no_space">Դու հատե՛լ ես թույլատրված 160 նիշերի սահմանը</string>
<string name="username_no_space">Դու հատե՛լ ես թույլատրված 30 նիշերի սահմանը</string>
<string name="settings_title_hour">Ծանուցվելու ժամանակահատվածը՝</string>
<string name="settings_time_from">Սկսած՝</string>
<string name="settings_time_to">մինչև</string>
<string name="settings_time_greater">Ժամը պետք է ավելի ուշ լինի, քան %1$s֊ը</string>
<string name="settings_time_lower">Ժամը պետք է ավելի վաղ լինի, քան %1$s֊ը</string>
<string name="settings_hour_init">Սկսելու ժամը</string>
<string name="settings_hour_end">Ավարտի ժամը</string>
<string name="embedded_browser">Օգտագործել ներկառուցված զննիչը</string>
<string name="use_javascript">Թույլատրել JavaScript</string>
<string name="use_cookies">Թույլատրել երրորդ կողմի քուքիներ</string>
<string name="settings_ui_layout">Հոսքերի չափսը. </string>
<string-array name="settings_menu_tabs">
<item>Ներդիրներ</item>
<item>Մենյու</item>
<item>Ներդիրներ և մենյու</item>
</string-array>
<string-array name="settings_translation">
<item>Յանդեքս</item>
<item>Ոչ</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Կարգել LED-ի գույնը․</string>
<string-array name="led_colours">
<item>Կապույտ</item>
<item>Երկնագույն</item>
<item>Մանուշակագույն</item>
<item>Կանաչ</item>
<item>Կարմիր</item>
<item>Դեղին</item>
<item>Սպիտակ</item>
</string-array>
<string name="set_title_news">Նորություններ</string>
<string name="set_notification_news">Ծանուցել հարազատ հոսքում նոր թթերի դեպքում</string>
<string name="set_show_error_messages">Ցուցադրել սխալների հաղորդումները</string>
<string name="action_follow">Հետևել</string>
<string name="action_unfollow">Չհետևել</string>
<string name="action_block">Արգելափակել</string>
<string name="action_unblock">Ապաարգելափակել</string>
<string name="action_mute">Խլացնել</string>
<string name="action_no_action">Գործողություն չկա</string>
<string name="action_unmute">Ապախլացնել</string>
<string name="request_sent">Հայտն ուղարկված է</string>
<string name="followed_by">Հետևում է քեզ</string>
<string name="action_search">Փնտրել</string>
<string name="set_capitalize">Առաջին տառը մեծատառով՝ երբ արձագանքում եմ</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Փուշ ծանուցումներ</string>
<string name="settings_popup_message">
Հաստատիր այն փուշ ծանուցումները, որոնք ցանկանում ես ստանալ։
Հետագայում կարող ես անջատել կամ միացնել այս ծանուցումները կարգավորումներից։
</string>
<string name="settings_popup_timeline">Հարազատ հոսքում չկարդացած թթերի համա՞ր</string>
<string name="settings_popup_notification">Չկարդացած ծանուցումների համա՞ր</string>
<!-- CACHE -->
<string name="cache_title">Մաքրել քեշը</string>
<string name="cache_message">Քեշում %1$s բովանդակություն կա։\n\nՑանկանում ես ջնջե՞լ</string>
<string name="cache_units">Մբ</string>
<string name="toast_cache_clear">Քեշը մաքուր է! %1$s տարածք ազատվեց</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Հավաքած բովանդակություն</string>
<string name="privacy_data">
Հաշիվներից սարքում պահվում են զուտ հիմնական տեղեկությունները։
Այս տեղեկությունները հույժ գաղտնի են և կարող են օգտագործվել միայն հավելվածի կողմից։
Հավելվածը ջնջելու դեպքում այդ տեղեկություններն իսկույն կհեռացվեն սարքից։\n
&#9888; Ծածկանուններն ու գաղտնաբառերը երբեք չեն պահվում։ Դրանք օգտագործվում են միայն հանգույցի հետ ապահով իսկորոշման(SSL) ընթացքում։
</string>
<string name="privacy_authorizations_title">Թույլտվություններ.</string>
<string name="privacy_authorizations">
- <b>ACCESS_NETWORK_STATE</b>. Օգտագործվում է սարքի կապը WIFI-ին ստուգելու համար։\n
- <b>INTERNET</b> Օգտագործվում է հանգույցին հարցումներ ուղարկելու համար։\n
- <b>WRITE_EXTERNAL_STORAGE</b> Օգտագործվում է մեդիայի պահման կամ հավելվածն SD քարտ տեղափոխելու համար։\n
- <b>READ_EXTERNAL_STORAGE</b> Օգտագործվում է թթին մեդիա կցելու համար։\n
- <b>BOOT_COMPLETED</b> Օգտագործվում է ծանուցման ծառայությունը գործարկելու համար։\n
- <b>WAKE_LOCK</b>. Օգտագործվում է ծանուցման ծառայության մատուցման ընթացքում։
</string>
<string name="privacy_API_authorizations_title">API-ի թույլտվություններ․</string>
<string name="privacy_API_authorizations">
-<b>Կարդալ</b> Կարդալ տվյալները։\n
-<b>Գրել</b> Գրառումներ անել և վերբեռնել մեդիա դրանց համար։\n
-<b>Հետևել</b> Հետևել, չհետևել, արգելափակել, ապաարգելափակել։\n\n
<b>&#9888; Այս գործողություններն իրականացվում են միայն օգտատիրոջ հայցով։</b>
</string>
<string name="privacy_API_title">Հսկում ու գրադարաններ</string>
<string name="privacy_API">
Հավելվածը <b>չի՛ օգտագործում հսկող գործիքներ</b> (լսարանի չափում, սխալանքների զեկուցում և այլն) և չի՛ պարունակում որևէ գովազդ։\n\n
Գրադարանների օգտագործումը հասցված է նվազագույնի՝\n
֊<b>Glide</b>՝ մեդիան կառավարելու համար\n
֊<b>Android-Job</b>՝ ծառայությունները կառավարելու համար\n
֊<b>PhotoView</b>՝ նկրները կառավարելու համար\n
</string>
<string name="privacy_API_yandex_title">Թթերի թարգմանություն</string>
<string name="privacy_API_yandex_authorizations">
Հավելվածը հնարավորություն է ընձեռում թարգմանել թթերը՝ օգտագործելով սարքի տեղույթը և Յանդեքսի API-ը։\n
Յանդեքսն ունի սեփական գաղնիության քաղաքականությունը, որը կարող ես գտնել այստեղ․ https://yandex.ru/legal/confidential/?lang=en </string>
<string name="thanks_text">
Շնորհակալություն Ստեֆանին՝ լոգոյի համար։
</string>
<string name="thanks_text_dev">
Շնորհակալություն ներքոհիշյալներին․
</string>
<string name="filter_regex">Ֆիլտրել ըստ կանոնավոր արտահայտությունների</string>
<string name="search">Փնտրել</string>
<string name="delete">Ջնջել</string>
<string name="fetch_more_toots">Նոր թթեր բերել…</string>
<!-- About lists -->
<string name="action_lists">Ցանկեր</string>
<string name="action_lists_confirm_delete">Վստա՞հ ես, որ ուզում ես ընդմիշտ ջնջել այս ցանկը</string>
<string name="action_lists_empty_content">Այս Ցանկում դեռ ոչինչ չկա։ Երբ ցանկի անդամները նոր գրառումներ կատարեն, դրանք կհայտնվեն այստեղ։</string>
<string name="action_lists_add_to">Ավելացնել ցանկին</string>
<string name="action_lists_remove_from">Հանել ցանկից</string>
<string name="action_lists_create">Ցանկ ավելացնել</string>
<string name="action_lists_delete">Ջնջել ցանկը</string>
<string name="action_lists_update">Փոփոխել ցանկը</string>
<string name="action_lists_title_placeholder">Նոր ցանկի վերնագիր</string>
<string name="action_lists_search_users">Փնտրել քո հետևած մարդկանց մեջ</string>
<string name="action_lists_owner">Քո ցանկերը</string>
<!-- Migration -->
<string name="account_moved_to">%1$s-ը տեղափոխվել է %2$s</string>
<string name="show_boost_count">Ցուցադրել տարածումների/հավանումների հաշվիչ</string>
<string name="issue_login_title">Իսկորոշումը չի՞ աշխատում</string>
<string name="issue_login_message">
<b>Ահա մի քանի բան, որոնք կարող են օգնել․</b>\n\n
Համոզվիր, որ ոչ մի սխալ թույլ չես տվել՝ հանգույցի անվան մեջ\n\n
Ստուգիր արդյոք քո հանգույցն անխափան աշխատում է, թե ոչ\n\n
Եթե օգտվում ես երկքայլ իսկորոշումից(2FA)՝ օգտագործիր ներքևի հղումը(հանգույցի անվանումը լրացնելուց հետո)\n\n
Կարող ես օգտագործել վերոհիշյալ հղումը նաև առանց երկքայլ իսկորոշումն օգտագործելու\n\n
Եթե այս ամենից հետո դեռ չի աշխատում, քեզ այլ բան չի մնում քան խնդրի մասին բարձրաձայնելը Github-ում՝ հետևյալ հղումով․ https://github.com/stom79/mastalab/issues
</string>
<string name="media_ready">Մեդիան բեռնվել է։ Կտտացրու այստեղ՝ այն ցուցադրելու համար։</string>
<string name="data_export_start">Այս գործողությունը բավական երկար կարող է տևել։ Դու կծանուցվես դրա ավարտի մասին։</string>
<string name="data_export_running">Դեռ բեռնվում է, սպասի՛ր…</string>
<string name="data_export">Արտահանել գրառումները</string>
<string name="data_export_toots">Արտահանել գրառումները %1$s-ի համար</string>
<string name="data_export_success">%2$s-ից %1$s թութ արտահանվել է։</string>
<string name="data_export_error">Ինչ-որ բան սխալ է գնացել %1$s-ի բովանդակությունն արտահանելու ընթացքում</string>
<!-- Proxy -->
<string name="proxy_set">Պրոքսի</string>
<string name="proxy_type">Ձև</string>
<string name="proxy_enable">Միացնե՞լ պրոքսին</string>
<string name="poxy_host">Հոսթ</string>
<string name="poxy_port">Պորտ</string>
<string name="poxy_login">Մուտք</string>
<string name="poxy_password">Գաղտնաբառ</string>
</resources>

View File

@ -315,6 +315,12 @@
<item>Yandex</item>
<item>Tidak</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Atur warna LED:</string>
<string-array name="led_colours">
<item>Biru</item>
@ -339,6 +345,7 @@
<string name="followed_by">Mengikutimu</string>
<string name="action_search">Pencarian</string>
<string name="set_capitalize">Huruf pertama kapital untuk membalas</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Tolak pemberitahuan</string>
<string name="settings_popup_message">

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -342,6 +348,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -40,7 +40,7 @@
<string name="choose_picture">画像を選択…</string>
<string name="clear">削除</string>
<string name="microphone">マイク</string>
<string name="camera">Camera</string>
<string name="camera">カメラ</string>
<string name="speech_prompt">何か話してみてください</string>
<string name="speech_not_supported">お使いのデバイスは音声入力をサポートしておりません!</string>
<string name="delete_all">すべて削除</string>
@ -117,7 +117,7 @@
<string name="more_action_5">コピー</string>
<string name="more_action_6">共有</string>
<string name="more_action_7">メンション</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_8">時限ミュート</string>
<string-array name="more_action_confirm">
<item>このアカウントをミュートしますか?</item>
<item>このアカウントをブロックしますか?</item>
@ -196,9 +196,9 @@
<string name="toot_scheduled_date">スケジュールされた日付は現在の時間より後でなければなりません!</string>
<string name="warning_battery">バッテリーセーバーが有効になっています! 期待どおりに動作しない可能性があります。</string>
<!-- timed mute -->
<string name="timed_mute_date_error">The time for muting should be greater than one minute.</string>
<string name="timed_mute_date">%1$s has been muted until %2$s.\n You can unmute this account from his/her profile page.</string>
<string name="timed_mute_profile">%1$s is muted until %2$s.\n Click here to unmute the account.</string>
<string name="timed_mute_date_error">ミュートする時間1分超です。</string>
<string name="timed_mute_date">%1$s は %2$s までミュートされています。\n このアカウントのプロフィールページでミュートを解除することができます。</string>
<string name="timed_mute_profile">%1$s は %2$s までミュートされます。\n ミュートを解除するにはここをクリックします。</string>
<!-- Notifications -->
<string name="no_notifications">通知はありません</string>
<string name="notif_mention">あなたにメンションしました</string>
@ -315,6 +315,12 @@
<item>Yandex</item>
<item>いいえ</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">LEDの色</string>
<string-array name="led_colours">
<item></item>
@ -339,6 +345,7 @@
<string name="followed_by">あなたをフォロー</string>
<string name="action_search">検索</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">プッシュ通知</string>
<string name="settings_popup_message">
@ -416,18 +423,18 @@
- もしまだ解決しない場合、Githubhttps://github.com/stom79/mastalab/issuesにissueを投稿してください
</string>
<string name="media_ready">メディアが読み込まれました。表示するにはここをクリックします。</string>
<string name="data_export_start">This action can be quite long. You will be notified when it will be finished.</string>
<string name="data_export_running">Still running, please wait…</string>
<string name="data_export">Export statuses</string>
<string name="data_export_start">この操作には時間がかかることがあります。完了すると通知されます。</string>
<string name="data_export_running">実行中です。お待ちください...</string>
<string name="data_export">トゥートをエクスポート</string>
<string name="data_export_toots">Export statuses for %1$s</string>
<string name="data_export_success">%1$s toots out of %2$s have been exported.</string>
<string name="data_export_error">Something went wrong when exporting data for %1$s</string>
<string name="data_export_error">%1$s のデータをエクスポート中に問題が発生しました</string>
<!-- Proxy -->
<string name="proxy_set">Proxy</string>
<string name="proxy_type">Type</string>
<string name="proxy_enable">Enable proxy?</string>
<string name="poxy_host">Host</string>
<string name="poxy_port">Port</string>
<string name="poxy_login">Login</string>
<string name="poxy_password">Password</string>
<string name="proxy_set">プロキシ</string>
<string name="proxy_type">タイプ</string>
<string name="proxy_enable">プロキシの有効化</string>
<string name="poxy_host">ホスト</string>
<string name="poxy_port">ポート</string>
<string name="poxy_login">ログイン</string>
<string name="poxy_password">パスワード</string>
</resources>

View File

@ -315,6 +315,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -339,6 +345,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>Nee</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">LED-kleur instellen:</string>
<string-array name="led_colours">
<item>Blauw</item>
@ -342,6 +348,7 @@
<string name="followed_by">Volgt jou</string>
<string name="action_search">Zoeken</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Pushmeldingen</string>
<string name="settings_popup_message">

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>Nei</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Angi LED-farge:</string>
<string-array name="led_colours">
<item>Blå</item>
@ -342,6 +348,7 @@
<string name="followed_by">Følger deg</string>
<string name="action_search">Søke</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Trykk på varsler</string>
<string name="settings_popup_message">

View File

@ -321,6 +321,12 @@
<item>Yandex</item>
<item>Nie</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Ustaw kolor diody LED:</string>
<string-array name="led_colours">
<item>Niebieski</item>
@ -345,6 +351,7 @@
<string name="followed_by">Obserwuje Cię</string>
<string name="action_search">Wyszykaj</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Powiadomienia push</string>
<string name="settings_popup_message">

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>Não</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Configurar cor do LED:</string>
<string-array name="led_colours">
<item>Azul</item>
@ -342,6 +348,7 @@
<string name="followed_by">Segue você</string>
<string name="action_search">Busca</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notificações</string>
<string name="settings_popup_message">

View File

@ -321,6 +321,12 @@
<item>Yandex</item>
<item>Nu</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Setează culoarea LED:</string>
<string-array name="led_colours">
<item>Albastru</item>
@ -345,6 +351,7 @@
<string name="followed_by">Vă urmărește</string>
<string name="action_search">Căutare</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notificări instant</string>
<string name="settings_popup_message">

View File

@ -321,6 +321,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -345,6 +351,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -40,7 +40,7 @@
<string name="choose_picture">Одаберите слику…</string>
<string name="clear">Очисти</string>
<string name="microphone">Микрофон</string>
<string name="camera">Camera</string>
<string name="camera">Камера</string>
<string name="speech_prompt">Реците нешто</string>
<string name="speech_not_supported">Ваш уређај не подржава гласовни унос!</string>
<string name="delete_all">Избриши све</string>
@ -321,6 +321,12 @@
<item>Yandex</item>
<item>Не</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Постави ЛЕД боју:</string>
<string-array name="led_colours">
<item>Плава</item>
@ -345,6 +351,7 @@
<string name="followed_by">Прати Вас</string>
<string name="action_search">Претрага</string>
<string name="set_capitalize">Прво слово велико у одговорима</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Гурни обавештења</string>
<string name="settings_popup_message">
@ -437,11 +444,11 @@
<string name="data_export_success">Извежено %1$s од укупно %2$s тутова.</string>
<string name="data_export_error">Дошло је до грешке приликом извоза података за %1$s</string>
<!-- Proxy -->
<string name="proxy_set">Proxy</string>
<string name="proxy_type">Type</string>
<string name="proxy_enable">Enable proxy?</string>
<string name="poxy_host">Host</string>
<string name="poxy_port">Port</string>
<string name="poxy_login">Login</string>
<string name="poxy_password">Password</string>
<string name="proxy_set">Прокси</string>
<string name="proxy_type">Тип</string>
<string name="proxy_enable">Омогући прокси?</string>
<string name="poxy_host">Домаћин</string>
<string name="poxy_port">Порт</string>
<string name="poxy_login">Пријава</string>
<string name="poxy_password">Лозинка</string>
</resources>

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -342,6 +348,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -318,6 +318,12 @@
<item>Yandex</item>
<item>Hayır</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">LED rengini ayarla:</string>
<string-array name="led_colours">
<item>Mavi</item>
@ -342,6 +348,7 @@
<string name="followed_by">Sizi takip ediyor</string>
<string name="action_search">Ara</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Anlık Bildirimler</string>
<string name="settings_popup_message">

View File

@ -321,6 +321,12 @@
<item>Yandex</item>
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
<item>Blue</item>
@ -345,6 +351,7 @@
<string name="followed_by">Follows you</string>
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">

View File

@ -317,6 +317,12 @@ và %d toots khác để khám phá</item>
<item>Yandex</item>
<item>Không</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Đặt màu LED:</string>
<string-array name="led_colours">
<item>Màu xanh da trời</item>
@ -341,6 +347,7 @@ và %d toots khác để khám phá</item>
<string name="followed_by">Sau bạn</string>
<string name="action_search">Tìm kiếm</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push thông báo</string>
<string name="settings_popup_message">

View File

@ -315,6 +315,12 @@
<item>Yandex</item>
<item>否 </item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">设置 LED 颜色:</string>
<string-array name="led_colours">
<item>蓝色</item>
@ -339,6 +345,7 @@
<string name="followed_by">关注你</string>
<string name="action_search">搜索</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">推送通知</string>
<string name="settings_popup_message">

View File

@ -339,6 +339,13 @@
<item>No</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Ko</item>
<item>1 Mo</item>
<item>2 Mo</item>
</string-array>
<string name="set_led_colour">Set LED colour:</string>
<string-array name="led_colours">
@ -366,6 +373,8 @@
<string name="action_search">Search</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">