From caa619fb9022a9c77eb16a54fbce33acd77e7b76 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 19 Jun 2020 17:17:17 +0200 Subject: [PATCH 1/3] Some changes --- app/src/main/assets/changelogs/373.txt | 3 + .../activities/OwnerChartsActivity.java | 4 +- .../OwnerNotificationChartsActivity.java | 2 +- .../activities/OwnerStatusActivity.java | 1 - .../activities/SlideMediaActivity.java | 4 +- .../android/activities/TootActivity.java | 4 +- .../java/app/fedilab/android/client/API.java | 8 +- .../android/client/Entities/Account.java | 1 - .../android/client/Entities/PollOptions.java | 2 +- .../android/client/Entities/Status.java | 8 +- .../android/client/HttpsConnection.java | 259 +++++++----------- .../drawers/AccountSearchDevAdapter.java | 3 + .../drawers/AccountsAdminListAdapter.java | 7 +- .../drawers/AccountsFollowRequestAdapter.java | 3 + .../drawers/AccountsInAListAdapter.java | 3 + .../android/drawers/AccountsListAdapter.java | 6 +- .../android/drawers/ArtListAdapter.java | 6 +- .../drawers/NotificationsListAdapter.java | 11 +- .../android/drawers/PixelfedListAdapter.java | 1 - .../android/drawers/SliderAdapter.java | 2 +- .../android/drawers/StatusListAdapter.java | 11 +- .../android/drawers/TrendsAdapter.java | 2 +- .../fedilab/android/helper/CrossActions.java | 8 +- .../helper/FullScreenMediaController.java | 26 +- .../app/fedilab/android/helper/Helper.java | 147 +++++----- .../helper/LongClickLinkMovementMethod.java | 13 +- .../helper/MastalabAutoCompleteTextView.java | 6 +- .../fedilab/android/helper/MenuFloating.java | 4 +- 28 files changed, 246 insertions(+), 309 deletions(-) diff --git a/app/src/main/assets/changelogs/373.txt b/app/src/main/assets/changelogs/373.txt index d90f95fe9..7604e4ab9 100644 --- a/app/src/main/assets/changelogs/373.txt +++ b/app/src/main/assets/changelogs/373.txt @@ -1,2 +1,5 @@ +Changed: +- Max char with media descriptions increased to 1500 + Fixed: - Some issue with custom emoji \ No newline at end of file diff --git a/app/src/main/java/app/fedilab/android/activities/OwnerChartsActivity.java b/app/src/main/java/app/fedilab/android/activities/OwnerChartsActivity.java index e105a3212..4b9238b14 100644 --- a/app/src/main/java/app/fedilab/android/activities/OwnerChartsActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/OwnerChartsActivity.java @@ -175,7 +175,7 @@ public class OwnerChartsActivity extends BaseActivity implements OnRetrieveChart dateEnd = new StatusCacheDAO(OwnerChartsActivity.this, db).getGreaterDate(StatusCacheDAO.ARCHIVE_CACHE); - if( dateIni == null){ + if (dateIni == null) { dateIni = new Date(); dateEnd = new Date(); } @@ -417,7 +417,7 @@ public class OwnerChartsActivity extends BaseActivity implements OnRetrieveChart @Override public MPPointF getOffset() { if (mOffset == null) { - mOffset = new MPPointF(-((float)getWidth() / 2), -getHeight()); + mOffset = new MPPointF(-((float) getWidth() / 2), -getHeight()); } return mOffset; } diff --git a/app/src/main/java/app/fedilab/android/activities/OwnerNotificationChartsActivity.java b/app/src/main/java/app/fedilab/android/activities/OwnerNotificationChartsActivity.java index fb8d17cd3..47799e275 100644 --- a/app/src/main/java/app/fedilab/android/activities/OwnerNotificationChartsActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/OwnerNotificationChartsActivity.java @@ -504,7 +504,7 @@ public class OwnerNotificationChartsActivity extends BaseActivity implements OnR @Override public MPPointF getOffset() { if (mOffset == null) { - mOffset = new MPPointF(-((float)getWidth() / 2), -getHeight()); + mOffset = new MPPointF(-((float) getWidth() / 2), -getHeight()); } return mOffset; } diff --git a/app/src/main/java/app/fedilab/android/activities/OwnerStatusActivity.java b/app/src/main/java/app/fedilab/android/activities/OwnerStatusActivity.java index 3ca794611..9c73f9646 100644 --- a/app/src/main/java/app/fedilab/android/activities/OwnerStatusActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/OwnerStatusActivity.java @@ -67,7 +67,6 @@ import app.fedilab.android.asynctasks.RetrieveFeedsAsyncTask; import app.fedilab.android.asynctasks.RetrieveStatsAsyncTask; import app.fedilab.android.client.APIResponse; import app.fedilab.android.client.Entities.Account; -import app.fedilab.android.client.Entities.Instance; import app.fedilab.android.client.Entities.Statistics; import app.fedilab.android.client.Entities.Status; import app.fedilab.android.client.Entities.StatusDrawerParams; diff --git a/app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java b/app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java index e566b65c0..c104d53ac 100644 --- a/app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/SlideMediaActivity.java @@ -92,13 +92,13 @@ public class SlideMediaActivity extends BaseFragmentActivity implements OnDownlo Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, uri); ContentResolver cR = context.getContentResolver(); - if( cR != null && uri != null) { + if (cR != null && uri != null) { shareIntent.setType(cR.getType(uri)); try { startActivity(shareIntent); } catch (Exception ignored) { } - }else { + } else { Toasty.error(context, context.getString(R.string.toast_error), Toasty.LENGTH_LONG).show(); } } else { 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 bd8bb9c92..f31d8bc1a 100644 --- a/app/src/main/java/app/fedilab/android/activities/TootActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/TootActivity.java @@ -2360,7 +2360,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, //Text for report final EditText input = popup_media_description.findViewById(R.id.media_description); - input.setFilters(new InputFilter[]{new InputFilter.LengthFilter(420)}); + input.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1500)}); final ImageView media_picture = popup_media_description.findViewById(R.id.media_picture); Glide.with(TootActivity.this) .asBitmap() @@ -3236,7 +3236,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, toot_cw_content.setText(""); toot_cw_content.setVisibility(View.GONE); } - if( status.getVisibility() == null) { + if (status.getVisibility() == null) { SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); String defaultVisibility = account.isLocked() ? "private" : "public"; String settingsVisibility = sharedpreferences.getString(Helper.SET_TOOT_VISIBILITY + "@" + account.getAcct() + "@" + account.getInstance(), defaultVisibility); 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 f4083a611..35b0590f2 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -709,7 +709,7 @@ public class API { } List emojiList = new ArrayList<>(); try { - JSONArray emojisPoll= resobj.getJSONArray("emojis"); + JSONArray emojisPoll = resobj.getJSONArray("emojis"); for (int j = 0; j < emojisPoll.length(); j++) { JSONObject emojisObj = emojisPoll.getJSONObject(j); Emojis emojis = parseEmojis(emojisObj); @@ -1452,7 +1452,7 @@ public class API { } try { - if( resobj.has("fields") && resobj.get("fields") instanceof JSONArray) { + if (resobj.has("fields") && resobj.get("fields") instanceof JSONArray) { JSONArray fields = resobj.getJSONArray("fields"); LinkedHashMap fieldsMap = new LinkedHashMap<>(); LinkedHashMap fieldsMapVerified = new LinkedHashMap<>(); @@ -2452,8 +2452,8 @@ public class API { Iterator> it = customFields.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - requestParams.put("fields_attributes[" + i + "][name]", (String) pair.getKey()); - requestParams.put("fields_attributes[" + i + "][value]", (String) pair.getValue()); + requestParams.put("fields_attributes[" + i + "][name]", pair.getKey()); + requestParams.put("fields_attributes[" + i + "][value]", pair.getValue()); it.remove(); i++; } diff --git a/app/src/main/java/app/fedilab/android/client/Entities/Account.java b/app/src/main/java/app/fedilab/android/client/Entities/Account.java index 004971521..ee0eb60ef 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/Account.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/Account.java @@ -47,7 +47,6 @@ import com.bumptech.glide.request.transition.Transition; import org.jetbrains.annotations.NotNull; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; diff --git a/app/src/main/java/app/fedilab/android/client/Entities/PollOptions.java b/app/src/main/java/app/fedilab/android/client/Entities/PollOptions.java index 496afb283..329f411b0 100644 --- a/app/src/main/java/app/fedilab/android/client/Entities/PollOptions.java +++ b/app/src/main/java/app/fedilab/android/client/Entities/PollOptions.java @@ -74,7 +74,7 @@ public class PollOptions implements Parcelable { } public SpannableString getTitleSpan() { - if( titleSpan == null) { + if (titleSpan == null) { titleSpan = new SpannableString(title); } return titleSpan; 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 219c035df..0dc347d46 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 @@ -52,11 +52,7 @@ import androidx.core.content.ContextCompat; import androidx.preference.PreferenceManager; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.engine.GlideException; -import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.CustomTarget; -import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.transition.Transition; import java.lang.ref.WeakReference; @@ -88,7 +84,6 @@ import app.fedilab.android.helper.CustomQuoteSpan; import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.LongClickableSpan; import app.fedilab.android.helper.ThemeHelper; -import app.fedilab.android.interfaces.OnRetrieveEmojiInterface; import es.dmoral.toasty.Toasty; import static android.content.Context.MODE_PRIVATE; @@ -556,7 +551,7 @@ public class Status implements Parcelable { Iterator> it = accountsMentionUnknown.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - String key = pair.getKey(); + String key = pair.getKey(); Account account = pair.getValue(); String targetedAccount = "@" + account.getAcct(); if (spannableStringT.toString().toLowerCase().contains(targetedAccount.toLowerCase())) { @@ -947,7 +942,6 @@ public class Status implements Parcelable { } - private static void replaceQuoteSpans(Context context, Spannable spannable) { QuoteSpan[] quoteSpans = spannable.getSpans(0, spannable.length(), QuoteSpan.class); for (QuoteSpan quoteSpan : quoteSpans) { diff --git a/app/src/main/java/app/fedilab/android/client/HttpsConnection.java b/app/src/main/java/app/fedilab/android/client/HttpsConnection.java index 46ba047b9..cd3c820ea 100644 --- a/app/src/main/java/app/fedilab/android/client/HttpsConnection.java +++ b/app/src/main/java/app/fedilab/android/client/HttpsConnection.java @@ -147,10 +147,10 @@ public class HttpsConnection { Map params = new LinkedHashMap<>(); if (paramaters != null) { - Iterator it = paramaters.entrySet().iterator(); + Iterator> it = paramaters.entrySet().iterator(); while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - params.put(pair.getKey().toString(), pair.getValue()); + Map.Entry pair = it.next(); + params.put(pair.getKey(), pair.getValue()); it.remove(); } } @@ -362,25 +362,25 @@ public class HttpsConnection { public String post(String urlConnection, int timeout, HashMap paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { + URL url = new URL(urlConnection); + Map params = new LinkedHashMap<>(); + if (paramaters != null) { + Iterator> it = paramaters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = it.next(); + params.put(pair.getKey(), pair.getValue()); + it.remove(); + } + } + StringBuilder postData = new StringBuilder(); + for (Map.Entry param : params.entrySet()) { + if (postData.length() != 0) postData.append('&'); + postData.append(param.getKey()); + postData.append('='); + postData.append(param.getValue()); + } + byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); if (urlConnection.startsWith("https://")) { - URL url = new URL(urlConnection); - Map params = new LinkedHashMap<>(); - if (paramaters != null) { - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); - } - } - StringBuilder postData = new StringBuilder(); - for (Map.Entry param : params.entrySet()) { - if (postData.length() != 0) postData.append('&'); - postData.append(param.getKey()); - postData.append('='); - postData.append(param.getValue()); - } - byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); if (proxy != null) httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); else @@ -429,25 +429,6 @@ public class HttpsConnection { httpsURLConnection.getInputStream().close(); return response; } else { - URL url = new URL(urlConnection); - Map params = new LinkedHashMap<>(); - if (paramaters != null) { - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); - } - } - StringBuilder postData = new StringBuilder(); - for (Map.Entry param : params.entrySet()) { - if (postData.length() != 0) postData.append('&'); - postData.append(param.getKey()); - postData.append('='); - postData.append(param.getValue()); - } - byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); - if (proxy != null) httpURLConnection = (HttpURLConnection) url.openConnection(proxy); else @@ -499,10 +480,12 @@ public class HttpsConnection { String postJson(String urlConnection, int timeout, JsonObject jsonObject, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { + + URL url = new URL(urlConnection); + byte[] postDataBytes; + postDataBytes = jsonObject.toString().getBytes(StandardCharsets.UTF_8); if (urlConnection.startsWith("https://")) { - URL url = new URL(urlConnection); - byte[] postDataBytes; - postDataBytes = jsonObject.toString().getBytes(StandardCharsets.UTF_8); + if (proxy != null) httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); else @@ -553,9 +536,6 @@ public class HttpsConnection { httpsURLConnection.getInputStream().close(); return response; } else { - URL url = new URL(urlConnection); - byte[] postDataBytes = jsonObject.toString().getBytes(StandardCharsets.UTF_8); - if (proxy != null) httpURLConnection = (HttpURLConnection) url.openConnection(proxy); else @@ -812,9 +792,15 @@ public class HttpsConnection { public InputStream getPicture(final String downloadUrl) { + + URL url; + try { + url = new URL(downloadUrl); + } catch (MalformedURLException e) { + return null; + } if (downloadUrl.startsWith("https://")) { try { - URL url = new URL(downloadUrl); if (proxy != null) httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); else @@ -835,10 +821,8 @@ public class HttpsConnection { httpsURLConnection.getInputStream().close(); } catch (Exception ignored) { } - return null; } else { try { - URL url = new URL(downloadUrl); if (proxy != null) httpURLConnection = (HttpURLConnection) url.openConnection(proxy); else @@ -858,8 +842,8 @@ public class HttpsConnection { httpURLConnection.getInputStream().close(); } catch (Exception ignored) { } - return null; } + return null; } private void uploadMedia(String urlConnection, InputStream avatar, InputStream header, String filename) { @@ -923,27 +907,27 @@ public class HttpsConnection { @SuppressWarnings("SameParameterValue") public String patch(String urlConnection, int timeout, HashMap paramaters, InputStream avatar, String avatarName, InputStream header, String headerName, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { + + URL url = new URL(urlConnection); + Map params = new LinkedHashMap<>(); + if (paramaters != null) { + Iterator> it = paramaters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = it.next(); + params.put(pair.getKey(), pair.getValue()); + it.remove(); + } + } + StringBuilder postData = new StringBuilder(); + for (Map.Entry param : params.entrySet()) { + if (postData.length() != 0) postData.append('&'); + postData.append(param.getKey()); + postData.append('='); + postData.append(param.getValue()); + } + byte[] postDataBytes = (postData.toString()).getBytes(StandardCharsets.UTF_8); + if (urlConnection.startsWith("https://")) { - URL url = new URL(urlConnection); - Map params = new LinkedHashMap<>(); - if (paramaters != null) { - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); - } - } - StringBuilder postData = new StringBuilder(); - for (Map.Entry param : params.entrySet()) { - if (postData.length() != 0) postData.append('&'); - postData.append(param.getKey()); - postData.append('='); - postData.append(param.getValue()); - } - byte[] postDataBytes = (postData.toString()).getBytes(StandardCharsets.UTF_8); - - if (proxy != null) httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); else @@ -1006,25 +990,6 @@ public class HttpsConnection { httpsURLConnection.getInputStream().close(); return response; } else { - URL url = new URL(urlConnection); - Map params = new LinkedHashMap<>(); - if (paramaters != null) { - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); - } - } - StringBuilder postData = new StringBuilder(); - for (Map.Entry param : params.entrySet()) { - if (postData.length() != 0) postData.append('&'); - postData.append(param.getKey()); - postData.append('='); - postData.append(param.getValue()); - } - byte[] postDataBytes = (postData.toString()).getBytes(StandardCharsets.UTF_8); - if (proxy != null) httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); else @@ -1088,26 +1053,27 @@ public class HttpsConnection { } public String put(String urlConnection, int timeout, HashMap paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { - if (urlConnection.startsWith("https://")) { - URL url = new URL(urlConnection); - Map params = new LinkedHashMap<>(); - if (paramaters != null) { - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); - } - } - StringBuilder postData = new StringBuilder(); - for (Map.Entry param : params.entrySet()) { - if (postData.length() != 0) postData.append('&'); - postData.append(param.getKey()); - postData.append('='); - postData.append(param.getValue()); - } - byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); + URL url = new URL(urlConnection); + Map params = new LinkedHashMap<>(); + if (paramaters != null) { + Iterator> it = paramaters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = it.next(); + params.put(pair.getKey(), pair.getValue()); + it.remove(); + } + } + StringBuilder postData = new StringBuilder(); + for (Map.Entry param : params.entrySet()) { + if (postData.length() != 0) postData.append('&'); + postData.append(param.getKey()); + postData.append('='); + postData.append(param.getValue()); + } + byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); + + if (urlConnection.startsWith("https://")) { if (proxy != null) httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); else @@ -1157,25 +1123,6 @@ public class HttpsConnection { httpsURLConnection.getInputStream().close(); return response; } else { - URL url = new URL(urlConnection); - Map params = new LinkedHashMap<>(); - if (paramaters != null) { - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); - } - } - StringBuilder postData = new StringBuilder(); - for (Map.Entry param : params.entrySet()) { - if (postData.length() != 0) postData.append('&'); - postData.append(param.getKey()); - postData.append('='); - postData.append(param.getValue()); - } - byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); - if (proxy != null) httpURLConnection = (HttpURLConnection) url.openConnection(proxy); else @@ -1228,26 +1175,27 @@ public class HttpsConnection { } public int delete(String urlConnection, int timeout, HashMap paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { - if (urlConnection.startsWith("https://")) { - URL url = new URL(urlConnection); - Map params = new LinkedHashMap<>(); - if (paramaters != null) { - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); - } - } - StringBuilder postData = new StringBuilder(); - for (Map.Entry param : params.entrySet()) { - if (postData.length() != 0) postData.append('&'); - postData.append(param.getKey()); - postData.append('='); - postData.append(param.getValue()); - } - byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); + URL url = new URL(urlConnection); + Map params = new LinkedHashMap<>(); + if (paramaters != null) { + Iterator> it = paramaters.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pair = it.next(); + params.put(pair.getKey(), pair.getValue()); + it.remove(); + } + } + StringBuilder postData = new StringBuilder(); + for (Map.Entry param : params.entrySet()) { + if (postData.length() != 0) postData.append('&'); + postData.append(param.getKey()); + postData.append('='); + postData.append(param.getValue()); + } + byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); + + if (urlConnection.startsWith("https://")) { if (proxy != null) httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); else @@ -1292,25 +1240,6 @@ public class HttpsConnection { throw new HttpsConnectionException(responseCode, error); } } else { - URL url = new URL(urlConnection); - Map params = new LinkedHashMap<>(); - if (paramaters != null) { - Iterator it = paramaters.entrySet().iterator(); - while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - params.put(pair.getKey().toString(), pair.getValue()); - it.remove(); - } - } - StringBuilder postData = new StringBuilder(); - for (Map.Entry param : params.entrySet()) { - if (postData.length() != 0) postData.append('&'); - postData.append(param.getKey()); - postData.append('='); - postData.append(param.getValue()); - } - byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); - if (proxy != null) httpURLConnection = (HttpURLConnection) url.openConnection(proxy); else diff --git a/app/src/main/java/app/fedilab/android/drawers/AccountSearchDevAdapter.java b/app/src/main/java/app/fedilab/android/drawers/AccountSearchDevAdapter.java index ec285f185..23973c0ed 100644 --- a/app/src/main/java/app/fedilab/android/drawers/AccountSearchDevAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/AccountSearchDevAdapter.java @@ -47,6 +47,8 @@ import app.fedilab.android.helper.Helper; import app.fedilab.android.interfaces.OnPostActionInterface; import es.dmoral.toasty.Toasty; +import static app.fedilab.android.helper.Helper.makeEmojis; + /** * Created by Thomas on 03/09/2017. @@ -125,6 +127,7 @@ public class AccountSearchDevAdapter extends BaseAdapter implements OnPostAction } } else { holder.account_dn.setText(account.getDisplay_name()); + makeEmojis(context, holder.account_dn, account.getDisplayNameSpan(), account.getEmojis()); holder.account_un.setText(account.getAcct()); holder.account_follow.hide(); } diff --git a/app/src/main/java/app/fedilab/android/drawers/AccountsAdminListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/AccountsAdminListAdapter.java index f85187202..510ed1281 100644 --- a/app/src/main/java/app/fedilab/android/drawers/AccountsAdminListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/AccountsAdminListAdapter.java @@ -36,6 +36,8 @@ import app.fedilab.android.client.Entities.AccountAdmin; import app.fedilab.android.helper.Helper; import app.fedilab.android.interfaces.OnRetrieveEmojiAccountInterface; +import static app.fedilab.android.helper.Helper.makeEmojis; + /** * Created by Thomas on 19/06/2019. @@ -74,8 +76,11 @@ public class AccountsAdminListAdapter extends RecyclerView.Adapter 0) + if (status.getAccount().getDisplayNameSpan() != null && status.getAccount().getDisplayNameSpan().toString().trim().length() > 0) { holder.art_username.setText(status.getAccount().getDisplayNameSpan(), TextView.BufferType.SPANNABLE); - else + makeEmojis(context, holder.art_username, status.getAccount().getDisplayNameSpan(), status.getAccount().getEmojis()); + } else holder.art_username.setText(status.getAccount().getUsername()); holder.art_acct.setText(String.format("@%s", status.getAccount().getAcct())); diff --git a/app/src/main/java/app/fedilab/android/drawers/NotificationsListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/NotificationsListAdapter.java index c5bdceaf7..def9880b7 100644 --- a/app/src/main/java/app/fedilab/android/drawers/NotificationsListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/NotificationsListAdapter.java @@ -111,6 +111,7 @@ import es.dmoral.toasty.Toasty; import static android.content.Context.MODE_PRIVATE; import static app.fedilab.android.activities.BaseMainActivity.social; +import static app.fedilab.android.helper.Helper.makeEmojis; /** @@ -322,8 +323,10 @@ public class NotificationsListAdapter extends RecyclerView.Adapter 0) { holder.status_account_displayname_owner.setText(displayNameSpan, TextView.BufferType.SPANNABLE); makeEmojis(context, holder.status_account_displayname_owner, status.getReblog().getAccount().getDisplayNameSpan(), status.getReblog().getAccount().getEmojis()); - }else + } else holder.status_account_displayname_owner.setText(status.getReblog().getAccount().getAcct().replace("@", "")); holder.status_account_displayname_owner.setVisibility(View.VISIBLE); @@ -1626,8 +1626,7 @@ public class StatusListAdapter extends RecyclerView.Adapter 0 ) { + if (days > 0) { people = people / days; uses = uses / days; } diff --git a/app/src/main/java/app/fedilab/android/helper/CrossActions.java b/app/src/main/java/app/fedilab/android/helper/CrossActions.java index c75a9d160..8281025a2 100644 --- a/app/src/main/java/app/fedilab/android/helper/CrossActions.java +++ b/app/src/main/java/app/fedilab/android/helper/CrossActions.java @@ -125,7 +125,7 @@ public class CrossActions { } - public static void doCrossAction(final Context context, RetrieveFeedsAsyncTask.Type type, final Status status, final Account targetedAccount, final API.StatusAction doAction, final RecyclerView.Adapter baseAdapter, final OnPostActionInterface onPostActionInterface, boolean limitedToOwner) { + public static void doCrossAction(final Context context, RetrieveFeedsAsyncTask.Type type, final Status status, final Account targetedAccount, final API.StatusAction doAction, final RecyclerView.Adapter baseAdapter, final OnPostActionInterface onPostActionInterface, boolean limitedToOwner) { List accounts = connectedAccounts(context, status, limitedToOwner); final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE); boolean undoAction = (doAction == API.StatusAction.UNPIN || doAction == API.StatusAction.UNREBLOG || doAction == API.StatusAction.UNFAVOURITE); @@ -784,7 +784,7 @@ public class CrossActions { * @param action int * @param status Status */ - private static void displayConfirmationDialog(final Context context, final API.StatusAction action, final Status status, final RecyclerView.Adapter baseAdapter, final OnPostActionInterface onPostActionInterface) { + private static void displayConfirmationDialog(final Context context, final API.StatusAction action, final Status status, final RecyclerView.Adapter baseAdapter, final OnPostActionInterface onPostActionInterface) { String title = null; if (action == API.StatusAction.FAVOURITE) { @@ -855,7 +855,7 @@ public class CrossActions { * @param action int * @param status Status */ - private static void displayConfirmationDialogCrossAction(final Context context, Account currentAccount, final API.StatusAction action, final Status status, final OnPostActionInterface onPostActionInterface, final RecyclerView.Adapter baseAdapter) { + private static void displayConfirmationDialogCrossAction(final Context context, Account currentAccount, final API.StatusAction action, final Status status, final OnPostActionInterface onPostActionInterface, final RecyclerView.Adapter baseAdapter) { String title = null; if (action == API.StatusAction.FAVOURITE) { @@ -950,7 +950,7 @@ public class CrossActions { * * @param status Status */ - private static void pinAction(Context context, Status status, RecyclerView.Adapter baseAdapter, OnPostActionInterface onPostActionInterface) { + private static void pinAction(Context context, Status status, RecyclerView.Adapter baseAdapter, OnPostActionInterface onPostActionInterface) { if (status.isPinned()) { new PostActionAsyncTask(context, API.StatusAction.UNPIN, status.getId(), onPostActionInterface).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); diff --git a/app/src/main/java/app/fedilab/android/helper/FullScreenMediaController.java b/app/src/main/java/app/fedilab/android/helper/FullScreenMediaController.java index 18137caea..94146e763 100644 --- a/app/src/main/java/app/fedilab/android/helper/FullScreenMediaController.java +++ b/app/src/main/java/app/fedilab/android/helper/FullScreenMediaController.java @@ -46,6 +46,7 @@ public class FullScreenMediaController extends MediaController { this.context = context; } + @SuppressWarnings("unused") public FullScreenMediaController(Context context, Peertube peertube) { super(context); this.peertube = peertube; @@ -80,12 +81,7 @@ public class FullScreenMediaController extends MediaController { paramsButton.gravity = Gravity.START; paramsButton.rightMargin = 80; paramsButton.topMargin = 22; - resolution.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - ((PeertubeActivity) getContext()).displayResolution(); - } - }); + resolution.setOnClickListener(v -> ((PeertubeActivity) getContext()).displayResolution()); addView(resolution, paramsButton); if (((PeertubeActivity) getContext()).getFullscreen() == fullscreen.ON) { @@ -97,21 +93,19 @@ public class FullScreenMediaController extends MediaController { } //add listener to image button to handle full screen and exit full screen events - fullScreen.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { + fullScreen.setOnClickListener(v -> { - if (((PeertubeActivity) getContext()).getFullscreen() == fullscreen.ON) { - ((PeertubeActivity) getContext()).setFullscreen(fullscreen.OFF); - } else { - ((PeertubeActivity) getContext()).setFullscreen(fullscreen.ON); - } - ((PeertubeActivity) getContext()).change(); - changeIcon(); + if (((PeertubeActivity) getContext()).getFullscreen() == fullscreen.ON) { + ((PeertubeActivity) getContext()).setFullscreen(fullscreen.OFF); + } else { + ((PeertubeActivity) getContext()).setFullscreen(fullscreen.ON); } + ((PeertubeActivity) getContext()).change(); + changeIcon(); }); } + @SuppressWarnings("unused") public void setResolutionVal(String resolutionVal) { this.resolutionVal = resolutionVal; if (resolution != null) 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 7f558f88b..d8bcab3a8 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -1643,12 +1643,7 @@ public class Helper { public static Map sortByValue(Map map) { List> list = new LinkedList<>(map.entrySet()); - Collections.sort(list, new Comparator() { - @SuppressWarnings("unchecked") - public int compare(Object o2, Object o1) { - return ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue()); - } - }); + Collections.sort(list, (Comparator) (o2, o1) -> ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue())); Map result = new LinkedHashMap<>(); for (Map.Entry entry : list) { @@ -2659,7 +2654,8 @@ public class Helper { public static List restoreArrayFromString(String serializedArray) { Gson gson = new Gson(); try { - Type listType = new TypeToken>() {}.getType(); + Type listType = new TypeToken>() { + }.getType(); return gson.fromJson(serializedArray, listType); } catch (Exception e) { return null; @@ -4205,12 +4201,12 @@ public class Helper { fw.append(','); fw.append("COMMENT"); fw.append('\n'); - Iterator it = domainBlocked.entrySet().iterator(); + Iterator> it = domainBlocked.entrySet().iterator(); while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); - fw.append((String) pair.getKey()); + Map.Entry pair = it.next(); + fw.append(pair.getKey()); fw.append(','); - fw.append((String) pair.getValue()); + fw.append(pair.getValue()); fw.append('\n'); it.remove(); } @@ -4259,16 +4255,16 @@ public class Helper { linearLayout_main.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); linearLayout_main.setOrientation(LinearLayout.VERTICAL); - Iterator it = instances.entrySet().iterator(); + Iterator> it = instances.entrySet().iterator(); while (it.hasNext()) { - Map.Entry pair = (Map.Entry) it.next(); + Map.Entry pair = it.next(); View item = inflater.inflate(R.layout.muted_instance_popup, new LinearLayout(context), false); CheckBox checkBox = item.findViewById(R.id.popup_domain); - checkBox.setText(pair.getKey().toString().trim()); + checkBox.setText(pair.getKey().trim()); item.findViewById(R.id.popup_comment).setVisibility(View.GONE); if (pair.getValue() != null) { TextView textView = item.findViewById(R.id.comment_text); - textView.setText(pair.getValue().toString()); + textView.setText(pair.getValue()); textView.setVisibility(View.VISIBLE); } linearLayout_main.addView(item); @@ -4289,15 +4285,15 @@ public class Helper { if (domainBlocked.size() > 0) { new Thread() { public void run() { - Iterator it1 = domainBlocked.entrySet().iterator(); + Iterator> it1 = domainBlocked.entrySet().iterator(); while (it1.hasNext()) { - Map.Entry pair = (Map.Entry) it1.next(); + Map.Entry pair = it1.next(); try { sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } - new PostActionAsyncTask(context, API.StatusAction.BLOCK_DOMAIN, pair.getKey().toString().trim(), ((MutedInstanceActivity) context)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + new PostActionAsyncTask(context, API.StatusAction.BLOCK_DOMAIN, pair.getKey().trim(), ((MutedInstanceActivity) context)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); it1.remove(); } } @@ -4404,6 +4400,62 @@ public class Helper { return null; } + public static void makeEmojis(Context context, View customTextView, SpannableString contentSpan, List emojis) { + + SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + boolean disableAnimatedEmoji = sharedpreferences.getBoolean(Helper.SET_DISABLE_ANIMATED_EMOJI, false); + + if (emojis != null && emojis.size() > 0) { + for (final Emojis emoji : emojis) { + Glide.with(context) + .asDrawable() + .load(disableAnimatedEmoji ? emoji.getStatic_url() : emoji.getUrl()) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { + final String targetedEmoji = ":" + emoji.getShortcode() + ":"; + if (contentSpan != null && contentSpan.toString().contains(targetedEmoji)) { + //emojis can be used several times so we have to loop + for (int startPosition = -1; (startPosition = contentSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) { + final int endPosition = startPosition + targetedEmoji.length(); + if (endPosition <= contentSpan.toString().length() && endPosition >= startPosition) { + ImageSpan imageSpan; + try { + resource.setBounds(0, 0, (int) Helper.convertDpToPixel(20, context), (int) Helper.convertDpToPixel(20, context)); + resource.setVisible(true, true); + imageSpan = new ImageSpan(resource); + contentSpan.setSpan( + imageSpan, startPosition, + endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + if (customTextView instanceof CustomTextView) { + ((CustomTextView) customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); + } else if (customTextView instanceof RadioButton) { + ((RadioButton) customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); + } else if (customTextView instanceof CheckBox) { + ((CheckBox) customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); + } else if (customTextView instanceof AppCompatTextView) { + ((AppCompatTextView) customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); + } else if (customTextView instanceof TextView) { + ((TextView) customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); + } + + } catch (Exception ignored) { + } + } + } + } + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + }); + + } + } + } + //Event Type public enum EventStreaming { UPDATE, @@ -4412,6 +4464,7 @@ public class Helper { NONE } + public enum NotifType { FOLLLOW, MENTION, @@ -4423,7 +4476,6 @@ public class Helper { TOOT } - public static class CacheTask extends AsyncTask { private float cacheSize; private WeakReference contextReference; @@ -4512,61 +4564,4 @@ public class Helper { } - public static void makeEmojis(Context context, View customTextView, SpannableString contentSpan, List emojis) { - - SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); - boolean disableAnimatedEmoji = sharedpreferences.getBoolean(Helper.SET_DISABLE_ANIMATED_EMOJI, false); - - if (emojis != null && emojis.size() > 0) { - for (final Emojis emoji : emojis) { - Glide.with(context) - .asDrawable() - .load(disableAnimatedEmoji ? emoji.getStatic_url() : emoji.getUrl()) - .into(new CustomTarget() { - @Override - public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { - final String targetedEmoji = ":" + emoji.getShortcode() + ":"; - if (contentSpan != null && contentSpan.toString().contains(targetedEmoji)) { - //emojis can be used several times so we have to loop - for (int startPosition = -1; (startPosition = contentSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) { - final int endPosition = startPosition + targetedEmoji.length(); - if (endPosition <= contentSpan.toString().length() && endPosition >= startPosition) { - ImageSpan imageSpan; - try { - resource.setBounds(0, 0, (int) Helper.convertDpToPixel(20, context), (int) Helper.convertDpToPixel(20, context)); - resource.setVisible(true, true); - imageSpan = new ImageSpan(resource); - contentSpan.setSpan( - imageSpan, startPosition, - endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); - if( customTextView instanceof CustomTextView) { - ((CustomTextView)customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); - }else if (customTextView instanceof RadioButton){ - ((RadioButton)customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); - }else if (customTextView instanceof CheckBox){ - ((CheckBox)customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); - }else if (customTextView instanceof AppCompatTextView){ - ((AppCompatTextView)customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); - }else if (customTextView instanceof TextView){ - ((TextView)customTextView).setText(contentSpan, TextView.BufferType.SPANNABLE); - } - - } catch (Exception ignored) { - } - } - } - } - } - - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { - - } - }); - - } - } - } - - } diff --git a/app/src/main/java/app/fedilab/android/helper/LongClickLinkMovementMethod.java b/app/src/main/java/app/fedilab/android/helper/LongClickLinkMovementMethod.java index cd29cac7e..3cb855516 100644 --- a/app/src/main/java/app/fedilab/android/helper/LongClickLinkMovementMethod.java +++ b/app/src/main/java/app/fedilab/android/helper/LongClickLinkMovementMethod.java @@ -14,7 +14,6 @@ import android.widget.TextView; //https://stackoverflow.com/a/20435892 public class LongClickLinkMovementMethod extends LinkMovementMethod { - private static int LONG_CLICK_TIME = 1000; private static LongClickLinkMovementMethod sInstance; private Handler mLongClickHandler; private boolean mIsLongPressed = false; @@ -68,13 +67,11 @@ public class LongClickLinkMovementMethod extends LinkMovementMethod { Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0])); - mLongClickHandler.postDelayed(new Runnable() { - @Override - public void run() { - link[0].onLongClick(widget); - mIsLongPressed = true; - widget.invalidate(); - } + int LONG_CLICK_TIME = 1000; + mLongClickHandler.postDelayed(() -> { + link[0].onLongClick(widget); + mIsLongPressed = true; + widget.invalidate(); }, LONG_CLICK_TIME); } return true; diff --git a/app/src/main/java/app/fedilab/android/helper/MastalabAutoCompleteTextView.java b/app/src/main/java/app/fedilab/android/helper/MastalabAutoCompleteTextView.java index a9b12a2f9..dc3b50865 100644 --- a/app/src/main/java/app/fedilab/android/helper/MastalabAutoCompleteTextView.java +++ b/app/src/main/java/app/fedilab/android/helper/MastalabAutoCompleteTextView.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.res.TypedArray; import android.graphics.Paint; +import android.os.Build; import android.os.Bundle; import android.util.AttributeSet; import android.view.KeyEvent; @@ -14,7 +15,6 @@ import android.view.inputmethod.InputConnection; import androidx.annotation.CallSuper; import androidx.annotation.DimenRes; import androidx.annotation.Px; -import androidx.core.os.BuildCompat; import androidx.core.view.inputmethod.EditorInfoCompat; import androidx.core.view.inputmethod.InputConnectionCompat; import androidx.core.view.inputmethod.InputContentInfoCompat; @@ -39,7 +39,7 @@ public class MastalabAutoCompleteTextView extends androidx.appcompat.widget.AppC int flags, Bundle opts) { // read and display inputContentInfo asynchronously - if (BuildCompat.isAtLeastNMR1() && (flags & + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && (flags & InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0) { try { inputContentInfo.requestPermission(); @@ -118,10 +118,12 @@ public class MastalabAutoCompleteTextView extends androidx.appcompat.widget.AppC this.keyBoardInputCallbackListener = keyBoardInputCallbackListener; } + @SuppressWarnings("unused") public String[] getImgTypeString() { return imgTypeString; } + @SuppressWarnings("unused") public void setImgTypeString(String[] imgTypeString) { this.imgTypeString = imgTypeString; } diff --git a/app/src/main/java/app/fedilab/android/helper/MenuFloating.java b/app/src/main/java/app/fedilab/android/helper/MenuFloating.java index c4d033b9b..041d72f4a 100644 --- a/app/src/main/java/app/fedilab/android/helper/MenuFloating.java +++ b/app/src/main/java/app/fedilab/android/helper/MenuFloating.java @@ -2,7 +2,6 @@ package app.fedilab.android.helper; import android.app.Activity; import android.graphics.drawable.Drawable; - import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -47,7 +46,8 @@ public class MenuFloating extends com.oguzdev.circularfloatingactionmenu.library /** * Attaches it to the content view with specified LayoutParams. - * @param view View + * + * @param view View * @param layoutParams ViewGroup.LayoutParams */ public void attach(View view, ViewGroup.LayoutParams layoutParams) { From 7bd1a874ff99114372374d7112945cd7c5fd47be Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 19 Jun 2020 17:27:59 +0200 Subject: [PATCH 2/3] Some changes --- .../activities/PhotoEditorActivity.java | 23 +++++++++++++++++++ .../activities/PixelfedComposeActivity.java | 8 ++++--- .../android/activities/TootActivity.java | 4 ++-- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/PhotoEditorActivity.java b/app/src/main/java/app/fedilab/android/activities/PhotoEditorActivity.java index 97809e4d2..3148dbe49 100644 --- a/app/src/main/java/app/fedilab/android/activities/PhotoEditorActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/PhotoEditorActivity.java @@ -18,6 +18,7 @@ import android.Manifest; import android.annotation.SuppressLint; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.Typeface; import android.net.Uri; @@ -33,6 +34,8 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import androidx.exifinterface.media.ExifInterface; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.recyclerview.widget.LinearLayoutManager; @@ -74,6 +77,7 @@ public class PhotoEditorActivity extends BaseActivity implements OnPhotoEditorLi private static final int CAMERA_REQUEST = 52; private static final int PICK_REQUEST = 53; + private final int STORE_REQUEST = 54; private PhotoEditor mPhotoEditor; private PhotoEditorView mPhotoEditorView; private PropertiesBSFragment mPropertiesBSFragment; @@ -302,6 +306,13 @@ public class PhotoEditorActivity extends BaseActivity implements OnPhotoEditorLi .setClearViewsEnabled(true) .setTransparencyEnabled(true) .build(); + if (ContextCompat.checkSelfPermission(PhotoEditorActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != + PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(PhotoEditorActivity.this, + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + STORE_REQUEST); + return; + } mPhotoEditor.saveAsFile(file.getAbsolutePath(), saveSettings, new PhotoEditor.OnSaveListener() { @Override public void onSuccess(@NonNull String imagePath) { @@ -332,6 +343,18 @@ public class PhotoEditorActivity extends BaseActivity implements OnPhotoEditorLi } } + @Override + public void onRequestPermissionsResult(int requestCode, + @NonNull String[] permissions, @NonNull int[] grantResults) { + if (requestCode == STORE_REQUEST) {// If request is cancelled, the result arrays are empty. + if (grantResults.length > 0 + && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // We have the permission. + saveImage(); + } + } + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); diff --git a/app/src/main/java/app/fedilab/android/activities/PixelfedComposeActivity.java b/app/src/main/java/app/fedilab/android/activities/PixelfedComposeActivity.java index 591eae7e2..e17c08a6f 100644 --- a/app/src/main/java/app/fedilab/android/activities/PixelfedComposeActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/PixelfedComposeActivity.java @@ -254,8 +254,7 @@ public class PixelfedComposeActivity extends BaseActivity implements UploadStatu final int[] currentCursorPosition = {toot_content.getSelectionStart()}; final String[] newContent = {null}; final int[] searchLength = {searchDeep}; - TextWatcher textw = null; - TextWatcher finalTextw = textw; + TextWatcher textw; textw = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -270,7 +269,7 @@ public class PixelfedComposeActivity extends BaseActivity implements UploadStatu public void afterTextChanged(Editable s) { if (autocomplete) { - toot_content.removeTextChangedListener(finalTextw); + toot_content.removeTextChangedListener(this); Thread thread = new Thread() { @Override public void run() { @@ -697,6 +696,9 @@ public class PixelfedComposeActivity extends BaseActivity implements UploadStatu } restored = b.getLong("restored", -1); } + if (!sharedUri.isEmpty()) { + uploadSharedImage(sharedUri); + } if (scheduledstatus != null) toot_it.setText(R.string.modify); if (restoredScheduled) { 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 f31d8bc1a..afcd66013 100644 --- a/app/src/main/java/app/fedilab/android/activities/TootActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/TootActivity.java @@ -330,7 +330,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, final String[] newContent = {null}; final int[] searchLength = {searchDeep}; TextWatcher textw = null; - TextWatcher finalTextw = textw; + textw = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -348,7 +348,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate, status.setQuickReplyContent(s.toString()); } if (autocomplete) { - toot_content.removeTextChangedListener(finalTextw); + toot_content.removeTextChangedListener(this); Thread thread = new Thread() { @Override public void run() { From 0e7f95f62634777a6b5ab3e8cba2bd7caefc99a3 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 19 Jun 2020 18:00:48 +0200 Subject: [PATCH 3/3] Some changes --- .../java/app/fedilab/android/client/APIResponse.java | 1 - .../main/java/app/fedilab/android/client/GNUAPI.java | 12 ++++-------- .../fedilab/android/drawers/CustomEmojiAdapter.java | 4 +++- .../android/drawers/NotificationsListAdapter.java | 2 +- .../fedilab/android/jobs/ScheduledBoostsSyncJob.java | 1 + 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/client/APIResponse.java b/app/src/main/java/app/fedilab/android/client/APIResponse.java index 9ece26d7c..635eaeed2 100644 --- a/app/src/main/java/app/fedilab/android/client/APIResponse.java +++ b/app/src/main/java/app/fedilab/android/client/APIResponse.java @@ -78,7 +78,6 @@ public class APIResponse { private Context context = null; private List pixelFedStories = null; private List pixelFedStoryItems = null; - private PixelFedStory pixelFedStory = null; private List trends = null; private List identityProofs = null; diff --git a/app/src/main/java/app/fedilab/android/client/GNUAPI.java b/app/src/main/java/app/fedilab/android/client/GNUAPI.java index 648d23ce8..df987090a 100644 --- a/app/src/main/java/app/fedilab/android/client/GNUAPI.java +++ b/app/src/main/java/app/fedilab/android/client/GNUAPI.java @@ -1476,24 +1476,20 @@ public class GNUAPI { case FAVOURITE: if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.GNU) { action = "/favorites/create.json"; - params = new HashMap<>(); - params.put("id", targetedId); } else { action = "/friendica/activity/like.json"; - params = new HashMap<>(); - params.put("id", targetedId); } + params = new HashMap<>(); + params.put("id", targetedId); break; case UNFAVOURITE: if (MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.GNU) { action = "/favorites/destroy.json"; - params = new HashMap<>(); - params.put("id", targetedId); } else { action = "/friendica/activity/unlike.json"; - params = new HashMap<>(); - params.put("id", targetedId); } + params = new HashMap<>(); + params.put("id", targetedId); break; case REBLOG: action = String.format("/statuses/retweet/%s.json", targetedId); diff --git a/app/src/main/java/app/fedilab/android/drawers/CustomEmojiAdapter.java b/app/src/main/java/app/fedilab/android/drawers/CustomEmojiAdapter.java index 18728988f..e2209e0d1 100644 --- a/app/src/main/java/app/fedilab/android/drawers/CustomEmojiAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/CustomEmojiAdapter.java @@ -88,7 +88,9 @@ public class CustomEmojiAdapter extends BaseAdapter { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { emoji.setDrawable(resource); - imageView.setImageDrawable(emoji.getDrawable()); + if( imageView != null && emoji.getDrawable() != null) { + imageView.setImageDrawable(emoji.getDrawable()); + } } @Override diff --git a/app/src/main/java/app/fedilab/android/drawers/NotificationsListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/NotificationsListAdapter.java index def9880b7..8b3feadc8 100644 --- a/app/src/main/java/app/fedilab/android/drawers/NotificationsListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/NotificationsListAdapter.java @@ -262,7 +262,7 @@ public class NotificationsListAdapter extends RecyclerView.Adapter