From 4cdc5d3c26d7cc69f1ee18160624c6e0110a6b53 Mon Sep 17 00:00:00 2001 From: stom79 Date: Thu, 23 Nov 2017 19:35:48 +0100 Subject: [PATCH 1/5] app-safetynet-release-1.6.2-beta-1.apk --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1e56bb56d..76e4f7d65 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "fr.gouv.etalab.mastodon" minSdkVersion 15 targetSdkVersion 27 - versionCode 77 - versionName "1.6.1" + versionCode 78 + versionName "1.6.2-beta-1" } flavorDimensions "default" buildTypes { From 9686e62a1afe6ad3e240d51fa7b78b06cd95684c Mon Sep 17 00:00:00 2001 From: stom79 Date: Fri, 24 Nov 2017 06:49:43 +0100 Subject: [PATCH 2/5] app-safetynet-release-1.6.2-beta-1.apk --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7eabbbe89..7a30bb9f0 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,3 @@ /build /captures .externalNativeBuild -/crowdin.properties From 6efbf03addd2689350c7e39432ac03ed3326dd18 Mon Sep 17 00:00:00 2001 From: stom79 Date: Fri, 24 Nov 2017 07:13:30 +0100 Subject: [PATCH 3/5] Retrieves custom emoji automatically --- .../UpdateAccountInfoAsyncTask.java | 5 ++ .../UpdateAccountInfoByIDAsyncTask.java | 12 ++++ .../fr/gouv/etalab/mastodon/client/API.java | 71 +++++++++++++++++-- .../etalab/mastodon/client/APIResponse.java | 9 +++ .../gouv/etalab/mastodon/helper/Helper.java | 25 ------- .../mastodon/sqlite/CustomEmojiDAO.java | 8 +++ 6 files changed, 101 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java index 178572202..7ebfb5d86 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoAsyncTask.java @@ -20,13 +20,17 @@ import android.content.Intent; import android.content.SharedPreferences; import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; +import android.util.Log; import java.lang.ref.WeakReference; import fr.gouv.etalab.mastodon.activities.MainActivity; import fr.gouv.etalab.mastodon.client.API; +import fr.gouv.etalab.mastodon.client.APIResponse; import fr.gouv.etalab.mastodon.client.Entities.Account; +import fr.gouv.etalab.mastodon.client.Entities.Emojis; import fr.gouv.etalab.mastodon.helper.Helper; +import fr.gouv.etalab.mastodon.sqlite.CustomEmojiDAO; import fr.gouv.etalab.mastodon.sqlite.Sqlite; import fr.gouv.etalab.mastodon.sqlite.AccountDAO; @@ -68,6 +72,7 @@ public class UpdateAccountInfoAsyncTask extends AsyncTask { if( account.getUsername() != null && account.getCreated_at() != null) new AccountDAO(this.contextReference.get(), db).insertAccount(account); } + return null; } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoByIDAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoByIDAsyncTask.java index 8374d155d..81b373fae 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoByIDAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/UpdateAccountInfoByIDAsyncTask.java @@ -22,10 +22,13 @@ import android.os.AsyncTask; import java.lang.ref.WeakReference; import fr.gouv.etalab.mastodon.client.API; +import fr.gouv.etalab.mastodon.client.APIResponse; import fr.gouv.etalab.mastodon.client.Entities.Account; +import fr.gouv.etalab.mastodon.client.Entities.Emojis; import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.interfaces.OnUpdateAccountInfoInterface; import fr.gouv.etalab.mastodon.sqlite.AccountDAO; +import fr.gouv.etalab.mastodon.sqlite.CustomEmojiDAO; import fr.gouv.etalab.mastodon.sqlite.Sqlite; /** @@ -60,6 +63,15 @@ public class UpdateAccountInfoByIDAsyncTask extends AsyncTask new AccountDAO(this.contextReference.get(), db).updateAccount(account); } } + try { + APIResponse response = new API(contextReference.get()).getCustomEmoji(); + if( response != null && response.getEmojis() != null && response.getEmojis().size() > 0){ + new CustomEmojiDAO(contextReference.get(), db).removeAll(); + for(Emojis emojis: response.getEmojis()){ + new CustomEmojiDAO(contextReference.get(), db).insertEmoji(emojis); + } + } + }catch (Exception ignored){} return null; } 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 599720af9..11f6c99a1 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 @@ -1110,6 +1110,31 @@ public class API { return apiResponse; } + + + /** + * Retrieves Accounts when searching (ie: via @...) *synchronously* + * + * @return APIResponse + */ + public APIResponse getCustomEmoji() { + List emojis = new ArrayList<>(); + try { + HttpsConnection httpsConnection = new HttpsConnection(); + String response = httpsConnection.get(getAbsoluteUrl("/custom_emojis"), 60, null, prefKeyOauthTokenT); + emojis = parseEmojis(new JSONArray(response)); + apiResponse.setSince_id(httpsConnection.getSince_id()); + apiResponse.setMax_id(httpsConnection.getMax_id()); + + } catch (HttpsConnection.HttpsConnectionException e) { + setError(e.getStatusCode(), e); + }catch (Exception e) { + e.printStackTrace(); + } + apiResponse.setEmojis(emojis); + return apiResponse; + } + /** * Parse json response an unique account * @param resobj JSONObject @@ -1242,10 +1267,7 @@ public class API { if( arrayTag != null){ for(int j = 0 ; j < emojisTag.length() ; j++){ JSONObject emojisObj = emojisTag.getJSONObject(j); - Emojis emojis = new Emojis(); - emojis.setShortcode(emojisObj.get("shortcode").toString()); - emojis.setStatic_url(emojisObj.get("static_url").toString()); - emojis.setUrl(emojisObj.get("url").toString()); + Emojis emojis = parseEmojis(emojisObj); emojiList.add(emojis); } } @@ -1303,6 +1325,47 @@ public class API { return instance; } + + + /** + * Parse emojis + * @param jsonArray JSONArray + * @return List of emojis + */ + private List parseEmojis(JSONArray jsonArray){ + List emojis = new ArrayList<>(); + try { + int i = 0; + while (i < jsonArray.length() ) { + JSONObject resobj = jsonArray.getJSONObject(i); + Emojis emojis1 = parseEmojis(resobj); + emojis.add(emojis1); + i++; + } + } catch (JSONException e) { + e.printStackTrace(); + } + return emojis; + } + + + /** + * Parse json response for emoji + * @param resobj JSONObject + * @return Emojis + */ + private static Emojis parseEmojis(JSONObject resobj){ + Emojis emojis = new Emojis(); + try { + emojis.setShortcode(resobj.get("shortcode").toString()); + emojis.setStatic_url(resobj.get("static_url").toString()); + emojis.setUrl(resobj.get("url").toString()); + }catch (Exception e){ + e.printStackTrace(); + } + return emojis; + } + /** * Parse json response an unique account * @param resobj JSONObject diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/APIResponse.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/APIResponse.java index c2c06d5ef..6c5141230 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/APIResponse.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/APIResponse.java @@ -30,6 +30,7 @@ public class APIResponse { private List contexts = null; private List notifications = null; private List relationships = null; + private List emojis = null; private fr.gouv.etalab.mastodon.client.Entities.Error error = null; private String since_id, max_id; private Instance instance; @@ -105,4 +106,12 @@ public class APIResponse { public void setRelationships(List relationships) { this.relationships = relationships; } + + public List getEmojis() { + return emojis; + } + + public void setEmojis(List emojis) { + this.emojis = emojis; + } } 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 92bb09b84..f7e980f70 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 @@ -139,7 +139,6 @@ import fr.gouv.etalab.mastodon.client.Entities.Status; import fr.gouv.etalab.mastodon.client.PatchBaseImageDownloader; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveEmojiInterface; import fr.gouv.etalab.mastodon.sqlite.AccountDAO; -import fr.gouv.etalab.mastodon.sqlite.CustomEmojiDAO; import fr.gouv.etalab.mastodon.sqlite.Sqlite; import static android.content.Context.DOWNLOAD_SERVICE; @@ -1236,15 +1235,6 @@ public class Helper { .cacheOnDisk(true).resetViewBeforeLoading(true).build(); imageLoader = ImageLoader.getInstance(); for (final Emojis emoji : emojis) { - boolean sameInstance; - if( instance != null) { - if (status.getReblog() == null) - sameInstance = status.getUri().contains(instance); - else - sameInstance = status.getReblog().getUri().contains(instance); - if (sameInstance) - storeEmoji(context, db, emoji); - } NonViewAware imageAware = new NonViewAware(new ImageSize(50, 50), ViewScaleType.CROP); imageLoader.displayImage(emoji.getUrl(), imageAware, options, new SimpleImageLoadingListener() { @Override @@ -1334,21 +1324,6 @@ public class Helper { return spannableString; } - /** - * Manage custom emoji to store or update them - * @param context Context - * @param db SQLiteDatabase - * @param emojis Emojis - */ - private static void storeEmoji(Context context, SQLiteDatabase db, Emojis emojis){ - try{ - Emojis emoji_ = new CustomEmojiDAO(context, db).getEmoji(emojis.getShortcode()); - if( emoji_ == null) - new CustomEmojiDAO(context, db).insertEmoji(emojis); - else - new CustomEmojiDAO(context, db).updateEmoji(emojis); - }catch (Exception ignored){} - } /** * Check if the account bio contents urls & tags and fills the content with ClickableSpan diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/CustomEmojiDAO.java b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/CustomEmojiDAO.java index 4066d1e41..061801334 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/CustomEmojiDAO.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/sqlite/CustomEmojiDAO.java @@ -92,6 +92,14 @@ public class CustomEmojiDAO { return db.delete(Sqlite.TABLE_CUSTOM_EMOJI, Sqlite.COL_SHORTCODE + " = \"" + emoji.getShortcode() + "\" AND " + Sqlite.COL_INSTANCE + " = \"" + instance+ "\"", null); } + /*** + * Remove emoji by id + */ + public void removeAll(){ + String instance = Helper.getLiveInstance(context); + db.delete(Sqlite.TABLE_CUSTOM_EMOJI, Sqlite.COL_INSTANCE + " = \"" + instance + "\"", null); + } + //------- GETTERS ------- /** From 0cb3a6bc645939f8a3d627abfc40cc09594aa307 Mon Sep 17 00:00:00 2001 From: stom79 Date: Fri, 24 Nov 2017 07:25:04 +0100 Subject: [PATCH 4/5] Display icon only if custom emoji --- .../fr/gouv/etalab/mastodon/activities/TootActivity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java index 92c4184ff..683af30b3 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/TootActivity.java @@ -1088,7 +1088,10 @@ public class TootActivity extends AppCompatActivity implements OnRetrieveSearcAc Version currentVersion = new Version(instanceVersion); Version minVersion = new Version("2.0"); MenuItem itemEmoji = menu.findItem(R.id.action_emoji); - if (currentVersion.compareTo(minVersion) == 1 || currentVersion.equals(minVersion)) { + SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); + final List emojis = new CustomEmojiDAO(getApplicationContext(), db).getAllEmojis(); + //Displays button only if custom emojis + if (emojis != null && emojis.size() > 0 && (currentVersion.compareTo(minVersion) == 1 || currentVersion.equals(minVersion))) { itemEmoji.setVisible(true); }else{ itemEmoji.setVisible(false); From 5fd84efc6b9e7d5d89bba06abe131672108ff323 Mon Sep 17 00:00:00 2001 From: stom79 Date: Fri, 24 Nov 2017 14:34:06 +0100 Subject: [PATCH 5/5] Removes case sensitive --- .../java/fr/gouv/etalab/mastodon/drawers/StatusListAdapter.java | 2 +- 1 file changed, 1 insertion(+), 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 703027771..8db788627 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 @@ -291,7 +291,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct filter = sharedpreferences.getString(Helper.SET_FILTER_REGEX_PUBLIC, null); if( filter != null && filter.length() > 0){ - Pattern filterPattern = Pattern.compile("(" + filter + ")"); + Pattern filterPattern = Pattern.compile("(" + filter + ")", Pattern.CASE_INSENSITIVE); String content; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) content = Html.fromHtml(status.getContent(), Html.FROM_HTML_MODE_LEGACY).toString();