From c5a8adca511868326d555c6e1d45a3aa9d5d1eb7 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sat, 27 Jul 2019 18:34:48 +0200 Subject: [PATCH] Fix crashes --- .../android/activities/TootActivity.java | 2 +- .../java/app/fedilab/android/client/API.java | 4 -- .../android/drawers/StatusListAdapter.java | 3 +- .../app/fedilab/android/helper/Helper.java | 66 +++++++++++-------- 4 files changed, 42 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/TootActivity.java b/app/src/main/java/app/fedilab/android/activities/TootActivity.java index 49405bb7e..c2f4f16e7 100644 --- a/app/src/main/java/app/fedilab/android/activities/TootActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/TootActivity.java @@ -2574,7 +2574,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, int cwSize = toot_cw_content.getText().toString().trim().length(); int size = toot_content.getText().toString().trim().length() + cwSize; - if( split_toot && splitToot != null && (size >= split_toot_size) && stepSpliToot < splitToot.size()){ + if( split_toot && splitToot != null && stepSpliToot < splitToot.size()){ String tootContent = splitToot.get(stepSpliToot); stepSpliToot += 1; Status toot = new Status(); diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index f81e114d6..6ab3ad0e5 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -19,7 +19,6 @@ import android.content.Intent; import android.content.SharedPreferences; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; -import android.util.Log; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -4789,7 +4788,6 @@ public class API { status.setVisibility(resobj.get("visibility").toString()); }catch (Exception e){status.setVisibility("public"); e.printStackTrace();} status.setUrl("https://" + instance + "/notes/" + resobj.get("id").toString()); - Log.v(Helper.TAG,"ici: " + resobj); //Retrieves attachments if( resobj.has("media")) { JSONArray arrayAttachement = resobj.getJSONArray("media"); @@ -5642,7 +5640,6 @@ public class API { private static Account parseMisskeyAccountResponse(Context context, String instance, JSONObject resobj){ Account account = new Account(); - Log.v(Helper.TAG,"account: " + resobj); try { account.setId(resobj.get("id").toString()); account.setUsername(resobj.get("username").toString()); @@ -5679,7 +5676,6 @@ public class API { } } account.setEmojis(emojiList); - Log.v(Helper.TAG,"accountxx: " + account); } catch (JSONException ignored) {ignored.printStackTrace();} return account; } diff --git a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java index 696a67fe4..15fb4248c 100644 --- a/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/StatusListAdapter.java @@ -52,7 +52,6 @@ import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.text.style.ForegroundColorSpan; import android.text.style.URLSpan; -import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.MenuItem; @@ -519,7 +518,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct int cwSize = toot_cw_content.getText().toString().trim().length(); int size = toot_content.getText().toString().trim().length() + cwSize; - if( split_toot && splitToot != null && (size >= split_toot_size) && stepSpliToot < splitToot.size()){ + if( split_toot && splitToot != null && stepSpliToot < splitToot.size()){ String tootContent = splitToot.get(stepSpliToot); stepSpliToot += 1; Status toot = new Status(); diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index d3c723652..001877a35 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -3429,55 +3429,69 @@ public class Helper { */ public static ArrayList splitToots(String content, int maxChars){ String[] splitContent = content.split("\\s"); - ArrayList splitToot = new ArrayList<>(); - StringBuilder tempContent = new StringBuilder(splitContent[0]); + + ArrayList mentions = new ArrayList<>(); Matcher matcher = mentionLongPattern.matcher(content); while (matcher.find()) { String mentionLong = matcher.group(1); mentions.add(mentionLong); } - matcher = mentionPattern.matcher(content); + matcher = mentionLongPattern.matcher(content); while (matcher.find()) { String mentionLong = matcher.group(1); - mentions.add(mentionLong); + if( !mentions.contains(mentionLong)) { + mentions.add(mentionLong); + } + } + matcher = mentionPattern.matcher(content); + while (matcher.find()) { + String mention = matcher.group(1); + if( !mentions.contains(mention)) { + mentions.add(mention); + } } StringBuilder mentionString = new StringBuilder(); for(String mention: mentions){ mentionString.append(mention).append(" "); } - int mentionLength = mentionString.length(); - int maxCharsMention = maxChars - mentionLength; - for(int i= 0 ; i < splitContent.length ; i++){ - if (i < (splitContent.length - 1) && (countLength(tempContent.toString()) + countLength(splitContent[i + 1])) < (maxChars - 10)) { - tempContent.append(" ").append(splitContent[i + 1]); + int mentionLength = mentionString.length()+1; + int maxCharsPerMessage = (maxChars-10) - mentionLength; + int totalCurrent = 0; + ArrayList reply = new ArrayList<>(); + int index = 0; + for(int i= 0 ; i < splitContent.length ; i++) { + if ((totalCurrent + splitContent[i].length()+1) < maxCharsPerMessage) { + totalCurrent += (splitContent[i].length()+1); } else { - splitToot.add(tempContent.toString()); - if (i < (splitContent.length - 1)) { - if( maxCharsMention > 0){ - maxChars = maxCharsMention; - tempContent = new StringBuilder(mentionString+splitContent[i + 1]); - }else{ - tempContent = new StringBuilder(splitContent[i + 1]); - } + if (content.length() > totalCurrent && totalCurrent > 0) { + String tempContent = content.substring(0, (totalCurrent-1)); + content = content.substring(totalCurrent); + + reply.add(index, tempContent); + index++; + totalCurrent = 0; } } } - int i=1; - ArrayList reply = new ArrayList<>(); - for(String newContent : splitToot){ - if( splitToot.size() > 1 ) { - reply.add((i - 1), newContent + " - " + i + "/" + splitToot.size()); - }else{ - reply.add((i - 1), newContent); + if( totalCurrent > 0 ){ + reply.add(index, content); + } + if( reply.size() > 1 ){ + int i = 0; + for(String r: reply){ + if( mentions.size() > 0 ){ + reply.set(i, r + " " + mentionString + " - " + (i+1) + "/" + reply.size()); + }else{ + reply.set(i, r + " - " + (i+1) + "/" + reply.size()); + } + i++; } - i++; } return reply; } - public static int countLength(String text){ if( text == null) { return 0;