From 1e42bd353f97259fcc68bb6464fd7d35d366cd53 Mon Sep 17 00:00:00 2001 From: tom79 Date: Thu, 18 Jul 2019 11:12:52 +0200 Subject: [PATCH] Fix some crashes --- .../android/activities/TootActivity.java | 68 ++++++++++--------- .../UpdateAccountInfoAsyncTask.java | 10 +-- .../java/app/fedilab/android/client/API.java | 17 ++++- .../android/client/Entities/Status.java | 2 +- 4 files changed, 57 insertions(+), 40 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 febaceee2..c910223bc 100644 --- a/app/src/main/java/app/fedilab/android/activities/TootActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/TootActivity.java @@ -1265,7 +1265,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, if( error != null){ return; } - if( relationship.isBlocked_by() ){ + if( relationship != null && relationship.isBlocked_by() ){ warning_message.setVisibility(View.VISIBLE); } @@ -2462,40 +2462,42 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, toot_content.setAdapter(emojisSearchAdapter); final String oldContent = toot_content.getText().toString(); String[] searchA = oldContent.substring(0,currentCursorPosition).split(":"); - final String search = searchA[searchA.length-1]; - toot_content.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - String shortcode = emojis.get(position).getShortcode(); - String deltaSearch = ""; - int searchLength = 15; - if (currentCursorPosition < 15) { //Less than 15 characters are written before the cursor position - searchLength = currentCursorPosition; - } - if( currentCursorPosition-searchLength > 0 && currentCursorPosition < oldContent.length() ) - deltaSearch = oldContent.substring(currentCursorPosition-searchLength, currentCursorPosition); - else { - if( currentCursorPosition >= oldContent.length() ) - deltaSearch = oldContent.substring(currentCursorPosition-searchLength, oldContent.length()); - } + if( searchA.length > 0 ) { + final String search = searchA[searchA.length - 1]; + toot_content.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + String shortcode = emojis.get(position).getShortcode(); + String deltaSearch = ""; + int searchLength = 15; + if (currentCursorPosition < 15) { //Less than 15 characters are written before the cursor position + searchLength = currentCursorPosition; + } + if (currentCursorPosition - searchLength > 0 && currentCursorPosition < oldContent.length()) + deltaSearch = oldContent.substring(currentCursorPosition - searchLength, currentCursorPosition); + else { + if (currentCursorPosition >= oldContent.length()) + deltaSearch = oldContent.substring(currentCursorPosition - searchLength, oldContent.length()); + } - if( !search.equals("")) - deltaSearch = deltaSearch.replace(":"+search,""); - String newContent = oldContent.substring(0,currentCursorPosition-searchLength); - newContent += deltaSearch; - newContent += ":" + shortcode + ": "; - int newPosition = newContent.length(); - if( currentCursorPosition < oldContent.length() ) - newContent += oldContent.substring(currentCursorPosition, oldContent.length()-1); - toot_content.setText(newContent); - toot_space_left.setText(String.valueOf(countLength(toot_content, toot_cw_content))); - toot_content.setSelection(newPosition); - EmojisSearchAdapter emojisSearchAdapter = new EmojisSearchAdapter(TootActivity.this, new ArrayList<>()); - toot_content.setThreshold(1); - toot_content.setAdapter(emojisSearchAdapter); + if (!search.equals("")) + deltaSearch = deltaSearch.replace(":" + search, ""); + String newContent = oldContent.substring(0, currentCursorPosition - searchLength); + newContent += deltaSearch; + newContent += ":" + shortcode + ": "; + int newPosition = newContent.length(); + if (currentCursorPosition < oldContent.length()) + newContent += oldContent.substring(currentCursorPosition, oldContent.length() - 1); + toot_content.setText(newContent); + toot_space_left.setText(String.valueOf(countLength(toot_content, toot_cw_content))); + toot_content.setSelection(newPosition); + EmojisSearchAdapter emojisSearchAdapter = new EmojisSearchAdapter(TootActivity.this, new ArrayList<>()); + toot_content.setThreshold(1); + toot_content.setAdapter(emojisSearchAdapter); - } - }); + } + }); + } } } diff --git a/app/src/main/java/app/fedilab/android/asynctasks/UpdateAccountInfoAsyncTask.java b/app/src/main/java/app/fedilab/android/asynctasks/UpdateAccountInfoAsyncTask.java index 72d51e2a7..28505c204 100644 --- a/app/src/main/java/app/fedilab/android/asynctasks/UpdateAccountInfoAsyncTask.java +++ b/app/src/main/java/app/fedilab/android/asynctasks/UpdateAccountInfoAsyncTask.java @@ -114,10 +114,12 @@ public class UpdateAccountInfoAsyncTask extends AsyncTask { @Override protected void onPostExecute(Void result) { - Intent mainActivity = new Intent(this.contextReference.get(), MainActivity.class); - mainActivity.putExtra(Helper.INTENT_ACTION, Helper.ADD_USER_INTENT); - this.contextReference.get().startActivity(mainActivity); - ((Activity) this.contextReference.get()).finish(); + if( this.contextReference.get() != null) { + Intent mainActivity = new Intent(this.contextReference.get(), MainActivity.class); + mainActivity.putExtra(Helper.INTENT_ACTION, Helper.ADD_USER_INTENT); + this.contextReference.get().startActivity(mainActivity); + ((Activity) this.contextReference.get()).finish(); + } } 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 638f9a167..652ab175f 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -22,6 +22,7 @@ import android.os.Bundle; import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.room.util.StringUtil; import com.google.gson.JsonArray; import com.google.gson.JsonObject; @@ -297,6 +298,13 @@ public class API { }else if( MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA) { url_action = Helper.instanceWithProtocol(this.context, this.instance) + "/api/pleroma" + endpoint; } + if( url_action == null){ + apiResponse = new APIResponse(); + APIError = new Error(); + APIError.setError(context.getString(R.string.toast_error)); + apiResponse.setError(APIError); + return apiResponse; + } try { String response = new HttpsConnection(context, this.instance).get(url_action, 10, params, prefKeyOauthTokenT); if( MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA){ @@ -1619,8 +1627,13 @@ public class API { String response = httpsConnection.get("https://"+remoteInstance+"/api/statuses/public_timeline.json", 10, params, prefKeyOauthTokenT); statuses = GNUAPI.parseStatuses(context, new JSONArray(response)); if( statuses.size() > 0) { - apiResponse.setSince_id(String.valueOf(Long.parseLong(statuses.get(0).getId())+1)); - apiResponse.setMax_id(String.valueOf(Long.parseLong(statuses.get(statuses.size() - 1).getId())-1)); + if(statuses.get(0).getId() != null && statuses.get(0).getId().matches("-?\\d+(\\.\\d+)?")) { + apiResponse.setSince_id(String.valueOf(Long.parseLong(statuses.get(0).getId()) + 1)); + apiResponse.setMax_id(String.valueOf(Long.parseLong(statuses.get(statuses.size() - 1).getId()) - 1)); + }else{ + apiResponse.setSince_id(statuses.get(0).getId()); + apiResponse.setMax_id(statuses.get(statuses.size() - 1).getId()); + } } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Status.java b/app/src/main/java/app/fedilab/android/client/Entities/Status.java index b93578fda..1db1f8a9e 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Status.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Status.java @@ -602,7 +602,7 @@ public class Status implements Parcelable{ urlText += "|"+count; count++; } - content = content.replaceFirst(Pattern.quote(beforemodification), urlText); + content = content.replaceFirst(Pattern.quote(beforemodification), Matcher.quoteReplacement(urlText)); } } spannableStringContent = new SpannableString(content);