From 1084a19240439818586cda259d2a89ac8d9b7125 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 4 May 2019 17:44:11 +0000 Subject: [PATCH 01/18] New translations strings.xml (German) --- app/src/main/res/values-de/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 0be21075d..9e1650c46 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -782,7 +782,7 @@ Sobald Sie die ersten Buchstaben eintippen, werden Namensvorschläge angezeigt\n Senden Die Datenbank wurde exportiert! Empfohlene Hashtags - Timeline mit Tags filtern + Zeitleiste mit Schlagwörtern filtern Keine Tags Schaltfläche „Mitteilungen löschen” im Tab „Mitteilungen” ausblenden Metadaten abrufen, wenn die URL von anderen Apps geteilt wird @@ -818,9 +818,9 @@ Sobald Sie die ersten Buchstaben eintippen, werden Namensvorschläge angezeigt\n Es müssen zwei sichtbare Tabs vorhanden sein! Zeitleisten neu ordnen Verwenden Sie den Listeneintrag zum Löschen dieser Liste! - Hauptzeitachsen können nur ausgeblendet werden! + Hauptzeitleisten können nur ausgeblendet werden! BBCode - Zeitachse hinzufügen + Zeitleiste hinzufügen %d Stimme %d Stimmen From 3e03fa8fb2c9c72846917d9533c78bbe63735d86 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 4 May 2019 21:24:54 +0000 Subject: [PATCH 02/18] New translations strings.xml (Dutch) --- app/src/main/res/values-nl/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 060c38705..3130d9bad 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -305,7 +305,7 @@ Geef een melding wanneer jouw toot is geboost Geef een melding wanneer jouw toot als favoriet is gemarkeerd Geef een melding wanneer iemand jou vermeldt - Notify when a poll ended + Geef een melding wanneer een poll is beëindigd Vraag voor het boosten een bevestiging Vraag voor het markeren als favoriet een bevestiging Alleen met Wifi meldingen tonen @@ -576,7 +576,7 @@ Nieuwe boost Nieuwe favoriet Nieuwe vermelding - Poll Ended + Poll is beëindigd Nieuwe toot Toots back-uppen Media downloaden @@ -810,7 +810,7 @@ Je kunt beginnen met typen en er zullen namen gesuggereerd worden.\n\n Stemmen Een poll kan niet aan een direct bericht worden toegevoegd! Een poll waarin je hebt gestemd is beëindigd - A poll you tooted has ended + Een poll die je hebt getoot is beëindigd Aanpassen Categorieën Nieuws @@ -829,7 +829,7 @@ Je kunt beginnen met typen en er zullen namen gesuggereerd worden.\n\n Druk lang op de lijstnaam onder lijsten om deze lijst te verwijderen! Hoofdtijdlijnen kunnen alleen worden verborgen! BBCode - Add a timeline + Tijdlijn toevoegen %d stem %d stemmen From 386e1a508fde25db861eba00d7930d4458d60189 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 4 May 2019 21:35:55 +0000 Subject: [PATCH 03/18] New translations strings.xml (Catalan) --- app/src/main/res/values-ca/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index d71cf2e5d..3b6e2d922 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -305,7 +305,7 @@ Avisa quan algú difongui el teu estatus Avisa quan algú marqui el teu estatus com a preferit Avisa quan algú et mencioni - Notify when a poll ended + Avisar quan una enquesta finalitzi Demana confirmació abans de difondre Demana confirmació abans d\'afegir a preferits Enviar avisos només per WIFI @@ -567,7 +567,7 @@ Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n Nova difusió Nou preferit Nova menció - Poll Ended + Enquesta finalitzada Toot nou Còpia de seguretat de toots Baixada de mèdia @@ -791,7 +791,7 @@ Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n Adjunta una imatge en compartir un URL Enquesta - Polls + Enquestes Crea una enquesta Opció 1 Opció 2 @@ -804,7 +804,7 @@ Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n Vota No es pot adjuntar enquestes a un missatge directe! S\'ha acabat una enquesta en què havies participat - A poll you tooted has ended + Ha finalitzat una enquesta on has votat Personalitza Categories Notícies From d52cdc6e9fd41c0aae5368542016013cd7848fa5 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 4 May 2019 23:47:15 +0000 Subject: [PATCH 04/18] New translations strings.xml (Hungarian) --- app/src/main/res/values-hu/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 7179027b4..3d5c12417 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -305,7 +305,7 @@ Értesíts, amikor valaki megismétli a posztodat Értesíts, ha valaki lájkolja a posztodat Értesíts, amikor valaki megemlít téged - Notify when a poll ended + Értesíts, amikor egy szavazás végetér Kérdezz vissza újratootolás előtt Megerősítés kérése kedvencekhez hozzáadás előtt Értesítés csak WiFi használatakor @@ -573,7 +573,7 @@ A Yandexnek megvan a saját adatvédelmi szabályzata, ami itt található: http Új újratoot Új kedvenc Új említés - Poll Ended + A szavazás véget ért Új toot Tootok elmentése Média letöltése @@ -797,7 +797,7 @@ A Yandexnek megvan a saját adatvédelmi szabályzata, ami itt található: http Kép csatolása URL megosztásakor Szavazás - Polls + Szavazások Szavazás létrehozása 1. lehetőség 2. lehetőség @@ -829,7 +829,7 @@ A Yandexnek megvan a saját adatvédelmi szabályzata, ami itt található: http A lista törléséhez használd a listabejegyzést! A fő idővonalakat csak elrejteni lehet! BBCode - Add a timeline + Idővonal hozzáadása %d szavazat %d szavazat From ad9c18f70ee2497d312779454658449caeaf0a54 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 5 May 2019 01:57:55 +0000 Subject: [PATCH 05/18] New translations strings.xml (Chinese Traditional) --- app/src/main/res/values-zh-rTW/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f3d3a83cd..c7c979302 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -828,7 +828,7 @@ Yandex 有適當的隱私權政策,可以在這裡找到:https://yandex.ru/l 使用清單項目刪除此清單! 主時間軸只能被隱藏! BBCode - Add a timeline + 加入動態時報 %d 人投票 From efc0d7e8ce01f1b483674901a7e0ff29b78a068e Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 5 May 2019 05:35:04 +0000 Subject: [PATCH 06/18] New translations strings.xml (Czech) --- app/src/main/res/values-cs/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 2578b25a7..e55224b49 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -837,7 +837,7 @@ Uživatelské jméno a heslo nejsou nikdy ukládány. Jsou použity pouze během Použijte položky seznamu k odstranění tohoto seznamu! Hlavní časové linie mohou být pouze skryty! BBCode - Add a timeline + Přidat časovou osu %d hlas %d hlasy From a9fc0680e37295c5c54f7ba2d26d20d8b55df370 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 5 May 2019 07:01:17 +0000 Subject: [PATCH 07/18] New translations strings.xml (Norwegian) --- app/src/main/res/values-no/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 8ba81b0c2..18ef69c10 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -820,7 +820,7 @@ Adresser vil bli foreslått når du begynner å skrive.\n\n Bruk listeoppføringen for å slette denne listen! Hovedtidslinjer kan bare skjules! BBCode - Add a timeline + Legg til tidlinje %d stemme %d stemmer From 1d7f401cd951d96acfd0691eb44e91d99bc47fe2 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 5 May 2019 11:35:34 +0200 Subject: [PATCH 08/18] Fix crashes with notification counter --- .../mastodon/activities/BaseMainActivity.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java index 1d575ef36..dc1dd0859 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java @@ -2038,13 +2038,28 @@ public abstract class BaseMainActivity extends BaseActivity } public void updateNotifCounter(){ - if(tabLayout.getTabAt(1) == null) + if( timelines == null) return; - //noinspection ConstantConditions - View tabNotif = tabLayout.getTabAt(1).getCustomView(); + ManageTimelines notifTimeline; + int i = 0; + int position = -1; + for(ManageTimelines tl: timelines){ + if( tl.getType() == ManageTimelines.Type.NOTIFICATION){ + if( tabLayout.getTabAt(i) != null) { + position = i; + } + break; + } + i++; + } + if( position == -1) + return; + View tabNotif = tabLayout.getTabAt(position).getCustomView(); if( tabNotif == null) return; TextView tabCounterNotif = tabNotif.findViewById(R.id.tab_counter); + if( tabCounterNotif == null) + return; tabCounterNotif.setText(String.valueOf(countNewNotifications)); if( countNewNotifications > 0){ tabCounterNotif.setVisibility(View.VISIBLE); From b57831b01bd720b25e2f55d6a7f476ca3959c8db Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 5 May 2019 11:46:52 +0200 Subject: [PATCH 09/18] Fix a null pointer exception --- .../etalab/mastodon/drawers/StatusListAdapter.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index ac84a4a0c..6c26ac1ab 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -1456,12 +1456,13 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct /*if (expand_cw) holder.status_spoiler_button.setVisibility(View.GONE);*/ String contentCheck = ""; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) - contentCheck = Html.fromHtml(status.getReblog() == null?status.getContent():status.getReblog().getContent(), Html.FROM_HTML_MODE_LEGACY).toString(); - else - //noinspection deprecation - contentCheck = Html.fromHtml(status.getReblog() == null?status.getContent():status.getReblog().getContent()).toString(); - + String content = status.getReblog() == null?status.getContent():status.getReblog().getContent(); + if( content != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + contentCheck = Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY).toString(); + else + contentCheck = Html.fromHtml(content).toString(); + } if (status.getReblog() == null) { if (status.getSpoiler_text() != null && status.getSpoiler_text().trim().length() > 0) { holder.status_spoiler_container.setVisibility(View.VISIBLE); From b26866817611849191ffdacc54692b32c2abefb0 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 5 May 2019 12:01:13 +0200 Subject: [PATCH 10/18] Add developer --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9e33bdaed..fcb7b1208 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,8 @@        -Developer: [@tom79](https://mastodon.social/@tom79) +Lead developer: [@tom79](https://mastodon.social/@tom79) +Developer: [@kasun](https://mastodon.social/@kasun) ## Backers From f5dbfe2517a7ec53c23e788d9bd92ff1c1a02b33 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 5 May 2019 12:41:45 +0200 Subject: [PATCH 11/18] Fix issue #918 --- .../mastodon/activities/BaseMainActivity.java | 103 ++++++++++++++++++ .../client/Entities/ManageTimelines.java | 1 - .../mastodon/drawers/StatusListAdapter.java | 11 ++ .../gouv/etalab/mastodon/helper/Helper.java | 2 +- 4 files changed, 115 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java index dc1dd0859..80da12c1f 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java @@ -24,11 +24,14 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.database.sqlite.SQLiteDatabase; +import android.graphics.BitmapFactory; import android.graphics.PorterDuff; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.design.widget.AppBarLayout; @@ -56,6 +59,7 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; +import android.webkit.URLUtil; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; @@ -63,9 +67,28 @@ import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; + +import com.tonyodev.fetch2.Download; +import com.tonyodev.fetch2.Error; +import com.tonyodev.fetch2.Fetch; +import com.tonyodev.fetch2.FetchConfiguration; +import com.tonyodev.fetch2.FetchListener; +import com.tonyodev.fetch2.NetworkType; +import com.tonyodev.fetch2.Priority; +import com.tonyodev.fetch2.Request; +import com.tonyodev.fetch2core.DownloadBlock; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Random; import java.util.regex.Matcher; import es.dmoral.toasty.Toasty; @@ -118,6 +141,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnUpdateAccountInfoInterface; import fr.gouv.etalab.mastodon.services.BackupStatusService; import fr.gouv.etalab.mastodon.services.LiveNotificationService; import fr.gouv.etalab.mastodon.sqlite.AccountDAO; +import fr.gouv.etalab.mastodon.sqlite.DomainBlockDAO; import fr.gouv.etalab.mastodon.sqlite.Sqlite; import fr.gouv.etalab.mastodon.sqlite.TimelinesDAO; @@ -180,6 +204,8 @@ public abstract class BaseMainActivity extends BaseActivity private final int PICK_IMPORT = 5556; private AlertDialog.Builder dialogBuilderOptin; private List timelines; + private FetchConfiguration fetchConfiguration; + private Fetch fetch; public static HashMap mPageReferenceMap = new HashMap<>(); private static boolean notificationChecked = false; @@ -228,6 +254,7 @@ public abstract class BaseMainActivity extends BaseActivity finish(); return; } + initializeDownload(); final int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK); switch (theme){ case Helper.THEME_LIGHT: @@ -2109,7 +2136,83 @@ public abstract class BaseMainActivity extends BaseActivity } } + private void initializeDownload(){ + fetchConfiguration = new FetchConfiguration.Builder(this) + .setDownloadConcurrentLimit(3) + .build(); + fetch = Fetch.Impl.getInstance(fetchConfiguration); + FetchListener fetchListener = new FetchListener() { + @Override + public void onWaitingNetwork(@NotNull Download download) { + } + @Override + public void onStarted(@NotNull Download download, @NotNull List list, int i) { + } + @Override + public void onResumed(@NotNull Download download) { + } + @Override + public void onRemoved(@NotNull Download download) { + } + @Override + public void onQueued(@NotNull Download download, boolean b) { + } + @Override + public void onProgress(@NotNull Download download, long l, long l1) { + } + @Override + public void onPaused(@NotNull Download download) { + } + @Override + public void onError(@NotNull Download download, @NotNull Error error, @Nullable Throwable throwable) { + Toasty.error(getApplicationContext(), getString(R.string.toast_error),Toast.LENGTH_LONG).show(); + } + @Override + public void onDownloadBlockUpdated(@NotNull Download download, @NotNull DownloadBlock downloadBlock, int i) { + } + @Override + public void onDeleted(@NotNull Download download) { + } + @Override + public void onCompleted(@NotNull Download download) { + if( download.getFileUri().getPath() != null) { + String url = download.getUrl(); + final String fileName = URLUtil.guessFileName(url, null, null); + final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + String mime = Helper.getMimeType(url); + File file = new File(download.getFileUri().getPath()); + final Intent intent = new Intent(); + Random r = new Random(); + final int notificationIdTmp = r.nextInt(10000); + intent.setAction(android.content.Intent.ACTION_VIEW); + Uri uri = Uri.parse("file://" + file.getAbsolutePath() ); + intent.setDataAndType(uri, mime); + Helper.notify_user(getApplicationContext(), intent, notificationIdTmp, BitmapFactory.decodeResource(getResources(), + R.mipmap.ic_launcher), Helper.NotifType.STORE, getString(R.string.save_over), getString(R.string.download_from, fileName)); + } + } + @Override + public void onCancelled(@NotNull Download download) { + } + @Override + public void onAdded(@NotNull Download download) { + } + }; + fetch.addListener(fetchListener); + } + + public void download(String file, String url){ + final Request request = new Request(url, file); + request.setPriority(Priority.HIGH); + request.setNetworkType(NetworkType.ALL); + fetch.enqueue(request, updatedRequest -> { + //Request was successfully enqueued for download. + }, error -> { + }); + + + } public boolean getFloatingVisibility(){ diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/ManageTimelines.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/ManageTimelines.java index 70a8a80b3..95ccf63fa 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/ManageTimelines.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/ManageTimelines.java @@ -33,7 +33,6 @@ import android.support.v7.app.AlertDialog; import android.support.v7.widget.PopupMenu; import android.text.Editable; import android.text.TextWatcher; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index 6c26ac1ab..91c6390eb 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -32,6 +32,7 @@ import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.CountDownTimer; +import android.os.Environment; import android.os.Handler; import android.support.annotation.NonNull; import android.support.v4.app.FragmentTransaction; @@ -55,6 +56,7 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.webkit.URLUtil; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; @@ -2915,6 +2917,15 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } } }); + imageView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + String myDir = sharedpreferences.getString(Helper.SET_FOLDER_RECORD, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()); + String fileName = URLUtil.guessFileName(attachment.getUrl(), null, null); + ((MainActivity)context).download(myDir+"/"+fileName, attachment.getUrl()); + return true; + } + }); i++; position++; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java index 70ef31007..3bc6dc49a 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/Helper.java @@ -969,7 +969,7 @@ public class Helper { alert.show(); } - private static String getMimeType(String url) { + public static String getMimeType(String url) { String type = null; String extension = MimeTypeMap.getFileExtensionFromUrl(url); if (extension != null) { From 26a114158a9dc2ac045d96369ea5de477fa70735 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sun, 5 May 2019 12:25:58 +0000 Subject: [PATCH 12/18] New translations strings.xml (Hungarian) --- app/src/main/res/values-hu/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 3d5c12417..9b043d6c6 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -810,7 +810,7 @@ A Yandexnek megvan a saját adatvédelmi szabályzata, ami itt található: http Szavazás Közvetlen üzenethez nem csatolhatsz szavazást! Véget ért egy szavazás, amiben részt vettél - A poll you tooted has ended + Véget ért egy szavazás, amiben részt vettél Testreszabás Kategóriák Hírek From c3847398dfc72af81a635e9fe1b4e99a17b80d5e Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 5 May 2019 16:53:35 +0200 Subject: [PATCH 13/18] Fix issue #919 - Long press on the fetch more button to retrieve all missing toots --- .../mastodon/drawers/StatusListAdapter.java | 28 ++++++++++++++++++- .../fragments/DisplayStatusFragment.java | 11 ++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index 91c6390eb..044cb0657 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -182,7 +182,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct private boolean redraft; private Status toot; private TagTimeline tagTimeline; - + public static boolean fetch_all_more = false; public StatusListAdapter(Context context, RetrieveFeedsAsyncTask.Type type, String targetedId, boolean isOnWifi, List statuses){ super(); this.context = context; @@ -220,6 +220,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct redraft = false; } + public void updateMuted(List timedMute){ this.timedMute = timedMute; } @@ -1340,6 +1341,31 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct } } }); + holder.fetch_more.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + status.setFetchMore(false); + holder.fetch_more.setEnabled(false); + holder.fetch_more.setVisibility(View.GONE); + if( context instanceof BaseMainActivity) { + SQLiteDatabase db = Sqlite.getInstance(context, DB_NAME, null, Sqlite.DB_VERSION).open(); + List timelines = new TimelinesDAO(context, db).getDisplayedTimelines(); + for(ManageTimelines tl: timelines) { + if( tl.getType() == ManageTimelines.Type.HOME) { + DisplayStatusFragment homeFragment = (DisplayStatusFragment) mPageReferenceMap.get(tl.getPosition()); + if (homeFragment != null) { + fetch_all_more = true; + homeFragment.fetchMore(status.getId()); + } + break; + } + } + }else{ + Toasty.error(context, context.getString(R.string.toast_error), Toast.LENGTH_LONG).show(); + } + return false; + } + }); } else { holder.fetch_more.setVisibility(View.GONE); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java index 81327af0a..f6f70b448 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/fragments/DisplayStatusFragment.java @@ -975,9 +975,16 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn //Display the fetch more toot button if( tmpStatuses.size() >= tootPerPage) { if (initialBookMarkDate != null && !fetchMoreButtonDisplayed && tmpStatuses.size() > 0 && tmpStatuses.get(tmpStatuses.size() - 1).getCreated_at().after(initialBookMarkDate)) { - tmpStatuses.get(tmpStatuses.size() - 1).setFetchMore(true); - fetchMoreButtonDisplayed = true; + if( StatusListAdapter.fetch_all_more && statuses.size() > 0){ + fetchMore(tmpStatuses.get(tmpStatuses.size() - 1).getId()); + }else{ + fetchMoreButtonDisplayed = true; + tmpStatuses.get(tmpStatuses.size() - 1).setFetchMore(true); + StatusListAdapter.fetch_all_more = false; + } } + }else{ + StatusListAdapter.fetch_all_more = false; } this.statuses.addAll(position, tmpStatuses); boolean display_content_after_fetch_more = sharedpreferences.getBoolean(Helper.SET_DISPLAY_CONTENT_AFTER_FM, true); From c7a3ad91fe10d43031bc9310101c9c796a75d679 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 5 May 2019 17:11:23 +0200 Subject: [PATCH 14/18] Fix file name issue when uploading --- .../etalab/mastodon/helper/FileNameCleaner.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/FileNameCleaner.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/FileNameCleaner.java index a6c46d343..e390413f4 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/helper/FileNameCleaner.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/FileNameCleaner.java @@ -3,22 +3,25 @@ package fr.gouv.etalab.mastodon.helper; import java.util.Arrays; /** - * Work from https://stackoverflow.com/a/5626340 + * Work from https://stackoverflow.com/a/26420820 */ -public class FileNameCleaner { +public class FileNameCleaner { private final static int[] illegalChars = {34, 60, 62, 124, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 58, 42, 63, 92, 47}; + static { Arrays.sort(illegalChars); } + public static String cleanFileName(String badFileName) { StringBuilder cleanName = new StringBuilder(); - for (int i = 0; i < badFileName.length(); i++) { - int c = (int)badFileName.charAt(i); + int len = badFileName.codePointCount(0, badFileName.length()); + for (int i=0; i Date: Sun, 5 May 2019 17:26:30 +0200 Subject: [PATCH 15/18] Affect polls --- .../mastodon/drawers/StatusListAdapter.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index 044cb0657..edb66b50b 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -554,15 +554,13 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct holder.multiple_choice.setVisibility(View.GONE); holder.single_choice.setVisibility(View.GONE); holder.submit_vote.setVisibility(View.GONE); - if( (status.getPoll() != null && status.getPoll().getOptionsList() != null) - || (status.getReblog() != null && status.getReblog().getPoll() != null && status.getReblog().getPoll().getOptionsList() != null) - ){ - Poll poll; - if( status.getReblog() != null) { - poll = status.getReblog().getPoll(); - }else { - poll = status.getPoll(); - } + Poll poll; + if( status.getReblog() != null) { + poll = status.getReblog().getPoll(); + }else { + poll = status.getPoll(); + } + if( poll != null && poll.getOptionsList() != null){ if( poll.isVoted() || poll.isExpired()){ holder.rated.setVisibility(View.VISIBLE); List items = new ArrayList<>(); From e9db8a46556f3dba5af4510cc8b84b420e2f0c79 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 5 May 2019 17:28:19 +0200 Subject: [PATCH 16/18] Fix vote on polls from a reblog. --- .../fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java index edb66b50b..26673c3d5 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java @@ -253,7 +253,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct @Override public void onPoll(Status status, Poll poll) { - status.setPoll(poll); + if( status.getReblog() != null){ + status.getReblog().setPoll(poll); + }else{ + status.setPoll(poll); + } notifyStatusChanged(status); } From f06052e1b0c61c8894f184a9941be2cbaafd0119 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 5 May 2019 17:58:28 +0200 Subject: [PATCH 17/18] Allow to favorite a Peertube video --- .../mastodon/activities/PeertubeActivity.java | 24 +++++++++++++++++++ .../asynctasks/PostActionAsyncTask.java | 1 + .../fr/gouv/etalab/mastodon/client/API.java | 1 + 3 files changed, 26 insertions(+) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/PeertubeActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/PeertubeActivity.java index 04fb25e19..5b405f54d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/PeertubeActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/PeertubeActivity.java @@ -93,6 +93,7 @@ import fr.gouv.etalab.mastodon.client.Entities.Results; import fr.gouv.etalab.mastodon.client.Entities.Status; import fr.gouv.etalab.mastodon.client.TLSSocketFactory; import fr.gouv.etalab.mastodon.drawers.StatusListAdapter; +import fr.gouv.etalab.mastodon.helper.CrossActions; import fr.gouv.etalab.mastodon.helper.FullScreenMediaController; import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface; @@ -522,6 +523,29 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube changeColor(); } }); + }else{ + peertube_like_count.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String newState = peertube.getMyRating().equals("like")?"none":"like"; + Status status = new Status(); + status.setUri("https://" + peertube.getAccount().getHost() + "/videos/watch/" + peertube.getUuid()); + CrossActions.doCrossAction(getApplicationContext(), RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE, status, null, API.StatusAction.FAVOURITE, null, PeertubeActivity.this, true); + peertube.setMyRating(newState); + changeColor(); + } + }); + peertube_dislike_count.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String newState = peertube.getMyRating().equals("dislike")?"none":"dislike"; + Status status = new Status(); + status.setUri("https://" + peertube.getAccount().getHost() + "/videos/watch/" + peertube.getUuid()); + CrossActions.doCrossAction(getApplicationContext(), RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE, status, null, API.StatusAction.UNFAVOURITE, null, PeertubeActivity.this, true); + peertube.setMyRating(newState); + changeColor(); + } + }); } try { diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostActionAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostActionAsyncTask.java index 5e18f1389..dece428c4 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostActionAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/PostActionAsyncTask.java @@ -129,6 +129,7 @@ public class PostActionAsyncTask extends AsyncTask { api = new API(contextReference.get()); if (remoteStatus != null) { String uri; + if (remoteStatus.getReblog() != null) { if (remoteStatus.getReblog().getUri().startsWith("http")) uri = remoteStatus.getReblog().getUri(); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java index 880dbbedf..3a9289366 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/API.java @@ -21,6 +21,7 @@ import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; + import com.google.gson.JsonArray; import com.google.gson.JsonObject; From 643cb78d55459dfc69f381b0509cefbb903a9ceb Mon Sep 17 00:00:00 2001 From: tom79 Date: Sun, 5 May 2019 18:50:57 +0200 Subject: [PATCH 18/18] Prepare release 1.80.3 --- app/build.gradle | 4 ++-- fastlane/metadata/android/en-US/changelogs/260.txt | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/260.txt diff --git a/app/build.gradle b/app/build.gradle index 01adbdcde..1ecab51d6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "fr.gouv.etalab.mastodon" minSdkVersion 16 targetSdkVersion 28 - versionCode 259 - versionName "1.80.2" + versionCode 260 + versionName "1.80.3" multiDexEnabled true } dexOptions { diff --git a/fastlane/metadata/android/en-US/changelogs/260.txt b/fastlane/metadata/android/en-US/changelogs/260.txt new file mode 100644 index 000000000..e761c5736 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/260.txt @@ -0,0 +1,9 @@ +Added +* Long press on "Fetch more" will retrieve all missing statuses +* Long press on media in timelines will download them in full resolution +* Favourite video from Peertube when following an instance + +Fixed +* Crashes when notifications timeline has been moved +* Media not uploaded when the filename contains some special characters +* Fix vote issue on reblogs \ No newline at end of file