Merged in develop (pull request #22)
|
@ -7,8 +7,8 @@ android {
|
|||
applicationId "fr.gouv.etalab.mastodon"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 25
|
||||
versionCode 24
|
||||
versionName "1.2.7"
|
||||
versionCode 25
|
||||
versionName "1.2.8"
|
||||
}
|
||||
buildTypes {
|
||||
release {
|
||||
|
@ -32,6 +32,4 @@ dependencies {
|
|||
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
|
||||
compile 'com.evernote:android-job:1.1.11'
|
||||
compile 'com.github.chrisbanes:PhotoView:2.0.0'
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ public class AboutActivity extends AppCompatActivity implements OnRetrieveSearcA
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
@ -96,6 +96,14 @@ public class AboutActivity extends AppCompatActivity implements OnRetrieveSearcA
|
|||
startActivity(browserIntent);
|
||||
}
|
||||
});
|
||||
Button about_translation = (Button) findViewById(R.id.about_translation);
|
||||
about_translation.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://translate.yandex.com/"));
|
||||
startActivity(browserIntent);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ public class HashTagActivity extends AppCompatActivity implements OnRetrieveFeed
|
|||
|
||||
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
|
|
@ -57,7 +57,7 @@ public class InstanceActivity extends AppCompatActivity implements OnRetrieveIns
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
|
|
@ -70,7 +70,7 @@ public class LoginActivity extends AppCompatActivity {
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
|
|
@ -91,6 +91,7 @@ public class MainActivity extends AppCompatActivity
|
|||
private float downX, downY;
|
||||
private int currentScreen = 1;
|
||||
private actionSwipe currentAction;
|
||||
public static String currentLocale;
|
||||
|
||||
private enum actionSwipe{
|
||||
RIGHT_TO_LEFT,
|
||||
|
@ -104,7 +105,7 @@ public class MainActivity extends AppCompatActivity
|
|||
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme_NoActionBar);
|
||||
}else {
|
||||
|
@ -123,6 +124,8 @@ public class MainActivity extends AppCompatActivity
|
|||
//Here, the user is authenticated
|
||||
toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
//Defines the current locale of the device in a static variable
|
||||
currentLocale = Helper.currentLocale(getApplicationContext());
|
||||
|
||||
toot = (FloatingActionButton) findViewById(R.id.toot);
|
||||
toot.setOnClickListener(new View.OnClickListener() {
|
||||
|
|
|
@ -19,11 +19,11 @@ import android.Manifest;
|
|||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.RectF;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
|
@ -35,7 +35,6 @@ import android.view.Menu;
|
|||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.webkit.URLUtil;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.MediaController;
|
||||
|
@ -43,6 +42,9 @@ import android.widget.RelativeLayout;
|
|||
import android.widget.TextView;
|
||||
import android.widget.VideoView;
|
||||
|
||||
import com.github.chrisbanes.photoview.OnMatrixChangedListener;
|
||||
import com.github.chrisbanes.photoview.OnPhotoTapListener;
|
||||
import com.github.chrisbanes.photoview.OnScaleChangedListener;
|
||||
import com.github.chrisbanes.photoview.PhotoView;
|
||||
import com.loopj.android.http.AsyncHttpClient;
|
||||
import com.loopj.android.http.FileAsyncHttpResponseHandler;
|
||||
|
@ -93,6 +95,7 @@ public class MediaActivity extends AppCompatActivity {
|
|||
private Bitmap downloadedImage;
|
||||
private File fileVideo;
|
||||
private TextView progress;
|
||||
private boolean canSwipe;
|
||||
private enum actionSwipe{
|
||||
RIGHT_TO_LEFT,
|
||||
LEFT_TO_RIGHT,
|
||||
|
@ -104,7 +107,7 @@ public class MediaActivity extends AppCompatActivity {
|
|||
super.onCreate(savedInstanceState);
|
||||
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
@ -124,7 +127,7 @@ public class MediaActivity extends AppCompatActivity {
|
|||
}else {
|
||||
main_container_media.setBackgroundResource(R.color.colorPrimaryD);
|
||||
}
|
||||
|
||||
canSwipe = true;
|
||||
loader = (RelativeLayout) findViewById(R.id.loader);
|
||||
imageView = (PhotoView) findViewById(R.id.media_picture);
|
||||
videoView = (VideoView) findViewById(R.id.media_video);
|
||||
|
@ -144,10 +147,15 @@ public class MediaActivity extends AppCompatActivity {
|
|||
displayMediaAtPosition(actionSwipe.POP);
|
||||
}
|
||||
});
|
||||
imageView.setOnMatrixChangeListener(new OnMatrixChangedListener() {
|
||||
@Override
|
||||
public void onMatrixChanged(RectF rect) {
|
||||
canSwipe = (imageView.getScale() == 1 );
|
||||
}
|
||||
});
|
||||
|
||||
progress = (TextView) findViewById(R.id.loader_progress);
|
||||
setTitle("");
|
||||
final ViewGroup videoLayout = (ViewGroup) findViewById(R.id.videoLayout); // Your own view, read class comments
|
||||
|
||||
isHiding = false;
|
||||
imageLoader = ImageLoader.getInstance();
|
||||
|
@ -196,7 +204,7 @@ public class MediaActivity extends AppCompatActivity {
|
|||
*/
|
||||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent event) {
|
||||
if( mediaPosition > attachments.size() || mediaPosition < 1 || attachments.size() <= 1)
|
||||
if( !canSwipe || mediaPosition > attachments.size() || mediaPosition < 1 || attachments.size() <= 1)
|
||||
return super.dispatchTouchEvent(event);
|
||||
switch(event.getAction()){
|
||||
case MotionEvent.ACTION_DOWN: {
|
||||
|
|
|
@ -19,7 +19,6 @@ import android.content.SharedPreferences;
|
|||
import android.os.Bundle;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import fr.gouv.etalab.mastodon.helper.Helper;
|
||||
import mastodon.etalab.gouv.fr.mastodon.R;
|
||||
|
||||
|
@ -35,7 +34,7 @@ public class PrivacyActivity extends AppCompatActivity {
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
|
|
@ -53,7 +53,7 @@ public class SearchResultActivity extends AppCompatActivity implements OnRetriev
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
|
|
@ -106,7 +106,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
@ -140,7 +140,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
|
|||
|
||||
|
||||
tabLayout = (TabLayout) findViewById(R.id.account_tabLayout);
|
||||
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.status)));
|
||||
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.toots)));
|
||||
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.following)));
|
||||
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.followers)));
|
||||
|
||||
|
@ -295,10 +295,10 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
|
|||
else
|
||||
account_ac.setText(account.getAcct());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
account_note.setText(Html.fromHtml(account.getNote(), Html.FROM_HTML_MODE_COMPACT));
|
||||
account_note.setText(Html.fromHtml(Helper.shortnameToUnicode(account.getNote(),true), Html.FROM_HTML_MODE_COMPACT));
|
||||
else
|
||||
//noinspection deprecation
|
||||
account_note.setText(Html.fromHtml(account.getNote()));
|
||||
account_note.setText(Html.fromHtml(Helper.shortnameToUnicode(account.getNote(), true)));
|
||||
tabLayout.getTabAt(0).setText(getString(R.string.status_cnt, account.getStatuses_count()));
|
||||
tabLayout.getTabAt(1).setText(getString(R.string.following_cnt, account.getFollowing_count()));
|
||||
tabLayout.getTabAt(2).setText(getString(R.string.followers_cnt, account.getFollowers_count()));
|
||||
|
|
|
@ -64,7 +64,7 @@ public class ShowConversationActivity extends AppCompatActivity implements OnRet
|
|||
super.onCreate(savedInstanceState);
|
||||
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
|
|
@ -16,6 +16,7 @@ package fr.gouv.etalab.mastodon.activities;
|
|||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
|
@ -26,13 +27,14 @@ import android.database.sqlite.SQLiteDatabase;
|
|||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.speech.RecognizerIntent;
|
||||
import android.support.design.widget.FloatingActionButton;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.text.Editable;
|
||||
import android.text.Html;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -54,10 +56,12 @@ import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
|||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
|
||||
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
@ -119,7 +123,7 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
@ -130,6 +134,10 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
if( getSupportActionBar() != null)
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
imageLoader = ImageLoader.getInstance();
|
||||
options = new DisplayImageOptions.Builder().displayer(new SimpleBitmapDisplayer()).cacheInMemory(false)
|
||||
.cacheOnDisk(true).resetViewBeforeLoading(true).build();
|
||||
|
||||
toot_it = (Button) findViewById(R.id.toot_it);
|
||||
Button toot_cw = (Button) findViewById(R.id.toot_cw);
|
||||
final TextView toot_space_left = (TextView) findViewById(R.id.toot_space_left);
|
||||
|
@ -218,7 +226,7 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
toot_reply_content_container.setVisibility(View.GONE);
|
||||
}
|
||||
String content = tootReply.getContent();
|
||||
if(tootReply.isReblogged())
|
||||
if(tootReply.getReblog() != null)
|
||||
content = tootReply.getReblog().getContent();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
toot_reply_content.setText(Html.fromHtml(content, Html.FROM_HTML_MODE_COMPACT));
|
||||
|
@ -352,9 +360,7 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
tootVisibilityDialog();
|
||||
}
|
||||
});
|
||||
imageLoader = ImageLoader.getInstance();
|
||||
options = new DisplayImageOptions.Builder().displayer(new SimpleBitmapDisplayer()).cacheInMemory(false)
|
||||
.cacheOnDisk(true).resetViewBeforeLoading(true).build();
|
||||
|
||||
|
||||
toot_it.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
|
@ -382,15 +388,27 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
toot_picture.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
getIntent.setType("image/*");
|
||||
|
||||
Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
|
||||
pickIntent.setType("image/*");
|
||||
Intent intent;
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
|
||||
intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType("*/*");
|
||||
String[] mimetypes = {"image/*", "video/*"};
|
||||
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
|
||||
startActivityForResult(intent, PICK_IMAGE);
|
||||
}else {
|
||||
Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
getIntent.setType("image/*");
|
||||
|
||||
Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
|
||||
pickIntent.setType("image/*");
|
||||
|
||||
Intent chooserIntent = Intent.createChooser(getIntent, getString(R.string.toot_select_image));
|
||||
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {pickIntent});
|
||||
startActivityForResult(chooserIntent, PICK_IMAGE);
|
||||
}
|
||||
|
||||
Intent chooserIntent = Intent.createChooser(getIntent, getString(R.string.toot_select_image));
|
||||
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {pickIntent});
|
||||
startActivityForResult(chooserIntent, PICK_IMAGE);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -453,7 +471,6 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
return;
|
||||
}
|
||||
try {
|
||||
|
||||
InputStream inputStream = getContentResolver().openInputStream(data.getData());
|
||||
loading_picture.setVisibility(View.VISIBLE);
|
||||
toot_picture.setEnabled(false);
|
||||
|
@ -464,6 +481,14 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
toot_picture.setEnabled(true);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}else if(requestCode == Helper.REQ_CODE_SPEECH_INPUT && resultCode == Activity.RESULT_OK){
|
||||
if (null != data) {
|
||||
|
||||
ArrayList<String> result = data
|
||||
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
|
||||
toot_content.setText(result.get(0));
|
||||
toot_content.setSelection(toot_content.getText().length());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -473,11 +498,32 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
case android.R.id.home:
|
||||
finish();
|
||||
return true;
|
||||
case R.id.action_microphone:
|
||||
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
|
||||
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
|
||||
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
|
||||
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
|
||||
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
|
||||
getString(R.string.speech_prompt));
|
||||
try {
|
||||
startActivityForResult(intent, Helper.REQ_CODE_SPEECH_INPUT);
|
||||
} catch (ActivityNotFoundException a) {
|
||||
Toast.makeText(getApplicationContext(),
|
||||
getString(R.string.speech_not_supported),
|
||||
Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.main_toot, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy(){
|
||||
super.onDestroy();
|
||||
|
@ -501,12 +547,13 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
|
||||
final ImageView imageView = new ImageView(getApplicationContext());
|
||||
imageView.setId(Integer.parseInt(attachment.getId()));
|
||||
LinearLayout.LayoutParams imParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
imParams.setMargins(20, 5, 20, 5);
|
||||
imageLoader.displayImage(url, imageView, options);
|
||||
LinearLayout.LayoutParams imParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
|
||||
imParams.setMargins(20, 5, 20, 5);
|
||||
imParams.height = (int) Helper.convertDpToPixel(100, getApplicationContext());
|
||||
imageView.setAdjustViewBounds(true);
|
||||
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
|
||||
toot_picture_container.addView(imageView, imParams);
|
||||
toot_picture_container.addView(imageView, attachments.size(), imParams);
|
||||
imageView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
@ -539,18 +586,21 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
dialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog,int which) {
|
||||
List<Attachment> tmp_attachment = new ArrayList<>();
|
||||
tmp_attachment.addAll(attachments);
|
||||
attachments.removeAll(tmp_attachment);
|
||||
tmp_attachment.clear();
|
||||
View namebar = findViewById(viewId);
|
||||
((ViewGroup) namebar.getParent()).removeView(namebar);
|
||||
for(Attachment attachment: attachments){
|
||||
if( Integer.valueOf(attachment.getId()) == viewId){
|
||||
attachments.remove(attachment);
|
||||
((ViewGroup) namebar.getParent()).removeView(namebar);
|
||||
break;
|
||||
}
|
||||
}
|
||||
dialog.dismiss();
|
||||
if( attachments.size() == 0 ) {
|
||||
toot_sensitive.setVisibility(View.GONE);
|
||||
isSensitive = false;
|
||||
toot_sensitive.setChecked(false);
|
||||
}
|
||||
toot_picture.setEnabled(true);
|
||||
}
|
||||
});
|
||||
dialog.show();
|
||||
|
@ -632,8 +682,6 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onRetrieveSearchAccounts(APIResponse apiResponse) {
|
||||
if( apiResponse.getError() != null){
|
||||
|
@ -651,4 +699,5 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc
|
|||
toot_show_accounts.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ public class WebviewActivity extends AppCompatActivity {
|
|||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
|
|
@ -59,7 +59,7 @@ public class WebviewConnectActivity extends AppCompatActivity {
|
|||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT){
|
||||
setTheme(R.style.AppTheme);
|
||||
}else {
|
||||
|
|
|
@ -16,7 +16,6 @@ package fr.gouv.etalab.mastodon.client;
|
|||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.loopj.android.http.AsyncHttpResponseHandler;
|
||||
|
@ -854,7 +853,7 @@ public class API {
|
|||
return -1;
|
||||
}
|
||||
if(statusAction != StatusAction.UNSTATUS ) {
|
||||
post(action, params, new JsonHttpResponseHandler() {
|
||||
post(action, 30000, params, new JsonHttpResponseHandler() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
|
||||
|
@ -966,7 +965,7 @@ public class API {
|
|||
RequestParams params = new RequestParams();
|
||||
params.put("file", inputStream);
|
||||
|
||||
post("/media", params, new JsonHttpResponseHandler() {
|
||||
post("/media", 120000, params, new JsonHttpResponseHandler() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
|
||||
|
@ -1154,7 +1153,7 @@ public class API {
|
|||
status.setSensitive(Boolean.parseBoolean(resobj.get("sensitive").toString()));
|
||||
status.setSpoiler_text(resobj.get("spoiler_text").toString());
|
||||
status.setVisibility(resobj.get("visibility").toString());
|
||||
|
||||
status.setLanguage(resobj.get("language").toString());
|
||||
//TODO: replace by the value
|
||||
status.setApplication(new Application());
|
||||
|
||||
|
@ -1461,10 +1460,10 @@ public class API {
|
|||
}
|
||||
}
|
||||
|
||||
private void post(String action, RequestParams params, AsyncHttpResponseHandler responseHandler) {
|
||||
private void post(String action, int timeout, RequestParams params, AsyncHttpResponseHandler responseHandler) {
|
||||
|
||||
try {
|
||||
client.setConnectTimeout(10000); //10s timeout
|
||||
client.setConnectTimeout(timeout); //10s timeout
|
||||
client.setUserAgent(USER_AGENT);
|
||||
client.addHeader("Authorization", "Bearer "+prefKeyOauthTokenT);
|
||||
MastalabSSLSocketFactory mastalabSSLSocketFactory = new MastalabSSLSocketFactory(MastalabSSLSocketFactory.getKeystore());
|
||||
|
|
|
@ -17,7 +17,6 @@ package fr.gouv.etalab.mastodon.client.Entities;
|
|||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
@ -37,6 +36,7 @@ public class Status implements Parcelable {
|
|||
private String in_reply_to_account_id;
|
||||
private Status reblog;
|
||||
private String content;
|
||||
private String content_translated;
|
||||
private Date created_at;
|
||||
private int reblogs_count;
|
||||
private int favourites_count;
|
||||
|
@ -51,7 +51,9 @@ public class Status implements Parcelable {
|
|||
private List<Mention> mentions;
|
||||
private List<Tag> tags;
|
||||
private Application application;
|
||||
|
||||
private String language;
|
||||
private boolean isTranslated = false;
|
||||
private boolean isTranslationShown = false;
|
||||
|
||||
protected Status(Parcel in) {
|
||||
id = in.readString();
|
||||
|
@ -63,6 +65,7 @@ public class Status implements Parcelable {
|
|||
account = in.readParcelable(Account.class.getClassLoader());
|
||||
mentions = in.readArrayList(Mention.class.getClassLoader());
|
||||
content = in.readString();
|
||||
content_translated = in.readString();
|
||||
reblogs_count = in.readInt();
|
||||
favourites_count = in.readInt();
|
||||
reblogged = in.readByte() != 0;
|
||||
|
@ -70,8 +73,11 @@ public class Status implements Parcelable {
|
|||
sensitive = in.readByte() != 0;
|
||||
spoiler_text = in.readString();
|
||||
visibility = in.readString();
|
||||
language = in.readString();
|
||||
attachmentShown = in.readByte() != 0;
|
||||
spoilerShown = in.readByte() != 0;
|
||||
isTranslated = in.readByte() != 0;
|
||||
isTranslationShown = in.readByte() != 0;
|
||||
}
|
||||
|
||||
public Status(){}
|
||||
|
@ -274,6 +280,7 @@ public class Status implements Parcelable {
|
|||
dest.writeParcelable(account, flags);
|
||||
dest.writeList(mentions);
|
||||
dest.writeString(content);
|
||||
dest.writeString(content_translated);
|
||||
dest.writeInt(reblogs_count);
|
||||
dest.writeInt(favourites_count);
|
||||
dest.writeByte((byte) (reblogged ? 1 : 0));
|
||||
|
@ -281,8 +288,11 @@ public class Status implements Parcelable {
|
|||
dest.writeByte((byte) (sensitive ? 1 : 0));
|
||||
dest.writeString(spoiler_text);
|
||||
dest.writeString(visibility);
|
||||
dest.writeString(language);
|
||||
dest.writeByte((byte) (attachmentShown ? 1 : 0));
|
||||
dest.writeByte((byte) (spoilerShown ? 1 : 0));
|
||||
dest.writeByte((byte) (isTranslated ? 1 : 0));
|
||||
dest.writeByte((byte) (isTranslationShown ? 1 : 0));
|
||||
}
|
||||
|
||||
public boolean isSpoilerShown() {
|
||||
|
@ -292,4 +302,36 @@ public class Status implements Parcelable {
|
|||
public void setSpoilerShown(boolean spoilerShown) {
|
||||
this.spoilerShown = spoilerShown;
|
||||
}
|
||||
|
||||
public String getLanguage() {
|
||||
return language;
|
||||
}
|
||||
|
||||
public void setLanguage(String language) {
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
public boolean isTranslated() {
|
||||
return isTranslated;
|
||||
}
|
||||
|
||||
public void setTranslated(boolean translated) {
|
||||
isTranslated = translated;
|
||||
}
|
||||
|
||||
public boolean isTranslationShown() {
|
||||
return isTranslationShown;
|
||||
}
|
||||
|
||||
public void setTranslationShown(boolean translationShown) {
|
||||
isTranslationShown = translationShown;
|
||||
}
|
||||
|
||||
public String getContent_translated() {
|
||||
return content_translated;
|
||||
}
|
||||
|
||||
public void setContent_translated(String content_translated) {
|
||||
this.content_translated = content_translated;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@ package fr.gouv.etalab.mastodon.drawers;
|
|||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
|
@ -44,6 +45,8 @@ import fr.gouv.etalab.mastodon.client.Entities.Notification;
|
|||
import fr.gouv.etalab.mastodon.client.Entities.Status;
|
||||
import fr.gouv.etalab.mastodon.helper.Helper;
|
||||
|
||||
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
|
||||
|
||||
|
||||
/**
|
||||
* Created by Thomas on 24/04/2017.
|
||||
|
@ -157,6 +160,32 @@ public class NotificationsListAdapter extends BaseAdapter {
|
|||
holder.status_reblog_count.setText(String.valueOf(status.getReblogs_count()));
|
||||
holder.status_date.setText(Helper.dateDiff(context, status.getCreated_at()));
|
||||
|
||||
//Manages theme for icon colors
|
||||
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){
|
||||
changeDrawableColor(context, R.drawable.ic_reply,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_action_more,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_action_globe,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_action_lock_open,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_action_lock_closed,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_local_post_office,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_retweet_black,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_fav_black,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_photo,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_remove_red_eye,R.color.dark_text);
|
||||
}else {
|
||||
changeDrawableColor(context, R.drawable.ic_reply,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_action_more,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_action_globe,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_action_lock_open,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_action_lock_closed,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_local_post_office,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_retweet_black,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_fav_black,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_photo,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_remove_red_eye,R.color.black);
|
||||
}
|
||||
|
||||
//Adds attachment -> disabled, to enable them uncomment the line below
|
||||
//loadAttachments(status, holder);
|
||||
|
|
|
@ -22,11 +22,14 @@ import android.content.DialogInterface;
|
|||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.text.Html;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -45,6 +48,12 @@ import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
|||
import com.nostra13.universalimageloader.core.ImageLoader;
|
||||
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -53,6 +62,8 @@ import fr.gouv.etalab.mastodon.activities.ShowConversationActivity;
|
|||
import fr.gouv.etalab.mastodon.activities.TootActivity;
|
||||
import fr.gouv.etalab.mastodon.client.Entities.Error;
|
||||
import fr.gouv.etalab.mastodon.helper.Helper;
|
||||
import fr.gouv.etalab.mastodon.interfaces.OnTranslatedInterface;
|
||||
import fr.gouv.etalab.mastodon.translation.YandexQuery;
|
||||
import mastodon.etalab.gouv.fr.mastodon.R;
|
||||
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
|
||||
import fr.gouv.etalab.mastodon.asynctasks.PostActionAsyncTask;
|
||||
|
@ -62,6 +73,7 @@ import fr.gouv.etalab.mastodon.client.Entities.Attachment;
|
|||
import fr.gouv.etalab.mastodon.client.Entities.Status;
|
||||
import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface;
|
||||
|
||||
import static fr.gouv.etalab.mastodon.activities.MainActivity.currentLocale;
|
||||
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
|
||||
|
||||
|
||||
|
@ -69,7 +81,7 @@ import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
|
|||
* Created by Thomas on 24/04/2017.
|
||||
* Adapter for Status
|
||||
*/
|
||||
public class StatusListAdapter extends BaseAdapter implements OnPostActionInterface {
|
||||
public class StatusListAdapter extends BaseAdapter implements OnPostActionInterface, OnTranslatedInterface {
|
||||
|
||||
private Context context;
|
||||
private List<Status> statuses;
|
||||
|
@ -124,6 +136,7 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
holder = new ViewHolder();
|
||||
holder.status_document_container = (LinearLayout) convertView.findViewById(R.id.status_document_container);
|
||||
holder.status_content = (TextView) convertView.findViewById(R.id.status_content);
|
||||
holder.status_content_translated = (TextView) convertView.findViewById(R.id.status_content_translated);
|
||||
holder.status_account_username = (TextView) convertView.findViewById(R.id.status_account_username);
|
||||
holder.status_account_displayname = (TextView) convertView.findViewById(R.id.status_account_displayname);
|
||||
holder.status_account_profile = (ImageView) convertView.findViewById(R.id.status_account_profile);
|
||||
|
@ -148,11 +161,14 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
holder.status_prev4_container = (RelativeLayout) convertView.findViewById(R.id.status_prev4_container);
|
||||
holder.status_reply = (ImageView) convertView.findViewById(R.id.status_reply);
|
||||
holder.status_privacy = (ImageView) convertView.findViewById(R.id.status_privacy);
|
||||
holder.status_translate = (ImageView) convertView.findViewById(R.id.status_translate);
|
||||
holder.status_content_translated_container = (LinearLayout) convertView.findViewById(R.id.status_content_translated_container);
|
||||
holder.main_container = (LinearLayout) convertView.findViewById(R.id.main_container);
|
||||
holder.status_spoiler_container = (LinearLayout) convertView.findViewById(R.id.status_spoiler_container);
|
||||
holder.status_content_container = (LinearLayout) convertView.findViewById(R.id.status_content_container);
|
||||
holder.status_spoiler = (TextView) convertView.findViewById(R.id.status_spoiler);
|
||||
holder.status_spoiler_button = (Button) convertView.findViewById(R.id.status_spoiler_button);
|
||||
holder.yandex_translate = (TextView) convertView.findViewById(R.id.yandex_translate);
|
||||
convertView.setTag(holder);
|
||||
} else {
|
||||
holder = (ViewHolder) convertView.getTag();
|
||||
|
@ -181,6 +197,43 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
statusListAdapter.notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
if( !status.getLanguage().trim().equals(currentLocale) && !status.getLanguage().trim().equals("null")){
|
||||
holder.status_translate.setVisibility(View.VISIBLE);
|
||||
}else {
|
||||
holder.status_translate.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
holder.status_translate.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
try {
|
||||
if( !status.isTranslated() ){
|
||||
new YandexQuery(StatusListAdapter.this).getYandexTextview(position, status.getContent(), currentLocale);
|
||||
}else {
|
||||
status.setTranslationShown(!status.isTranslationShown());
|
||||
statusListAdapter.notifyDataSetChanged();
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
Toast.makeText(context, R.string.toast_error_translate, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
holder.yandex_translate.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://translate.yandex.com/"));
|
||||
context.startActivity(browserIntent);
|
||||
}
|
||||
});
|
||||
//Toot was translated and user asked to see it
|
||||
if( status.isTranslationShown()){
|
||||
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);
|
||||
}
|
||||
|
||||
//Hides action bottom bar action when looking to status trough accounts
|
||||
if( type == RetrieveFeedsAsyncTask.Type.USER){
|
||||
|
@ -188,7 +241,7 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
}
|
||||
//Manages theme for icon colors
|
||||
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_DARK){
|
||||
changeDrawableColor(context, R.drawable.ic_reply,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_action_more,R.color.dark_text);
|
||||
|
@ -199,6 +252,8 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
changeDrawableColor(context, R.drawable.ic_retweet_black,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_fav_black,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_photo,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_remove_red_eye,R.color.dark_text);
|
||||
changeDrawableColor(context, R.drawable.ic_translate,R.color.dark_text);
|
||||
}else {
|
||||
changeDrawableColor(context, R.drawable.ic_reply,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_action_more,R.color.black);
|
||||
|
@ -209,6 +264,8 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
changeDrawableColor(context, R.drawable.ic_retweet_black,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_fav_black,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_photo,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_remove_red_eye,R.color.black);
|
||||
changeDrawableColor(context, R.drawable.ic_translate,R.color.black);
|
||||
}
|
||||
|
||||
|
||||
|
@ -291,10 +348,15 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
status.getReblog() != null?status.getReblog().getMentions():status.getMentions(),
|
||||
status.getReblog() != null?status.getReblog().getTags():status.getTags());
|
||||
|
||||
if( status.getContent_translated() != null && status.getContent_translated().length() > 0){
|
||||
holder.status_content_translated = Helper.clickableElements(context, holder.status_content_translated,status.getContent_translated(),
|
||||
status.getReblog() != null?status.getReblog().getMentions():status.getMentions(),
|
||||
status.getReblog() != null?status.getReblog().getTags():status.getTags());
|
||||
}
|
||||
holder.status_favorite_count.setText(String.valueOf(status.getFavourites_count()));
|
||||
holder.status_reblog_count.setText(String.valueOf(status.getReblogs_count()));
|
||||
holder.status_toot_date.setText(Helper.dateDiff(context, status.getCreated_at()));
|
||||
|
||||
|
||||
imageLoader.displayImage(ppurl, holder.status_account_profile, options);
|
||||
if( status.getReblog() != null) {
|
||||
imageLoader.displayImage(status.getAccount().getAvatar(), holder.status_account_profile_boost, options);
|
||||
|
@ -575,6 +637,27 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTranslatedTextview(int position, String translatedResult, Boolean error) {
|
||||
if( error){
|
||||
Toast.makeText(context, R.string.toast_error_translate, Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
if( statuses.size() > position) {
|
||||
try {
|
||||
JSONObject translationJson = new JSONObject(translatedResult);
|
||||
JSONArray aJsonArray = translationJson.getJSONArray("text");
|
||||
String aJsonString = aJsonArray.get(0).toString();
|
||||
aJsonString = URLDecoder.decode(aJsonString, "UTF-8");
|
||||
statuses.get(position).setTranslated(true);
|
||||
statuses.get(position).setTranslationShown(true);
|
||||
statuses.get(position).setContent_translated(aJsonString);
|
||||
statusListAdapter.notifyDataSetChanged();
|
||||
} catch (JSONException | UnsupportedEncodingException e) {
|
||||
Toast.makeText(context, R.string.toast_error_translate, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class ViewHolder {
|
||||
|
@ -584,6 +667,8 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
Button status_spoiler_button;
|
||||
|
||||
TextView status_content;
|
||||
TextView status_content_translated;
|
||||
LinearLayout status_content_translated_container;
|
||||
TextView status_account_username;
|
||||
TextView status_account_displayname;
|
||||
ImageView status_account_profile;
|
||||
|
@ -607,9 +692,11 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
|
|||
RelativeLayout status_prev4_container;
|
||||
ImageView status_reply;
|
||||
ImageView status_privacy;
|
||||
ImageView status_translate;
|
||||
LinearLayout status_container2;
|
||||
LinearLayout status_container3;
|
||||
LinearLayout main_container;
|
||||
TextView yandex_translate;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -188,7 +188,7 @@ public class DisplayAccountsFragment extends Fragment implements OnRetrieveAccou
|
|||
asyncTask = new RetrieveAccountsAsyncTask(context, type, targetedId, max_id, DisplayAccountsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
});
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT) {
|
||||
swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent,
|
||||
R.color.colorPrimary,
|
||||
|
@ -230,8 +230,8 @@ public class DisplayAccountsFragment extends Fragment implements OnRetrieveAccou
|
|||
this.context = context;
|
||||
}
|
||||
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
if(asyncTask != null && asyncTask.getStatus() == AsyncTask.Status.RUNNING)
|
||||
asyncTask.cancel(true);
|
||||
}
|
||||
|
|
|
@ -116,7 +116,7 @@ public class DisplayFollowRequestSentFragment extends Fragment implements OnRetr
|
|||
asyncTask = new RetrieveFollowRequestSentAsyncTask(context, max_id, DisplayFollowRequestSentFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
});
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT) {
|
||||
swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent,
|
||||
R.color.colorPrimary,
|
||||
|
@ -148,8 +148,8 @@ public class DisplayFollowRequestSentFragment extends Fragment implements OnRetr
|
|||
this.context = context;
|
||||
}
|
||||
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
if(asyncTask != null && asyncTask.getStatus() == AsyncTask.Status.RUNNING)
|
||||
asyncTask.cancel(true);
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
|||
asyncTask = new RetrieveNotificationsAsyncTask(context, null, null, max_id, null, null, DisplayNotificationsFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
});
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT) {
|
||||
swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent,
|
||||
R.color.colorPrimary,
|
||||
|
@ -149,8 +149,8 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
|
|||
this.context = context;
|
||||
}
|
||||
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
if(asyncTask != null && asyncTask.getStatus() == AsyncTask.Status.RUNNING)
|
||||
asyncTask.cancel(true);
|
||||
}
|
||||
|
|
|
@ -203,7 +203,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
|
|||
asyncTask = new RetrieveFeedsAsyncTask(context, type, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
}
|
||||
});
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_LIGHT) {
|
||||
swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent,
|
||||
R.color.colorPrimary,
|
||||
|
@ -248,9 +248,9 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
|
|||
this.context = context;
|
||||
}
|
||||
|
||||
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
@Override
|
||||
public void onDestroy (){
|
||||
super.onDestroy();
|
||||
if(asyncTask != null && asyncTask.getStatus() == AsyncTask.Status.RUNNING)
|
||||
asyncTask.cancel(true);
|
||||
}
|
||||
|
|
|
@ -173,7 +173,7 @@ public class SettingsFragment extends Fragment {
|
|||
file_chooser.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
final SwitchCompat set_night_mode = (SwitchCompat) rootView.findViewById(R.id.set_night_mode);
|
||||
set_night_mode.setChecked(theme == Helper.THEME_DARK);
|
||||
set_night_mode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
|
|
|
@ -140,6 +140,7 @@ public class Helper {
|
|||
public static final String REDIRECT_CONTENT = "urn:ietf:wg:oauth:2.0:oob";
|
||||
public static final String REDIRECT_CONTENT_WEB = "mastalab://backtomastalab";
|
||||
public static final int EXTERNAL_STORAGE_REQUEST_CODE = 84;
|
||||
public static final int REQ_CODE_SPEECH_INPUT = 132;
|
||||
|
||||
//Some definitions
|
||||
public static final String CLIENT_NAME = "client_name";
|
||||
|
@ -699,7 +700,7 @@ public class Helper {
|
|||
MenuItem nav_main_com = navigationView.getMenu().findItem(R.id.nav_main_com);
|
||||
MenuItem nav_main_opt= navigationView.getMenu().findItem(R.id.nav_main_opt);
|
||||
final SharedPreferences sharedpreferences = activity.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_LIGHT);
|
||||
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
|
||||
if( theme == Helper.THEME_DARK){
|
||||
changeDrawableColor(activity, R.drawable.ic_person_add,R.color.dark_text);
|
||||
changeDrawableColor(activity, R.drawable.ic_person,R.color.dark_text);
|
||||
|
@ -1125,4 +1126,24 @@ public class Helper {
|
|||
mDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
|
||||
return mDrawable;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the current locale of the device
|
||||
* @param context Context
|
||||
* @return String locale
|
||||
*/
|
||||
public static String currentLocale(Context context) {
|
||||
String locale;
|
||||
Locale current;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
current = context.getResources().getConfiguration().getLocales().get(0);
|
||||
} else {
|
||||
//noinspection deprecation
|
||||
current = context.getResources().getConfiguration().locale;
|
||||
}
|
||||
locale = current.toString();
|
||||
locale = locale.split("_")[0];
|
||||
return locale;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
/* Copyright 2017 Thomas Schneider
|
||||
*
|
||||
* This file is a part of Mastodon Etalab for mastodon.etalab.gouv.fr
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* Mastodon Etalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
||||
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
* Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with Thomas Schneider; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
package fr.gouv.etalab.mastodon.interfaces;
|
||||
|
||||
/**
|
||||
* Created by Thomas on 03/07/2017.
|
||||
* Yandex client API Handler
|
||||
*/
|
||||
public interface OnTranslatedInterface {
|
||||
void onTranslatedTextview(int position, String translatedResult, Boolean error);
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/* Copyright 2017 Thomas Schneider
|
||||
*
|
||||
* This file is a part of Mastodon Etalab for mastodon.etalab.gouv.fr
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* Mastodon Etalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
||||
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
* Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with Thomas Schneider; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
package fr.gouv.etalab.mastodon.translation;
|
||||
|
||||
import com.loopj.android.http.AsyncHttpClient;
|
||||
import com.loopj.android.http.AsyncHttpResponseHandler;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
|
||||
class YandexClient {
|
||||
|
||||
private static final String BASE_URL = "https://translate.yandex.net/api/v1.5/tr.json/translate?";
|
||||
private static final String YANDEX_KEY = "trnsl.1.1.20170703T074828Z.a95168c920f61b17.699437a40bbfbddc4cd57f345a75c83f0f30c420";
|
||||
|
||||
private static AsyncHttpClient client = new AsyncHttpClient();
|
||||
|
||||
public static void get(String text, String toLanguage, AsyncHttpResponseHandler responseHandler) {
|
||||
client.post(getAbsoluteUrl(text, toLanguage), responseHandler);
|
||||
}
|
||||
|
||||
private static String getAbsoluteUrl(String content, String toLanguage) {
|
||||
String key = "key=" + YANDEX_KEY + "&";
|
||||
String lang = "lang=" + toLanguage + "&";
|
||||
String text;
|
||||
try {
|
||||
text = "text=" + URLEncoder.encode(content, "utf-8") + "&";
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
text = "text=" + content + "&";
|
||||
e.printStackTrace();
|
||||
}
|
||||
String format = "format=html&";
|
||||
return BASE_URL + key + lang +format + text ;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/* Copyright 2017 Thomas Schneider
|
||||
*
|
||||
* This file is a part of Mastodon Etalab for mastodon.etalab.gouv.fr
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* Mastodon Etalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
||||
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
* Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with Thomas Schneider; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
package fr.gouv.etalab.mastodon.translation;
|
||||
import com.loopj.android.http.AsyncHttpResponseHandler;
|
||||
import org.json.JSONException;
|
||||
import cz.msebera.android.httpclient.Header;
|
||||
import fr.gouv.etalab.mastodon.interfaces.OnTranslatedInterface;
|
||||
|
||||
/**
|
||||
* Created by Thomas on 03/07/2017.
|
||||
* Yandex client API
|
||||
*/
|
||||
public class YandexQuery {
|
||||
|
||||
private OnTranslatedInterface listener;
|
||||
|
||||
|
||||
public YandexQuery(OnTranslatedInterface listenner) {
|
||||
this.listener = listenner;
|
||||
}
|
||||
|
||||
public void getYandexTextview(final int position, final String text, final String toLanguage) throws JSONException {
|
||||
|
||||
YandexClient.get(text, toLanguage, new AsyncHttpResponseHandler() {
|
||||
@Override
|
||||
public void onStart() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
|
||||
String str_response = new String(response);
|
||||
listener.onTranslatedTextview(position, str_response,false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
|
||||
listener.onTranslatedTextview(position, null, true);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 461 B |
After Width: | Height: | Size: 456 B |
After Width: | Height: | Size: 279 B |
After Width: | Height: | Size: 330 B |
After Width: | Height: | Size: 341 B |
After Width: | Height: | Size: 319 B |
After Width: | Height: | Size: 495 B |
After Width: | Height: | Size: 554 B |
After Width: | Height: | Size: 880 B |
After Width: | Height: | Size: 823 B |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 939 B |
|
@ -109,4 +109,27 @@
|
|||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<!-- About translation -->
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:padding="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:text="@string/about_yandex"
|
||||
android:textSize="16sp"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:layout_weight="2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content" />
|
||||
<Button
|
||||
android:id="@+id/about_translation"
|
||||
android:text="@string/about_yandex_action"
|
||||
style="@style/Base.Widget.AppCompat.Button.Colored"
|
||||
android:layout_weight="3"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
|
@ -82,19 +82,20 @@
|
|||
android:textSize="20sp"
|
||||
android:text="@string/login" />
|
||||
<TextView
|
||||
android:id="@+id/login_two_step"
|
||||
android:id="@+id/other_instance"
|
||||
android:textAllCaps="false"
|
||||
android:gravity="center"
|
||||
android:layout_marginTop="20dp"
|
||||
android:drawablePadding="10dp"
|
||||
android:padding="20dp"
|
||||
android:textSize="16sp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:text="@string/two_factor_authentification" />
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:text="@string/other_instance" />
|
||||
<TextView
|
||||
android:id="@+id/other_instance"
|
||||
android:id="@+id/login_two_step"
|
||||
android:textAllCaps="false"
|
||||
android:gravity="center"
|
||||
android:drawablePadding="10dp"
|
||||
|
@ -102,8 +103,9 @@
|
|||
android:layout_gravity="center"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:text="@string/other_instance" />
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:text="@string/two_factor_authentification" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
|
@ -127,5 +127,30 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
|
||||
<!-- Translations -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:orientation="vertical"
|
||||
tools:ignore="UselessParent">
|
||||
<!-- TRANSLATION TITLE -->
|
||||
<TextView
|
||||
android:text="@string/privacy_API_yandex_title"
|
||||
style="?attr/shapeBorder"
|
||||
android:paddingBottom="10dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<!-- API AUTHORIZATIONS CONTENT -->
|
||||
<TextView
|
||||
android:text="@string/privacy_API_yandex_authorizations"
|
||||
android:autoLink="web"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
</ScrollView>
|
|
@ -69,7 +69,7 @@
|
|||
android:id="@+id/account_followed_by"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:text="@string/followed_by"
|
||||
android:maxLines="1"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -77,29 +77,44 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="0dp" />
|
||||
<LinearLayout
|
||||
android:padding="5dp"
|
||||
android:id="@+id/toot_picture_container"
|
||||
android:layout_width="wrap_content"
|
||||
<HorizontalScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxHeight="100dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
>
|
||||
<RelativeLayout
|
||||
android:id="@+id/loading_picture"
|
||||
android:visibility="gone"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_gravity="bottom|center_horizontal"
|
||||
android:gravity="bottom|center_horizontal"
|
||||
android:layout_height="50dp">
|
||||
<ProgressBar
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:indeterminate="true" />
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:padding="5dp"
|
||||
android:id="@+id/toot_picture_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxHeight="100dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
>
|
||||
<RelativeLayout
|
||||
android:id="@+id/loading_picture"
|
||||
android:visibility="gone"
|
||||
android:layout_width="wrap_content"
|
||||
android:gravity="center"
|
||||
android:layout_height="wrap_content">
|
||||
<ProgressBar
|
||||
android:id="@+id/pbar_inf"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:indeterminate="true" />
|
||||
<TextView
|
||||
android:id="@+id/loader_progress"
|
||||
android:textSize="12sp"
|
||||
android:visibility="gone"
|
||||
android:layout_marginTop="10dp"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:layout_below="@+id/pbar_inf"
|
||||
android:layout_width="50dp"
|
||||
android:gravity="center"
|
||||
android:layout_height="wrap_content" />
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
</HorizontalScrollView>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:orientation="horizontal"
|
||||
|
|
|
@ -109,7 +109,7 @@
|
|||
android:orientation="vertical"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:text="@string/status"
|
||||
android:text="@string/toots"
|
||||
android:maxLines="1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
android:id="@+id/account_search_title"
|
||||
android:visibility="gone"
|
||||
android:textSize="18sp"
|
||||
android:background="@color/blue_light"
|
||||
android:background="?attr/colorAccent"
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingTop="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
|
@ -43,7 +43,7 @@
|
|||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:text="@string/accounts"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textColor="?attr/colorPrimary"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
<LinearLayout
|
||||
|
@ -108,7 +108,7 @@
|
|||
android:orientation="vertical"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:text="@string/status"
|
||||
android:text="@string/toots"
|
||||
android:maxLines="1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
|
|
@ -146,6 +146,28 @@
|
|||
android:autoLink="web"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<LinearLayout
|
||||
android:id="@+id/status_content_translated_container"
|
||||
android:visibility="gone"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/status_content_translated"
|
||||
android:autoLink="web"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<TextView
|
||||
android:id="@+id/yandex_translate"
|
||||
android:layout_width="match_parent"
|
||||
android:padding="2dp"
|
||||
android:gravity="end"
|
||||
android:text="Powered by Yandex.Translate"
|
||||
android:layout_height="wrap_content"
|
||||
tools:ignore="HardcodedText" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/status_document_container"
|
||||
android:orientation="horizontal"
|
||||
|
@ -322,6 +344,15 @@
|
|||
android:paddingRight="10dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:layout_height="wrap_content">
|
||||
<ImageView
|
||||
android:layout_marginRight="20dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:id="@+id/status_translate"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_width="25dp"
|
||||
android:layout_height="25dp"
|
||||
android:src="@drawable/ic_translate"
|
||||
tools:ignore="ContentDescription" />
|
||||
<ImageView
|
||||
android:layout_marginRight="20dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
|
|
|
@ -33,10 +33,10 @@
|
|||
<TextView
|
||||
android:id="@+id/status_search_title"
|
||||
android:visibility="gone"
|
||||
android:text="@string/status"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:text="@string/toots"
|
||||
android:textColor="?attr/colorPrimary"
|
||||
android:textSize="18sp"
|
||||
android:background="@color/blue_light"
|
||||
android:background="?attr/colorAccent"
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingTop="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
|
|
|
@ -31,10 +31,10 @@
|
|||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/tag_search_title"
|
||||
android:textColor="@color/colorPrimary"
|
||||
android:textColor="?attr/colorPrimary"
|
||||
android:visibility="gone"
|
||||
android:textSize="18sp"
|
||||
android:background="@color/blue_light"
|
||||
android:background="?attr/colorAccent"
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingTop="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
android:orientation="vertical"
|
||||
android:layout_height="wrap_content">
|
||||
<TextView
|
||||
android:text="@string/status"
|
||||
android:text="@string/toots"
|
||||
android:textSize="12sp"
|
||||
android:maxLines="1"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<group android:checkableBehavior="single">
|
||||
<item android:id="@+id/nav_account_list"
|
||||
android:visible="false"
|
||||
android:title="@string/account_list_menu">
|
||||
android:title="@string/accounts">
|
||||
<menu /></item>
|
||||
</group>
|
||||
<group android:checkableBehavior="single">
|
||||
|
@ -45,7 +45,7 @@
|
|||
<item
|
||||
android:id="@+id/nav_settings"
|
||||
android:icon="@drawable/ic_action_gear"
|
||||
android:title="@string/parameters_menu" />
|
||||
android:title="@string/settings" />
|
||||
<item
|
||||
android:id="@+id/nav_favorites"
|
||||
android:icon="@drawable/ic_favorite_menu"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_download"
|
||||
android:title="@string/action_download"
|
||||
android:title="@string/download"
|
||||
android:icon="@drawable/ic_save"
|
||||
app:showAsAction="always" />
|
||||
</menu>
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_microphone"
|
||||
android:title="@string/microphone"
|
||||
android:icon="@drawable/ic_action_mic"
|
||||
app:showAsAction="always" />
|
||||
</menu>
|
|
@ -0,0 +1,315 @@
|
|||
<resources>
|
||||
|
||||
<string name="navigation_drawer_open">Ouvrir le menu</string>
|
||||
<string name="navigation_drawer_close">Fermer le menu</string>
|
||||
|
||||
<string name="action_about">A propos</string>
|
||||
<string name="action_about_instance">A propos de l\'instance</string>
|
||||
<string name="action_privacy">Confidentialité</string>
|
||||
<string name="action_cache">Cache</string>
|
||||
<string name="action_logout">Déconnexion</string>
|
||||
<string name="login">Connexion</string>
|
||||
|
||||
<!-- common -->
|
||||
<string name="close">Fermer</string>
|
||||
<string name="yes">Oui</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
<string name="download">Télécharger</string>
|
||||
<string name="download_file">Télécharger %1$s</string>
|
||||
<string name="download_over">Téléchargement terminé</string>
|
||||
<string name="save_file">Enregistrer %1$s</string>
|
||||
<string name="save_over">Enregistrement terminé</string>
|
||||
<string name="download_from">Fichier : %1$s</string>
|
||||
<string name="password">Mot de passe</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="accounts">Comptes</string>
|
||||
<string name="toots">Pouets</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="token">Jeton</string>
|
||||
<string name="save">Sauvegarder</string>
|
||||
<string name="two_factor_authentification">Authentification en deux étapes ?</string>
|
||||
<string name="other_instance">Autre instance que mastodon.etalab.gouv.fr ?</string>
|
||||
<string name="no_result">Aucun résultat !</string>
|
||||
<string name="instance">Instance</string>
|
||||
<string name="toast_account_changed">Utilisation du compte %1$s</string>
|
||||
<string name="add_account">Ajouter un compte</string>
|
||||
<string name="clipboard">Le contenu du pouet a été copié dans le presse-papier</string>
|
||||
<string name="change">Changer</string>
|
||||
<string name="choose_picture">Changer l\'image…</string>
|
||||
<string name="clear">Nettoyer</string>
|
||||
<string name="microphone">Microphone</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>
|
||||
<!--- Menu -->
|
||||
<string name="home_menu">Accueil</string>
|
||||
<string name="local_menu">Fil public local</string>
|
||||
<string name="global_menu">Fil public global</string>
|
||||
<string name="neutral_menu_title">Options</string>
|
||||
<string name="favorites_menu">Favoris</string>
|
||||
<string name="communication_menu_title">Communication</string>
|
||||
<string name="muted_menu">Utilisateurs muets</string>
|
||||
<string name="blocked_menu">Utilisateurs bloqués</string>
|
||||
<string name="notifications">Notifications</string>
|
||||
<string name="follow_request">Demandes d\'abonnements</string>
|
||||
<string name="optimization">Optimisation</string>
|
||||
<string name="settings">Paramètres</string>
|
||||
<string name="profile">Profil</string>
|
||||
<string name="make_a_choice">Que souhaitez-vous faire ?</string>
|
||||
<string name="delete_account_title">Supprimer un compte</string>
|
||||
<string name="delete_account_message">Supprimer le compte %1$s de l\'application ?</string>
|
||||
<string name="send_email">Envoyer un email</string>
|
||||
<string name="choose_file">Veuillez sélectionner un fichier</string>
|
||||
<string name="choose_file_error">Aucun explorateur de fichiers trouvé !</string>
|
||||
<string name="click_to_change">Cliquer sur le chemin pour changer</string>
|
||||
<!-- Status -->
|
||||
<string name="no_status">Aucun pouet à afficher !</string>
|
||||
<string name="fav_added">Pouet ajouté aux favoris !</string>
|
||||
<string name="fav_removed">Pouet supprimé des favoris !</string>
|
||||
<string name="reblog_added">Pouet partagé !</string>
|
||||
<string name="reblog_removed">Pouet supprimé du partage !</string>
|
||||
<string name="reblog_by">Partagé par %1$s</string>
|
||||
|
||||
<string name="favourite_add">Ajouter ce pouet aux favoris ?</string>
|
||||
<string name="favourite_remove">Supprimer ce pouet des favoris ?</string>
|
||||
<string name="reblog_add">Partager ce pouet ?</string>
|
||||
<string name="reblog_remove">Supprimer ce pouet des partages ?</string>
|
||||
<string-array name="more_action">
|
||||
<item>Masquer</item>
|
||||
<item>Bloquer</item>
|
||||
<item>Signaler</item>
|
||||
<item>Copier</item>
|
||||
</string-array>
|
||||
<string-array name="more_action_owner">
|
||||
<item>Supprimer</item>
|
||||
<item>Copier</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="more_action_confirm">
|
||||
<item>Masquer ce compte ?</item>
|
||||
<item>Bloquer ce compte ?</item>
|
||||
<item>Signaler ce pouet ?</item>
|
||||
<item>null</item> <!-- Ugly hack to fix confirm box-->
|
||||
</string-array>
|
||||
|
||||
|
||||
<string-array name="more_action_confirm_account">
|
||||
<item>Afficher de nouveau ce compte ?</item>
|
||||
<item>Débloquer ce compte ?</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="more_action_owner_confirm">
|
||||
<item>Supprimer ce pouet ?</item>
|
||||
<item>null</item> <!-- Ugly hack to fix confirm box-->
|
||||
</string-array>
|
||||
<!-- Date -->
|
||||
<plurals name="date_seconds">
|
||||
<item quantity="one">Il y a %d seconde</item>
|
||||
<item quantity="other">Il y a %d secondes</item>
|
||||
</plurals>
|
||||
<plurals name="date_minutes">
|
||||
<item quantity="one">Il y a %d minute</item>
|
||||
<item quantity="other">Il y a %d minutes</item>
|
||||
</plurals>
|
||||
<plurals name="date_hours">
|
||||
<item quantity="one">Il y a %d heure</item>
|
||||
<item quantity="other">Il y a %d heures</item>
|
||||
</plurals>
|
||||
<string name="date_yesterday">Hier</string>
|
||||
<string name="date_day_before_yesterday">Avant-hier</string>
|
||||
<string name="date_day">Il y a %d jours</string>
|
||||
<plurals name="date_month">
|
||||
<item quantity="one">Il y a %d mois</item>
|
||||
<item quantity="other">Il y a %d mois</item>
|
||||
</plurals>
|
||||
<plurals name="date_year">
|
||||
<item quantity="one">Il y a %d an</item>
|
||||
<item quantity="other">Il y a %d ans</item>
|
||||
</plurals>
|
||||
|
||||
<!-- TOOT -->
|
||||
<string name="toot_cw_placeholder">Avertissement</string>
|
||||
<string name="toot_placeholder">Qu\'avez-vous en tête ?</string>
|
||||
<string name="toot_it">POUET !</string>
|
||||
<string name="cw">cw</string>
|
||||
<string name="toot_title">Ecrire un pouet</string>
|
||||
<string name="toot_title_reply">Répondre à un pouet</string>
|
||||
<string name="toot_no_space">Vous avez atteint les 500 caractères autorisés !</string>
|
||||
<string name="toot_select_image">Sélectionnez un média</string>
|
||||
<string name="toot_select_image_error">Une erreur s\'est produite lors de la sélection du média !</string>
|
||||
<string name="toot_delete_media">Supprimer le média ?</string>
|
||||
<string name="toot_error_no_content">Votre pouet est vide !</string>
|
||||
<string name="toot_visibility_tilte">Visibilité du pouet</string>
|
||||
<string name="toot_sent">Le pouet a été envoyé !</string>
|
||||
<string name="toot_reply_content_title">Vous répondez à ce pouet :</string>
|
||||
<string name="toot_sensitive">Contenu sensible ?</string>
|
||||
<string-array name="toot_visibility">
|
||||
<item>Afficher dans les fils publics</item>
|
||||
<item>Ne pas afficher dans les fils publics</item>
|
||||
<item>N\'afficher que pour vos abonné(e)s</item>
|
||||
<item>N\'afficher que pour les personnes mentionnées</item>
|
||||
</string-array>
|
||||
|
||||
<!-- Instance -->
|
||||
<string name="instance_no_description">Aucune description !</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about_vesrion">Version %1$s</string>
|
||||
<string name="about_developer">Développeur :</string>
|
||||
<string name="about_developer_action">\@tschneider</string>
|
||||
<string name="about_license">Licence : </string>
|
||||
<string name="about_license_action">GNU GPL V3</string>
|
||||
<string name="about_code">Code source : </string>
|
||||
<string name="about_code_action">bitbucket</string>
|
||||
<string name="about_yandex">Traduction des pouets :</string>
|
||||
<!-- Conversation -->
|
||||
<string name="conversation">Conversation</string>
|
||||
|
||||
<!-- Accounts -->
|
||||
<string name="no_accounts">Aucun compte à afficher</string>
|
||||
<string name="no_follow_request">Aucune demande d\'abonnement</string>
|
||||
<string name="status_cnt">Pouets \n %d</string>
|
||||
<string name="following_cnt">Abonnements \n %d</string>
|
||||
<string name="followers_cnt">Abonnés \n %d</string>
|
||||
<string name="authorize">Autoriser</string>
|
||||
<string name="reject">Rejeter</string>
|
||||
|
||||
<!-- Notifications -->
|
||||
<string name="no_notifications">Aucune notification à afficher</string>
|
||||
<string name="notif_mention">a mentionné votre pouet</string>
|
||||
<string name="notif_reblog">a partagé votre pouet</string>
|
||||
<string name="notif_favourite">a ajouté votre pouet à ses favoris</string>
|
||||
<string name="notif_follow">vous a suivi</string>
|
||||
<string name="notif_pouet">Nouveau pouet de %1$s</string>
|
||||
<plurals name="other_notifications">
|
||||
<item quantity="one">et %d autre notification</item>
|
||||
<item quantity="other">et %d autres notifications</item>
|
||||
</plurals>
|
||||
<plurals name="other_notif_hometimeline">
|
||||
<item quantity="one">et %d autre pouet à découvrir</item>
|
||||
<item quantity="other">et %d autres pouets à découvrir</item>
|
||||
</plurals>
|
||||
<!-- HEADER -->
|
||||
<string name="following">Abonnements</string>
|
||||
<string name="followers">Abonnés</string>
|
||||
<!-- TOAST -->
|
||||
<string name="client_error">Impossible d\'obtenir l\'id du client !</string>
|
||||
<string name="no_internet">Aucune connexion Internet !</string>
|
||||
<string name="toast_block">Le compte a été bloqué !</string>
|
||||
<string name="toast_unblock">Le compte n\'est plus bloqué !</string>
|
||||
<string name="toast_mute">Le compte a été masqué !</string>
|
||||
<string name="toast_unmute">Le compte n\'est plus masqué !</string>
|
||||
<string name="toast_follow">Le compte a été suivi !</string>
|
||||
<string name="toast_unfollow">Le compte n\'est plus suivi !</string>
|
||||
<string name="toast_reblog">Le pouet a été partagé !</string>
|
||||
<string name="toast_unreblog">Le pouet a été supprimé des partages !</string>
|
||||
<string name="toast_favourite">Le pouet a été ajouté aux favoris !</string>
|
||||
<string name="toast_unfavourite">Le pouet a été supprimé des favoris !</string>
|
||||
<string name="toast_report">Le pouet a été signalé !</string>
|
||||
<string name="toast_unstatus">Le pouet a été supprimé !</string>
|
||||
<string name="toast_error">Oups ! Une erreur s\'est produite !</string>
|
||||
<string name="toast_error_loading_account">Une erreur s\'est produite en chargeant le compte !</string>
|
||||
<string name="toast_error_search">Une erreur s\'est produite lors de la recherche !</string>
|
||||
<string name="toast_error_login">Impossible de vous connecter !</string>
|
||||
<string name="toast_update_credential_ok">Les données du profil ont été sauvegardées !</string>
|
||||
<string name="nothing_to_do">Aucune action ne peut être réalisée</string>
|
||||
<string name="toast_saved">Le média a été enregistré !</string>
|
||||
<string name="toast_error_translate">Une erreur est survenue lors de la traduction !</string>
|
||||
<!-- Settings -->
|
||||
<string name="settings_title_optimisation">Optimisation du chargement</string>
|
||||
<string name="set_toots_page">Nombre de pouets par chargement</string>
|
||||
<string name="set_accounts_page">Nombre de comptes par chargement</string>
|
||||
<string name="set_notifications_page">Nombre de notifications par chargement</string>
|
||||
<string name="set_attachment_always">Toujours</string>
|
||||
<string name="set_attachment_wifi">WIFI</string>
|
||||
<string name="set_attachment_ask">Demander</string>
|
||||
<string name="set_attachment_action">Charger les médias</string>
|
||||
<string name="load_attachment">Charger les images</string>
|
||||
<string name="load_attachment_spoiler">Afficher le contenu ?</string>
|
||||
<string name="load_sensitive_attachment">Charger les images sensibles</string>
|
||||
<string name="set_display_reply">Afficher le message précédent lors d\'une réponse</string>
|
||||
<string name="set_folder_title">Destination : </string>
|
||||
|
||||
<string name="settings_title_notifications">Gestion des notifications</string>
|
||||
<string name="set_notif_follow">Notifier lorsque quelqu’un me suit</string>
|
||||
<string name="set_notif_follow_ask">Notifier lorsque quelqu\'un demande à me suivre</string>
|
||||
<string name="set_notif_follow_share">Notifier lorsque quelqu\'un partage mes pouets</string>
|
||||
<string name="set_notif_follow_add">Notifier lorsque quelqu’un ajoute mes pouets à ses favoris</string>
|
||||
<string name="set_notif_follow_mention">Notifier lorsque quelqu’un me mentionne</string>
|
||||
<string name="set_share_validation">Confirmer avant de partager</string>
|
||||
<string name="settings_title_more_options">Options avancées</string>
|
||||
<string name="set_wifi_only">Notifier en WIFI seulement</string>
|
||||
<string name="set_notif_silent">Utiliser le vibreur</string>
|
||||
<string name="set_night_mode">Mode nuit</string>
|
||||
<string name="settings_title_profile">Modifier le profil</string>
|
||||
<string name="set_profile_description">Présentation…</string>
|
||||
<string name="set_save_changes">Enregistrer les modifications</string>
|
||||
<string name="set_header_picture_overlay">Choisissez une image d\'entête</string>
|
||||
<string name="note_no_space">Vous avez atteint les 160 caractères autorisés !</string>
|
||||
<string name="username_no_space">Vous avez atteint les 30 caractères autorisés !</string>
|
||||
|
||||
<string name="embedded_browser">Utiliser le navigateur intégré</string>
|
||||
<string name="use_javascript">Activer Javascript</string>
|
||||
<string name="use_cookies">Autoriser les cookies tiers</string>
|
||||
|
||||
<string name="set_title_news">Actualités</string>
|
||||
<string name="set_notification_news">Notifier lors de nouveaux pouets sur la page d\'accueil</string>
|
||||
<string name="set_show_error_messages">Afficher les messages d\'erreur</string>
|
||||
<string name="action_follow">Suivre</string>
|
||||
<string name="action_unfollow">Se désabonner</string>s
|
||||
<string name="action_block">Bloquer</string>
|
||||
<string name="action_unblock">Débloquer</string>
|
||||
<string name="action_mute">Masquer</string>
|
||||
<string name="action_no_action">Aucune action</string>
|
||||
<string name="action_unmute">Afficher</string>
|
||||
<string name="request_sent">Demande envoyée</string>
|
||||
<string name="followed_by">Vous suit</string>
|
||||
|
||||
<string name="action_search">Recherche</string>
|
||||
|
||||
<!-- CACHE -->
|
||||
<string name="cache_title">Nettoyage du cache</string>
|
||||
<string name="cache_message">Il y a %1$s de données en cache.\n\nSouhaitez-vous les supprimer ?</string>
|
||||
<string name="toast_cache_clear">Le cache a été nettoyé ! %1$s ont été libérés</string>
|
||||
|
||||
<!-- PRIVACY -->
|
||||
<string name="privacy_data_title">Données enregistrées</string>
|
||||
<string name="privacy_data">
|
||||
Seules les informations de base des comptes connectés sont enregistrées sur l\'appareil.
|
||||
Ces données sont strictement confidentielles et ne sont utilisables que par l\'application. La suppression de l\'application entraîne immédiatement la suppression de ces données.\n
|
||||
⚠ Les identifiants et les mots de passe ne sont jamais enregistrés, ils ne sont utilisés que lors de l\'authentification sécurisée (SSL) vers l\'instance.
|
||||
</string>
|
||||
|
||||
<string name="privacy_authorizations_title">Autorisations de l\'application</string>
|
||||
<string name="privacy_authorizations">
|
||||
- <b>ACCESS_NETWORK_STATE</b> : Utilisée pour savoir si l\'appareil est connecté au WIFI.\n
|
||||
- <b>INTERNET</b> : Utilisée pour les requêtes vers l\'instance.\n
|
||||
- <b>WRITE_EXTERNAL_STORAGE</b> : Utilisée pour télécharger les médias / déplacer sur la carte SD.\n
|
||||
- <b>READ_EXTERNAL_STORAGE</b> : Utilisée pour ajouter des médias aux pouets.\n
|
||||
- <b>BOOT_COMPLETED</b> : Utilisée pour lancer le service de notifications quand l\'appareil démarre.\n
|
||||
- <b>WAKE_LOCK</b> : Utilisée lors du service de notifications.
|
||||
</string>
|
||||
|
||||
<string name="privacy_API_authorizations_title">Autorisations de l\'API</string>
|
||||
<string name="privacy_API_authorizations">
|
||||
- <b>Read</b> : Lire les données du compte.\n
|
||||
- <b>Write</b> : Envoyer des messages et attacher des médias aux messages.\n
|
||||
- <b>Follow</b> : S\'abonner, se désabonner, bloquer, débloquer.\n\n
|
||||
<b>⚠ Ces actions ne sont réalisées qu\'à la demande de l\'utilisateur.</b>
|
||||
</string>
|
||||
<string name="privacy_API_title">Suivi et bibliothèques</string>
|
||||
<string name="privacy_API">
|
||||
L\'application n\'utilise <b>aucun outil de suivi</b> (mesure d\'audience, rapport d\'erreurs, etc.) et elle ne comporte aucune publicité.\n\n
|
||||
L\'utilisation de bibliothèques est réduite au strict minimum :\n
|
||||
- <b>Android Asynchronous Http Client</b> : Pour la gestion des requêtes\n
|
||||
- <b>Universal Image Loader</b> : Pour la gestion des médias\n
|
||||
- <b>Android-Job</b> : Pour la gestion des services\n
|
||||
- <b>PhotoView</b> : Pour la gestion des images
|
||||
</string>
|
||||
|
||||
<string name="privacy_API_yandex_title">Traduction des pouets</string>
|
||||
<string name="privacy_API_yandex_authorizations">
|
||||
L\'application offre la possibilité de traduire les pouets en utilisant les paramètres régionaux de l\'appareil et l\'API de Yandex.\n
|
||||
Yandex a sa propre politique de confidentialité qui peut être consultée à l\'adresse suivante : https://yandex.ru/legal/confidential/?lang=en
|
||||
</string>
|
||||
</resources>
|
|
@ -1,313 +1,321 @@
|
|||
<resources>
|
||||
<string name="app_name">Mastalab</string>
|
||||
<string name="app_name" translatable="false">Mastalab</string>
|
||||
|
||||
<string name="navigation_drawer_open">Ouvrir le menu</string>
|
||||
<string name="navigation_drawer_close">Fermer le menu</string>
|
||||
<string name="navigation_drawer_open">Open the menu</string>
|
||||
<string name="navigation_drawer_close">Close the menu</string>
|
||||
|
||||
<string name="action_settings">Paramètres</string>
|
||||
<string name="action_about">A propos</string>
|
||||
<string name="action_about_instance">A propos de l\'instance</string>
|
||||
<string name="action_privacy">Confidentialité</string>
|
||||
<string name="action_about">About</string>
|
||||
<string name="action_about_instance">About the instance</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_cache">Cache</string>
|
||||
<string name="action_logout">Déconnexion</string>
|
||||
<string name="action_download">Télécharger</string>
|
||||
<string name="login">Connexion</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
|
||||
<!-- common -->
|
||||
<string name="close">Fermer</string>
|
||||
<string name="yes">Oui</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
<string name="download">Télécharger</string>
|
||||
<string name="download_file">Télécharger %1$s</string>
|
||||
<string name="download_over">Téléchargement terminé</string>
|
||||
<string name="save_file">Enregistrer %1$s</string>
|
||||
<string name="save_over">Enregistrement terminé</string>
|
||||
<string name="download_from">Fichier : %1$s</string>
|
||||
<string name="password">Mot de passe</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="download_over">Download complete</string>
|
||||
<string name="save_file">Save %1$s</string>
|
||||
<string name="save_over">Media saved</string>
|
||||
<string name="download_from">File: %1$s</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="accounts">Comptes</string>
|
||||
<string name="toots">Pouets</string>
|
||||
<string name="accounts">Accounts</string>
|
||||
<string name="toots">Toots</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="token">Jeton</string>
|
||||
<string name="save">Sauvegarder</string>
|
||||
<string name="two_factor_authentification">Authentification en deux étapes ?</string>
|
||||
<string name="other_instance">Autre instance que mastodon.etalab.gouv.fr ?</string>
|
||||
<string name="no_result">Aucun résultat !</string>
|
||||
<string name="token">Token</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="two_factor_authentification">Two-step authentication?</string>
|
||||
<string name="other_instance">Other instance than mastodon.etalab.gouv.fr?</string>
|
||||
<string name="no_result">No results!</string>
|
||||
<string name="instance">Instance</string>
|
||||
<string name="toast_account_changed">Utilisation du compte %1$s</string>
|
||||
<string name="add_account">Ajouter un compte</string>
|
||||
<string name="clipboard">Le contenu du pouet a été copié dans le presse-papier</string>
|
||||
<string name="change">Changer</string>
|
||||
<string name="choose_picture">Changer l\'image…</string>
|
||||
<string name="clear">Nettoyer</string>
|
||||
<string name="toast_account_changed">Now works with the account %1$s</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="clipboard">The content of the toot has been copied to the clipboard</string>
|
||||
<string name="change">Change</string>
|
||||
<string name="choose_picture">Select a picture…</string>
|
||||
<string name="clear">Clean</string>
|
||||
<string name="microphone">Microphone</string>
|
||||
<string name="speech_prompt">Please, say something</string>
|
||||
<string name="speech_not_supported">Sorry! Your device does not support the voice input!</string>
|
||||
|
||||
<!--- Menu -->
|
||||
<string name="home_menu">Accueil</string>
|
||||
<string name="home_timeline">Accueil</string>
|
||||
<string name="local_menu">Fil public local</string>
|
||||
<string name="global_menu">Fil public global</string>
|
||||
<string name="public_menu">Fil public</string>
|
||||
<string name="home_menu">Home</string>
|
||||
<string name="local_menu">Local timeline</string>
|
||||
<string name="global_menu">Federated timeline</string>
|
||||
<string name="neutral_menu_title">Options</string>
|
||||
<string name="parameters_menu">Préférences</string>
|
||||
<string name="favorites_menu">Favoris</string>
|
||||
<string name="favorites_menu">Favourites</string>
|
||||
<string name="communication_menu_title">Communication</string>
|
||||
<string name="muted_menu">Utilisateurs muets</string>
|
||||
<string name="blocked_menu">Utilisateurs bloqués</string>
|
||||
<string name="account_list_menu">Comptes</string>
|
||||
<string name="muted_menu">Muted users</string>
|
||||
<string name="blocked_menu">Blocked users</string>
|
||||
<string name="notifications">Notifications</string>
|
||||
<string name="follow_request">Demandes d\'abonnements</string>
|
||||
<string name="optimization">Optimisation</string>
|
||||
<string name="settings">Paramètres</string>
|
||||
<string name="profile">Profil</string>
|
||||
<string name="make_a_choice">Que souhaitez-vous faire ?</string>
|
||||
<string name="delete_account_title">Supprimer un compte</string>
|
||||
<string name="delete_account_message">Supprimer le compte %1$s de l\'application ?</string>
|
||||
<string name="send_email">Envoyer un email</string>
|
||||
<string name="choose_file">Veuillez sélectionner un fichier</string>
|
||||
<string name="choose_file_error">Aucun explorateur de fichiers trouvé !</string>
|
||||
<string name="click_to_change">Cliquer sur le chemin pour changer</string>
|
||||
<string name="follow_request">Follow requests</string>
|
||||
<string name="optimization">Optimization</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="profile">Profile</string>
|
||||
<string name="make_a_choice">What do you want to do?</string>
|
||||
<string name="delete_account_title">Delete an account</string>
|
||||
<string name="delete_account_message">Delete the account %1$s from the application?</string>
|
||||
<string name="send_email">Send an email</string>
|
||||
<string name="choose_file">Please select a file</string>
|
||||
<string name="choose_file_error">No file explorer found!</string>
|
||||
<string name="click_to_change">Click on the path to change it</string>
|
||||
<!-- Status -->
|
||||
<string name="no_status">Aucun pouet à afficher !</string>
|
||||
<string name="fav_added">Pouet ajouté aux favoris !</string>
|
||||
<string name="fav_removed">Pouet supprimé des favoris !</string>
|
||||
<string name="reblog_added">Pouet partagé !</string>
|
||||
<string name="reblog_removed">Pouet supprimé du partage !</string>
|
||||
<string name="reblog_by">Partagé par %1$s</string>
|
||||
<string name="no_status">No toot to display</string>
|
||||
<string name="fav_added">The toot was added to favourites</string>
|
||||
<string name="fav_removed">The toot was removed from favourites!</string>
|
||||
<string name="reblog_added">The toot was boosted!</string>
|
||||
<string name="reblog_removed">The toot is no longer boosted!</string>
|
||||
<string name="reblog_by">Shared via %1$s</string>
|
||||
|
||||
<string name="favourite_add">Ajouter ce pouet aux favoris ?</string>
|
||||
<string name="favourite_remove">Supprimer ce pouet des favoris ?</string>
|
||||
<string name="reblog_add">Partager ce pouet ?</string>
|
||||
<string name="reblog_remove">Supprimer ce pouet des partages ?</string>
|
||||
<string name="favourite_add">Add this toot to your favourites?</string>
|
||||
<string name="favourite_remove">Remove this toot from your favourites?</string>
|
||||
<string name="reblog_add">Boost this toot?</string>
|
||||
<string name="reblog_remove">Unboost this toot?</string>
|
||||
<string-array name="more_action">
|
||||
<item>Masquer</item>
|
||||
<item>Bloquer</item>
|
||||
<item>Signaler</item>
|
||||
<item>Copier</item>
|
||||
<item>Mute</item>
|
||||
<item>Block</item>
|
||||
<item>Report</item>
|
||||
<item>Copy</item>
|
||||
</string-array>
|
||||
<string-array name="more_action_owner">
|
||||
<item>Supprimer</item>
|
||||
<item>Copier</item>
|
||||
<item>Remove</item>
|
||||
<item>Copy</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="more_action_confirm">
|
||||
<item>Masquer ce compte ?</item>
|
||||
<item>Bloquer ce compte ?</item>
|
||||
<item>Signaler ce pouet ?</item>
|
||||
<item>Mute this account?</item>
|
||||
<item>Block this account?</item>
|
||||
<item>Report this toot?</item>
|
||||
<item>null</item> <!-- Ugly hack to fix confirm box-->
|
||||
</string-array>
|
||||
|
||||
|
||||
<string-array name="more_action_confirm_account">
|
||||
<item>Afficher de nouveau ce compte ?</item>
|
||||
<item>Débloquer ce compte ?</item>
|
||||
<item>Unmute this account?</item>
|
||||
<item>Unblock this account?</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="more_action_owner_confirm">
|
||||
<item>Supprimer ce pouet ?</item>
|
||||
<item>Remove this toot?</item>
|
||||
<item>null</item> <!-- Ugly hack to fix confirm box-->
|
||||
</string-array>
|
||||
<!-- Date -->
|
||||
<plurals name="date_seconds">
|
||||
<item quantity="one">Il y a %d seconde</item>
|
||||
<item quantity="other">Il y a %d secondes</item>
|
||||
<item quantity="one">%d second ago</item>
|
||||
<item quantity="other">%d seconds ago</item>
|
||||
</plurals>
|
||||
<plurals name="date_minutes">
|
||||
<item quantity="one">Il y a %d minute</item>
|
||||
<item quantity="other">Il y a %d minutes</item>
|
||||
<item quantity="one">%d minute ago</item>
|
||||
<item quantity="other">%d minutes ago</item>
|
||||
</plurals>
|
||||
<plurals name="date_hours">
|
||||
<item quantity="one">Il y a %d heure</item>
|
||||
<item quantity="other">Il y a %d heures</item>
|
||||
<item quantity="one">%d hour ago</item>
|
||||
<item quantity="other">%d hours ago</item>
|
||||
</plurals>
|
||||
<string name="date_yesterday">Hier</string>
|
||||
<string name="date_day_before_yesterday">Avant-hier</string>
|
||||
<string name="date_day">Il y a %d jours</string>
|
||||
<string name="date_yesterday">Yesterday</string>
|
||||
<string name="date_day_before_yesterday">Before yesterday</string>
|
||||
<string name="date_day">%d days ago</string>
|
||||
<plurals name="date_month">
|
||||
<item quantity="one">Il y a %d mois</item>
|
||||
<item quantity="other">Il y a %d mois</item>
|
||||
<item quantity="one">%d month ago</item>
|
||||
<item quantity="other">%d months ago</item>
|
||||
</plurals>
|
||||
<plurals name="date_year">
|
||||
<item quantity="one">Il y a un an</item>
|
||||
<item quantity="other">Il y a %d ans</item>
|
||||
<item quantity="one">One year ago</item>
|
||||
<item quantity="other">%d years ago</item>
|
||||
</plurals>
|
||||
|
||||
<!-- TOOT -->
|
||||
<string name="toot_cw_placeholder">Avertissement</string>
|
||||
<string name="toot_placeholder">Qu\'avez-vous en tête ?</string>
|
||||
<string name="toot_it">POUET !</string>
|
||||
<string name="toot_cw_placeholder">Warning</string>
|
||||
<string name="toot_placeholder">What is on your mind?</string>
|
||||
<string name="toot_it">TOOT!</string>
|
||||
<string name="cw">cw</string>
|
||||
<string name="toot_title">Ecrire un pouet</string>
|
||||
<string name="toot_title_reply">Répondre à un pouet</string>
|
||||
<string name="toot_no_space">Vous avez atteint les 500 caractères autorisés !</string>
|
||||
<string name="toot_select_image">Sélectionnez une image</string>
|
||||
<string name="toot_select_image_error">Une erreur s\'est produite lors de la sélection de l\'image !</string>
|
||||
<string name="toot_delete_media">Supprimer le média ?</string>
|
||||
<string name="toot_error_no_content">Votre pouet est vide !</string>
|
||||
<string name="toot_visibility_tilte">Visibilité du pouet</string>
|
||||
<string name="toot_sent">Le pouet a été envoyé !</string>
|
||||
<string name="toot_reply_content_title">Vous répondez à ce pouet :</string>
|
||||
<string name="toot_sensitive">Contenu sensible ?</string>
|
||||
<string name="toot_title">Write a toot</string>
|
||||
<string name="toot_title_reply">Reply to a toot</string>
|
||||
<string name="toot_no_space">You have reached the 500 characters allowed!</string>
|
||||
<string name="toot_select_image">Select a media</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="toot_delete_media">Delete this media?</string>
|
||||
<string name="toot_error_no_content">Your toot is empty!</string>
|
||||
<string name="toot_visibility_tilte">Visibility of the toot</string>
|
||||
<string name="toot_sent">The toot has been sent!</string>
|
||||
<string name="toot_reply_content_title">You are replying to this toot:</string>
|
||||
<string name="toot_sensitive">Sensitive content?</string>
|
||||
<string-array name="toot_visibility">
|
||||
<item>Afficher dans les fils publics</item>
|
||||
<item>Ne pas afficher dans les fils publics</item>
|
||||
<item>N\'afficher que pour vos abonné(e)s</item>
|
||||
<item>N\'afficher que pour les personnes mentionnées</item>
|
||||
<item>Post to public timelines</item>
|
||||
<item>Do not post to public timelines</item>
|
||||
<item>Post to followers only</item>
|
||||
<item>Post to mentioned users only</item>
|
||||
</string-array>
|
||||
|
||||
<!-- Instance -->
|
||||
<string name="instance_no_description">Aucune description !</string>
|
||||
<string name="instance_no_description">No description available!</string>
|
||||
|
||||
<!-- About -->
|
||||
<string name="about_vesrion">Version %1$s</string>
|
||||
<string name="about_developer">Développeur :</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_developer">Developer:</string>
|
||||
<string name="about_developer_action">\@tschneider</string>
|
||||
<string name="about_license">Licence : </string>
|
||||
<string name="about_license">License: </string>
|
||||
<string name="about_license_action">GNU GPL V3</string>
|
||||
<string name="about_code">Code source : </string>
|
||||
<string name="about_code_action">bitbucket</string>
|
||||
<string name="about_code">Source code: </string>
|
||||
<string name="about_code_action">Bitbucket</string>
|
||||
<string name="about_yandex">Translation of toots:</string>
|
||||
<string name="about_yandex_action" translatable="false">Powered by Yandex.Translate</string>
|
||||
<!-- Conversation -->
|
||||
<string name="conversation">Conversation</string>
|
||||
|
||||
<!-- Accounts -->
|
||||
<string name="no_accounts">Aucun compte à afficher</string>
|
||||
<string name="no_follow_request">Aucune demande d\'abonnement</string>
|
||||
<string name="status_cnt">Pouets \n %d</string>
|
||||
<string name="following_cnt">Abonnements \n %d</string>
|
||||
<string name="followers_cnt">Abonnés \n %d</string>
|
||||
<string name="authorize">Autoriser</string>
|
||||
<string name="reject">Rejeter</string>
|
||||
<string name="no_accounts">No account to display</string>
|
||||
<string name="no_follow_request">No follow request</string>
|
||||
<string name="status_cnt">Toots \n %d</string>
|
||||
<string name="following_cnt">Following \n %d</string>
|
||||
<string name="followers_cnt">Followers \n %d</string>
|
||||
<string name="authorize">Authorize</string>
|
||||
<string name="reject">Reject</string>
|
||||
|
||||
<!-- Notifications -->
|
||||
<string name="no_notifications">Aucune notification à afficher</string>
|
||||
<string name="notif_mention">a mentionné votre pouet</string>
|
||||
<string name="notif_reblog">a partagé votre pouet</string>
|
||||
<string name="notif_favourite">a ajouté votre pouet à ses favoris</string>
|
||||
<string name="notif_follow">vous a suivi</string>
|
||||
<string name="notif_pouet">Nouveau pouet de %1$s</string>
|
||||
<string name="no_notifications">No notification to display</string>
|
||||
<string name="notif_mention">mentioned your status</string>
|
||||
<string name="notif_reblog">boosted your status</string>
|
||||
<string name="notif_favourite">favourited your status</string>
|
||||
<string name="notif_follow">followed you</string>
|
||||
<string name="notif_pouet">New toot from %1$s</string>
|
||||
<plurals name="other_notifications">
|
||||
<item quantity="one">et %d autre notification</item>
|
||||
<item quantity="other">et %d autres notifications</item>
|
||||
<item quantity="one">and another notification</item>
|
||||
<item quantity="other">and %d other notifications</item>
|
||||
</plurals>
|
||||
<plurals name="other_notif_hometimeline">
|
||||
<item quantity="one">et un autre pouet à découvrir</item>
|
||||
<item quantity="other">et %d autres pouets à découvrir</item>
|
||||
<item quantity="one">and another toot to discover</item>
|
||||
<item quantity="other">and %d other toots to discover</item>
|
||||
</plurals>
|
||||
<!-- HEADER -->
|
||||
<string name="status">Pouets</string>
|
||||
<string name="following">Abonnements</string>
|
||||
<string name="followers">Abonnés</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<!-- TOAST -->
|
||||
<string name="client_error">Impossible d\'obtenir l\'id du client !</string>
|
||||
<string name="no_internet">Aucune connexion Internet !</string>
|
||||
<string name="toast_block">Le compte a été bloqué !</string>
|
||||
<string name="toast_unblock">Le compte n\'est plus bloqué !</string>
|
||||
<string name="toast_mute">Le compte a été masqué !</string>
|
||||
<string name="toast_unmute">Le compte n\'est plus masqué !</string>
|
||||
<string name="toast_follow">Le compte a été suivi !</string>
|
||||
<string name="toast_unfollow">Le compte n\'est plus suivi !</string>
|
||||
<string name="toast_reblog">Le pouet a été partagé !</string>
|
||||
<string name="toast_unreblog">Le pouet a été supprimé des partages !</string>
|
||||
<string name="toast_favourite">Le pouet a été ajouté aux favoris !</string>
|
||||
<string name="toast_unfavourite">Le pouet a été supprimé des favoris !</string>
|
||||
<string name="toast_report">Le pouet a été signalé !</string>
|
||||
<string name="toast_unstatus">Le pouet a été supprimé !</string>
|
||||
<string name="toast_error">Oups ! Une erreur s\'est produite !</string>
|
||||
<string name="toast_error_loading_account">Une erreur s\'est produite en chargeant le compte !</string>
|
||||
<string name="toast_error_search">Une erreur s\'est produite lors de la recherche !</string>
|
||||
<string name="toast_error_login">Impossible de vous connecter !</string>
|
||||
<string name="toast_update_credential_ok">Les données du profil ont été sauvegardées !</string>
|
||||
<string name="nothing_to_do">Aucune action ne peut être réalisée</string>
|
||||
<string name="toast_saved">Le média a été enregistré !</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="no_internet">No Internet connection!</string>
|
||||
<string name="toast_block">The account was blocked!</string>
|
||||
<string name="toast_unblock">The account is no longer blocked!</string>
|
||||
<string name="toast_mute">The account was muted!</string>
|
||||
<string name="toast_unmute">The account is no longer muted!</string>
|
||||
<string name="toast_follow">The account was followed!</string>
|
||||
<string name="toast_unfollow">The account is no longer followed!</string>
|
||||
<string name="toast_reblog">The toot was boosted!</string>
|
||||
<string name="toast_unreblog">The toot is no longer boosted!</string>
|
||||
<string name="toast_favourite">The toot was added to your favourites!</string>
|
||||
<string name="toast_unfavourite">The toot was removed from your favourites!</string>
|
||||
<string name="toast_report">The toot was reported!</string>
|
||||
<string name="toast_unstatus">The toot was deleted!</string>
|
||||
<string name="toast_error">Oops ! An error occurred!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="toast_error_login">Can not log in!</string>
|
||||
<string name="toast_update_credential_ok">The profile data have been saved!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="toast_saved">The media has been saved!</string>
|
||||
<string name="toast_error_translate">An error occurred while translating!</string>
|
||||
<!-- Settings -->
|
||||
<string name="settings_title_optimisation">Optimisation du chargement</string>
|
||||
<string name="set_toots_page">Nombre de pouets par chargement</string>
|
||||
<string name="set_accounts_page">Nombre de comptes par chargement</string>
|
||||
<string name="set_notifications_page">Nombre de notifications par chargement</string>
|
||||
<string name="set_attachment_always">Toujours</string>
|
||||
<string name="settings_title_optimisation">Optimisation of loading</string>
|
||||
<string name="set_toots_page">Number of toots per load</string>
|
||||
<string name="set_accounts_page">Number of accounts per load</string>
|
||||
<string name="set_notifications_page">Number of notifications per load</string>
|
||||
<string name="set_attachment_always">Always</string>
|
||||
<string name="set_attachment_wifi">WIFI</string>
|
||||
<string name="set_attachment_ask">Demander</string>
|
||||
<string name="set_attachment_action">Charger les médias</string>
|
||||
<string name="load_attachment">Charger les images</string>
|
||||
<string name="load_attachment_spoiler">Afficher le contenu ?</string>
|
||||
<string name="load_sensitive_attachment">Charger les images sensibles</string>
|
||||
<string name="set_display_reply">Afficher le message précédent lors d\'une réponse</string>
|
||||
<string name="set_folder_title">Destination : </string>
|
||||
<string name="set_attachment_ask">Ask</string>
|
||||
<string name="set_attachment_action">Load the media</string>
|
||||
<string name="load_attachment">Load the pictures</string>
|
||||
<string name="load_attachment_spoiler">Show more…</string>
|
||||
<string name="load_sensitive_attachment">Sensitive content</string>
|
||||
<string name="set_display_reply">Display previous message in responses</string>
|
||||
<string name="set_folder_title">Path: </string>
|
||||
|
||||
<string name="settings_title_notifications">Gestion des notifications</string>
|
||||
<string name="set_notif_follow">Notifier lorsque quelqu’un me suit</string>
|
||||
<string name="set_notif_follow_ask">Notifier lorsque quelqu\'un demande à me suivre</string>
|
||||
<string name="set_notif_follow_share">Notifier lorsque quelqu\'un partage mes pouets</string>
|
||||
<string name="set_notif_follow_add">Notifier lorsque quelqu’un ajoute mes pouets à ses favoris</string>
|
||||
<string name="set_notif_follow_mention">Notifier lorsque quelqu’un me mentionne</string>
|
||||
<string name="set_share_validation">Confirmer avant de partager</string>
|
||||
<string name="settings_title_more_options">Options avancées</string>
|
||||
<string name="set_wifi_only">Notifier en WIFI seulement</string>
|
||||
<string name="set_notif_silent">Utiliser le vibreur</string>
|
||||
<string name="set_night_mode">Mode nuit</string>
|
||||
<string name="settings_title_profile">Modifier le profil</string>
|
||||
<string name="set_profile_description">Présentation…</string>
|
||||
<string name="set_save_changes">Enregistrer les modifications</string>
|
||||
<string name="set_header_picture_overlay">Choisissez une image d\'entête</string>
|
||||
<string name="note_no_space">Vous avez atteint les 160 caractères autorisés !</string>
|
||||
<string name="username_no_space">Vous avez atteint les 30 caractères autorisés !</string>
|
||||
<string name="settings_title_notifications">Manage notifications</string>
|
||||
<string name="set_notif_follow">Notify when someone follows you</string>
|
||||
<string name="set_notif_follow_ask">Notify when someone requests to follow you</string>
|
||||
<string name="set_notif_follow_share">Notify when someone boosts your status</string>
|
||||
<string name="set_notif_follow_add">Notify when someone favourites your status</string>
|
||||
<string name="set_notif_follow_mention">Notify when someone mentions you</string>
|
||||
<string name="set_share_validation">Show confirmation dialog before boosting</string>
|
||||
<string name="settings_title_more_options">Advanced settings</string>
|
||||
<string name="set_wifi_only">Notify in WIFI only</string>
|
||||
<string name="set_notif_silent">Silent Notifications</string>
|
||||
<string name="set_night_mode">Night mode</string>
|
||||
<string name="settings_title_profile">Edit profile</string>
|
||||
<string name="set_profile_description">Bio…</string>
|
||||
<string name="set_save_changes">Save changes</string>
|
||||
<string name="set_header_picture_overlay">Choose a header picture</string>
|
||||
<string name="note_no_space">You have reached the 160 characters allowed!</string>
|
||||
<string name="username_no_space">You have reached the 30 characters allowed!</string>
|
||||
|
||||
<string name="embedded_browser">Utiliser le navigateur intégré</string>
|
||||
<string name="use_javascript">Activer Javascript</string>
|
||||
<string name="use_cookies">Autoriser les cookies tiers</string>
|
||||
<string name="embedded_browser">Use the built-in browser</string>
|
||||
<string name="use_javascript">Enable Javascript</string>
|
||||
<string name="use_cookies">Allow third-party cookies</string>
|
||||
|
||||
<string name="set_title_news">Actualités</string>
|
||||
<string name="set_notification_news">Notifier lors de nouveaux pouets sur la page d\'accueil</string>
|
||||
<string name="set_show_error_messages">Afficher les messages d\'erreur</string>
|
||||
<string name="action_follow">Suivre</string>
|
||||
<string name="action_unfollow">Se désabonner</string>s
|
||||
<string name="action_block">Bloquer</string>
|
||||
<string name="action_unblock">Débloquer</string>
|
||||
<string name="action_mute">Masquer</string>
|
||||
<string name="action_no_action">Aucune action</string>
|
||||
<string name="action_unmute">Afficher</string>
|
||||
<string name="request_sent">Demande envoyée</string>
|
||||
<string name="followed_by">Vous suit</string>
|
||||
<string name="set_title_news">News</string>
|
||||
<string name="set_notification_news">Notify for new toots on the home timeline</string>
|
||||
<string name="set_show_error_messages">Display error messages</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_unfollow">Unfollow</string>s
|
||||
<string name="action_block">Block</string>
|
||||
<string name="action_unblock">Unblock</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="action_no_action">No action</string>
|
||||
<string name="action_unmute">Unmute</string>
|
||||
<string name="request_sent">Request sent</string>
|
||||
<string name="followed_by">Follows you</string>
|
||||
|
||||
<string name="action_search">Recherche</string>
|
||||
<string name="action_search">Search</string>
|
||||
|
||||
<!-- CACHE -->
|
||||
<string name="cache_title">Nettoyage du cache</string>
|
||||
<string name="cache_message">Il y a %1$s de données en cache.\n\nSouhaitez-vous les supprimer ?</string>
|
||||
<string name="toast_cache_clear">Le cache a été nettoyé ! %1$s ont été libérés</string>
|
||||
<string name="cache_title">Clear cache</string>
|
||||
<string name="cache_message">There are %1$s data in cache.\n\nWould you like to delete them?</string>
|
||||
<string name="toast_cache_clear">Cache was cleared! %1$s were released</string>
|
||||
|
||||
<!-- PRIVACY -->
|
||||
<string name="privacy_data_title">Données enregistrées</string>
|
||||
<string name="privacy_data_title">Recorded data</string>
|
||||
<string name="privacy_data">
|
||||
Seules les informations de base des comptes connectés sont enregistrées sur l\'appareil.
|
||||
Ces données sont strictement confidentielles et ne sont utilisables que par l\'application. La suppression de l\'application entraîne immédiatement la suppression de ces données.\n
|
||||
⚠ Les identifiants et les mots de passe ne sont jamais enregistrés, ils ne sont utilisés que lors de l\'authentification sécurisée (SSL) vers l\'instance.
|
||||
Only basic information from accounts are stored on the device.
|
||||
These data are strictly confidential and can only be used by the application.
|
||||
Deleting the application immediately removes these data.\n
|
||||
⚠ Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
|
||||
</string>
|
||||
|
||||
<string name="privacy_authorizations_title">Autorisations de l\'application</string>
|
||||
<string name="privacy_authorizations_title">Permissions:</string>
|
||||
<string name="privacy_authorizations">
|
||||
- <b>ACCESS_NETWORK_STATE</b> : Utilisée pour savoir si l\'appareil est connecté au WIFI.\n
|
||||
- <b>INTERNET</b> : Utilisée pour les requêtes vers l\'instance.\n
|
||||
- <b>WRITE_EXTERNAL_STORAGE</b> : Utilisée pour télécharger les médias / déplacer sur la carte SD.\n
|
||||
- <b>READ_EXTERNAL_STORAGE</b> : Utilisée pour ajouter des médias aux pouets.\n
|
||||
- <b>BOOT_COMPLETED</b> : Utilisée pour lancer le service de notifications quand l\'appareil démarre.\n
|
||||
- <b>WAKE_LOCK</b> : Utilisée lors du service de notifications.
|
||||
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
|
||||
- <b>INTERNET</b>: Used for queries to an instance.\n
|
||||
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
|
||||
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
|
||||
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
|
||||
- <b>WAKE_LOCK</b>: Used during the notification service.
|
||||
</string>
|
||||
|
||||
<string name="privacy_API_authorizations_title">Autorisations de l\'API</string>
|
||||
<string name="privacy_API_authorizations_title">API permissions:</string>
|
||||
<string name="privacy_API_authorizations">
|
||||
- <b>Read</b> : Lire les données du compte.\n
|
||||
- <b>Write</b> : Envoyer des messages et attacher des médias aux messages.\n
|
||||
- <b>Follow</b> : S\'abonner, se désabonner, bloquer, débloquer.\n\n
|
||||
<b>⚠ Ces actions ne sont réalisées qu\'à la demande de l\'utilisateur.</b>
|
||||
- <b>Read</b>: Read data.\n
|
||||
- <b>Write</b>: Post statuses and upload media for statuses.\n
|
||||
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
|
||||
<b>⚠ These actions are carried out only when user requests them.</b>
|
||||
</string>
|
||||
<string name="privacy_API_title">Suivi et bibliothèques</string>
|
||||
<string name="privacy_API_title">Tracking and Libraries</string>
|
||||
<string name="privacy_API">
|
||||
L\'application n\'utilise <b>aucun outil de suivi</b> (mesure d\'audience, rapport d\'erreurs, etc.) et elle ne comporte aucune publicité.\n\n
|
||||
L\'utilisation de bibliothèques est réduite au strict minimum :\n
|
||||
- <b>Android Asynchronous Http Client</b> : Pour la gestion des requêtes\n
|
||||
- <b>Universal Image Loader</b> : Pour la gestion des médias\n
|
||||
- <b>Android-Job</b> : Pour la gestion des services\n
|
||||
- <b>PhotoView</b> : Pour la gestion des images
|
||||
The application <b>does not use tracking tools</b> (audience measurement, error reporting, etc.) and does not contain any advertising.\n\n
|
||||
The use of libraries is minimized: \n
|
||||
- <b>Android Asynchronous Http Client</b>: To manage queries\n
|
||||
- <b>Universal Image Loader</b>: To manage media\n
|
||||
- <b>Android-Job</b>: To manage services\n
|
||||
- <b>PhotoView</b>: To manage images
|
||||
</string>
|
||||
</resources>
|
||||
|
||||
<string name="yandex" translatable="false"><a hreh="http://translate.yandex.com/">Powered by Yandex.Translate</a></string>
|
||||
|
||||
<string name="privacy_API_yandex_title">Translation of toots</string>
|
||||
<string name="privacy_API_yandex_authorizations">
|
||||
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
|
||||
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
|
||||
</string>
|
||||
</resources>
|