From 5d7bffcf3ac401934bdc26302c66c883e282fd2a Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 23 Jan 2021 09:39:39 +0100 Subject: [PATCH] Add status notification for followed account + fix crashes with photo editor --- .../activities/ShowAccountActivity.java | 1 + .../java/app/fedilab/android/client/API.java | 1 + .../android/client/HttpsConnection.java | 1335 ++++++----------- .../fragments/ContentSettingsFragment.java | 9 +- .../TabLayoutNotificationsFragment.java | 7 +- .../fedilab/android/helper/BaseHelper.java | 34 +- .../jobs/BaseNotificationsSyncJob.java | 17 +- .../android/services/BackupStatusService.java | 2 - .../services/BaseLiveNotificationService.java | 5 +- ...BaseStreamingFederatedTimelineService.java | 2 - .../BaseStreamingHomeTimelineService.java | 10 - .../BaseStreamingLocalTimelineService.java | 8 - .../LiveNotificationDelayedService.java | 33 +- app/src/main/res/values/strings.xml | 2 +- 14 files changed, 537 insertions(+), 929 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java b/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java index f0065dad5..36e5bf39e 100644 --- a/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/ShowAccountActivity.java @@ -453,6 +453,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt } }); mPager = findViewById(R.id.account_viewpager); + TabLayout.Tab tab = tabLayout.newTab(); if (!peertubeAccount) { tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.toots))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.following))); 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 8603fb454..ae1cbe9c5 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -4913,6 +4913,7 @@ public class API { apiResponse.setMax_id(httpsConnection.getMax_id()); notifications = parseNotificationResponse(new JSONArray(response)); } catch (HttpsConnection.HttpsConnectionException e) { + e.printStackTrace(); setError(e.getStatusCode(), e); } catch (NoSuchAlgorithmException | IOException | KeyManagementException | JSONException e) { e.printStackTrace(); 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 6e84331c3..4f5f60991 100644 --- a/app/src/main/java/app/fedilab/android/client/HttpsConnection.java +++ b/app/src/main/java/app/fedilab/android/client/HttpsConnection.java @@ -77,7 +77,6 @@ import static app.fedilab.android.helper.Helper.urlPattern; public class HttpsConnection { - private HttpsURLConnection httpsURLConnection; private HttpURLConnection httpURLConnection; private String since_id, max_id; private final Context context; @@ -168,31 +167,33 @@ public class HttpsConnection { } if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); + httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setConnectTimeout(timeout * 1000); - httpsURLConnection.setRequestProperty("http.keepAlive", "false"); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpsURLConnection.setRequestProperty("Content-Type", "application/json"); - httpsURLConnection.setRequestProperty("Accept", "application/json"); - httpsURLConnection.setUseCaches(true); - httpsURLConnection.setDefaultUseCaches(true); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); + httpURLConnection = (HttpsURLConnection) url.openConnection(); + httpURLConnection.setConnectTimeout(timeout * 1000); + httpURLConnection.setRequestProperty("http.keepAlive", "false"); + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + httpURLConnection.setRequestProperty("Content-Type", "application/json"); + httpURLConnection.setRequestProperty("Accept", "application/json"); + httpURLConnection.setUseCaches(true); + httpURLConnection.setDefaultUseCaches(true); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); + } if (token != null && !token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); + httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); else if (token != null && token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", token); - httpsURLConnection.setRequestMethod("GET"); + httpURLConnection.setRequestProperty("Authorization", token); + httpURLConnection.setRequestMethod("GET"); String response; - if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { - response = converToString(httpsURLConnection.getInputStream()); + if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { + response = converToString(httpURLConnection.getInputStream()); } else { String error = null; - if (httpsURLConnection.getErrorStream() != null) { - InputStream stream = httpsURLConnection.getErrorStream(); + if (httpURLConnection.getErrorStream() != null) { + InputStream stream = httpURLConnection.getErrorStream(); if (stream == null) { - stream = httpsURLConnection.getInputStream(); + stream = httpURLConnection.getInputStream(); } try (Scanner scanner = new Scanner(stream)) { scanner.useDelimiter("\\Z"); @@ -203,15 +204,15 @@ public class HttpsConnection { e.printStackTrace(); } } - int responseCode = httpsURLConnection.getResponseCode(); + int responseCode = httpURLConnection.getResponseCode(); try { - httpsURLConnection.getInputStream().close(); + httpURLConnection.getInputStream().close(); } catch (Exception ignored) { } throw new HttpsConnectionException(responseCode, error); } getSinceMaxId(); - httpsURLConnection.getInputStream().close(); + httpURLConnection.getInputStream().close(); return response; } @@ -228,15 +229,17 @@ public class HttpsConnection { try { url = new URL(urlConnection); if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); + httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setRequestProperty("http.keepAlive", "false"); - httpsURLConnection.setInstanceFollowRedirects(false); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); - httpsURLConnection.setRequestMethod("HEAD"); - if (httpsURLConnection.getResponseCode() == 301 || httpsURLConnection.getResponseCode() == 302) { - Map> map = httpsURLConnection.getHeaderFields(); + httpURLConnection = (HttpsURLConnection) url.openConnection(); + httpURLConnection.setRequestProperty("http.keepAlive", "false"); + httpURLConnection.setInstanceFollowRedirects(false); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); + } + httpURLConnection.setRequestMethod("HEAD"); + if (httpURLConnection.getResponseCode() == 301 || httpURLConnection.getResponseCode() == 302) { + Map> map = httpURLConnection.getHeaderFields(); for (Map.Entry> entry : map.entrySet()) { if (entry.toString().toLowerCase().startsWith("location")) { Matcher matcher = urlPattern.matcher(entry.toString()); @@ -246,7 +249,7 @@ public class HttpsConnection { } } } - httpsURLConnection.getInputStream().close(); + httpURLConnection.getInputStream().close(); if (redirect != null && redirect.compareTo(urlConnection) != 0) { URL redirectURL = new URL(redirect); String host = redirectURL.getHost(); @@ -266,96 +269,51 @@ public class HttpsConnection { public String get(String urlConnection) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { URL url = new URL(urlConnection); - if (urlConnection.startsWith("https://")) { - if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); - else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setConnectTimeout(30 * 1000); - httpsURLConnection.setRequestProperty("http.keepAlive", "false"); - httpsURLConnection.setRequestProperty("Content-Type", "application/json"); - httpsURLConnection.setRequestProperty("Accept", "application/json"); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); - httpsURLConnection.setRequestMethod("GET"); - httpsURLConnection.setDefaultUseCaches(true); - httpsURLConnection.setUseCaches(true); - String response; - if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - response = converToString(httpsURLConnection.getInputStream()); - } else { - String error = null; - if (httpsURLConnection.getErrorStream() != null) { - InputStream stream = httpsURLConnection.getErrorStream(); - if (stream == null) { - stream = httpsURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpsURLConnection.getResponseCode(); - try { - httpsURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } - getSinceMaxId(); - httpsURLConnection.getInputStream().close(); - return response; - } else { - if (proxy != null) - httpURLConnection = (HttpURLConnection) url.openConnection(proxy); - else - httpURLConnection = (HttpURLConnection) url.openConnection(); - httpURLConnection.setConnectTimeout(30 * 1000); - httpURLConnection.setRequestProperty("http.keepAlive", "false"); - httpURLConnection.setRequestProperty("Content-Type", "application/json"); - httpURLConnection.setRequestProperty("Accept", "application/json"); - httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpURLConnection.setRequestMethod("GET"); - httpURLConnection.setDefaultUseCaches(true); - httpURLConnection.setUseCaches(true); - String response; - if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - response = converToString(httpURLConnection.getInputStream()); - } else { - String error = null; - if (httpURLConnection.getErrorStream() != null) { - InputStream stream = httpURLConnection.getErrorStream(); - if (stream == null) { - stream = httpURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpURLConnection.getResponseCode(); - try { - httpURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } - getSinceMaxId(); - httpURLConnection.getInputStream().close(); - return response; + if (proxy != null) + httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); + else + httpURLConnection = (HttpsURLConnection) url.openConnection(); + httpURLConnection.setConnectTimeout(30 * 1000); + httpURLConnection.setRequestProperty("http.keepAlive", "false"); + httpURLConnection.setRequestProperty("Content-Type", "application/json"); + httpURLConnection.setRequestProperty("Accept", "application/json"); + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); } - - + httpURLConnection.setRequestMethod("GET"); + httpURLConnection.setDefaultUseCaches(true); + httpURLConnection.setUseCaches(true); + String response; + if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { + getSinceMaxId(); + response = converToString(httpURLConnection.getInputStream()); + } else { + String error = null; + if (httpURLConnection.getErrorStream() != null) { + InputStream stream = httpURLConnection.getErrorStream(); + if (stream == null) { + stream = httpURLConnection.getInputStream(); + } + try (Scanner scanner = new Scanner(stream)) { + scanner.useDelimiter("\\Z"); + if (scanner.hasNext()) { + error = scanner.next(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + int responseCode = httpURLConnection.getResponseCode(); + try { + httpURLConnection.getInputStream().close(); + } catch (Exception ignored) { + } + throw new HttpsConnectionException(responseCode, error); + } + getSinceMaxId(); + httpURLConnection.getInputStream().close(); + return response; } @@ -378,243 +336,35 @@ public class HttpsConnection { 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 - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpsURLConnection.setConnectTimeout(timeout * 1000); - httpsURLConnection.setDoOutput(true); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); - httpsURLConnection.setRequestMethod("POST"); - if (token != null && !token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", token); - httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - - - httpsURLConnection.getOutputStream().write(postDataBytes); - String response; - if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - response = converToString(httpsURLConnection.getInputStream()); - } else { - String error = null; - if (httpsURLConnection.getErrorStream() != null) { - InputStream stream = httpsURLConnection.getErrorStream(); - if (stream == null) { - stream = httpsURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpsURLConnection.getResponseCode(); - try { - httpsURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } - getSinceMaxId(); - httpsURLConnection.getInputStream().close(); - return response; - } else { - if (proxy != null) - httpURLConnection = (HttpURLConnection) url.openConnection(proxy); - else - httpURLConnection = (HttpURLConnection) url.openConnection(); - httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpURLConnection.setConnectTimeout(timeout * 1000); - httpURLConnection.setDoOutput(true); - httpURLConnection.setRequestMethod("POST"); - if (token != null && !token.startsWith("Basic ")) - httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpURLConnection.setRequestProperty("Authorization", token); - httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - - httpURLConnection.getOutputStream().write(postDataBytes); - String response; - if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - response = converToString(httpURLConnection.getInputStream()); - } else { - String error = null; - if (httpURLConnection.getErrorStream() != null) { - InputStream stream = httpURLConnection.getErrorStream(); - if (stream == null) { - stream = httpURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpURLConnection.getResponseCode(); - try { - httpURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } - getSinceMaxId(); - httpURLConnection.getInputStream().close(); - return response; - } - - } - - - 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://")) { - - if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); - else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpsURLConnection.setConnectTimeout(timeout * 1000); - httpsURLConnection.setDoOutput(true); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); - httpsURLConnection.setRequestProperty("Content-Type", "application/json"); - httpsURLConnection.setRequestProperty("Accept", "application/json"); - httpsURLConnection.setRequestMethod("POST"); - if (token != null && !token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", token); - httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - - - httpsURLConnection.getOutputStream().write(postDataBytes); - String response; - if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - response = converToString(httpsURLConnection.getInputStream()); - } else { - String error = null; - if (httpsURLConnection.getErrorStream() != null) { - InputStream stream = httpsURLConnection.getErrorStream(); - if (stream == null) { - stream = httpsURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpsURLConnection.getResponseCode(); - try { - httpsURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } - getSinceMaxId(); - httpsURLConnection.getInputStream().close(); - return response; - } else { - if (proxy != null) - httpURLConnection = (HttpURLConnection) url.openConnection(proxy); - else - httpURLConnection = (HttpURLConnection) url.openConnection(); - httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpURLConnection.setConnectTimeout(timeout * 1000); - httpURLConnection.setDoOutput(true); - httpURLConnection.setRequestMethod("POST"); - if (token != null && !token.startsWith("Basic ")) - httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpURLConnection.setRequestProperty("Authorization", token); - httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - - httpURLConnection.getOutputStream().write(postDataBytes); - String response; - if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - response = converToString(httpURLConnection.getInputStream()); - } else { - String error = null; - if (httpURLConnection.getErrorStream() != null) { - InputStream stream = httpURLConnection.getErrorStream(); - if (stream == null) { - stream = httpURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpURLConnection.getResponseCode(); - try { - httpURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } - getSinceMaxId(); - httpURLConnection.getInputStream().close(); - return response; - } - - } - - @SuppressWarnings("SameParameterValue") - String postMisskey(String urlConnection, int timeout, JSONObject paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { - URL url = new URL(urlConnection); - byte[] postDataBytes = paramaters.toString().getBytes(StandardCharsets.UTF_8); - if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); + httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpsURLConnection.setConnectTimeout(timeout * 1000); - httpsURLConnection.setDoOutput(true); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); - httpsURLConnection.setRequestMethod("POST"); + httpURLConnection = (HttpsURLConnection) url.openConnection(); + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + httpURLConnection.setConnectTimeout(timeout * 1000); + httpURLConnection.setDoOutput(true); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); + } + httpURLConnection.setRequestMethod("POST"); if (token != null && !token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); + httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); else if (token != null && token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", token); - httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); + httpURLConnection.setRequestProperty("Authorization", token); + httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - httpsURLConnection.getOutputStream().write(postDataBytes); + httpURLConnection.getOutputStream().write(postDataBytes); String response; - if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { + if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { getSinceMaxId(); - response = converToString(httpsURLConnection.getInputStream()); + response = converToString(httpURLConnection.getInputStream()); } else { String error = null; - if (httpsURLConnection.getErrorStream() != null) { - InputStream stream = httpsURLConnection.getErrorStream(); + if (httpURLConnection.getErrorStream() != null) { + InputStream stream = httpURLConnection.getErrorStream(); if (stream == null) { - stream = httpsURLConnection.getInputStream(); + stream = httpURLConnection.getInputStream(); } try (Scanner scanner = new Scanner(stream)) { scanner.useDelimiter("\\Z"); @@ -625,15 +375,131 @@ public class HttpsConnection { e.printStackTrace(); } } - int responseCode = httpsURLConnection.getResponseCode(); + int responseCode = httpURLConnection.getResponseCode(); try { - httpsURLConnection.getInputStream().close(); + httpURLConnection.getInputStream().close(); } catch (Exception ignored) { } throw new HttpsConnectionException(responseCode, error); } getSinceMaxId(); - httpsURLConnection.getInputStream().close(); + httpURLConnection.getInputStream().close(); + return response; + } + + + 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 (proxy != null) + httpURLConnection = (HttpURLConnection) url.openConnection(proxy); + else + httpURLConnection = (HttpURLConnection) url.openConnection(); + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + httpURLConnection.setConnectTimeout(timeout * 1000); + httpURLConnection.setDoOutput(true); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); + } + httpURLConnection.setRequestProperty("Content-Type", "application/json"); + httpURLConnection.setRequestProperty("Accept", "application/json"); + httpURLConnection.setRequestMethod("POST"); + if (token != null && !token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); + else if (token != null && token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", token); + httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); + + + httpURLConnection.getOutputStream().write(postDataBytes); + String response; + if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { + getSinceMaxId(); + response = converToString(httpURLConnection.getInputStream()); + } else { + String error = null; + if (httpURLConnection.getErrorStream() != null) { + InputStream stream = httpURLConnection.getErrorStream(); + if (stream == null) { + stream = httpURLConnection.getInputStream(); + } + try (Scanner scanner = new Scanner(stream)) { + scanner.useDelimiter("\\Z"); + if (scanner.hasNext()) { + error = scanner.next(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + int responseCode = httpURLConnection.getResponseCode(); + try { + httpURLConnection.getInputStream().close(); + } catch (Exception ignored) { + } + throw new HttpsConnectionException(responseCode, error); + } + getSinceMaxId(); + httpURLConnection.getInputStream().close(); + return response; + + } + + @SuppressWarnings("SameParameterValue") + String postMisskey(String urlConnection, int timeout, JSONObject paramaters, String token) throws IOException, NoSuchAlgorithmException, KeyManagementException, HttpsConnectionException { + URL url = new URL(urlConnection); + byte[] postDataBytes = paramaters.toString().getBytes(StandardCharsets.UTF_8); + + if (proxy != null) + httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); + else + httpURLConnection = (HttpsURLConnection) url.openConnection(); + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + httpURLConnection.setConnectTimeout(timeout * 1000); + httpURLConnection.setDoOutput(true); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); + } + httpURLConnection.setRequestMethod("POST"); + if (token != null && !token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); + else if (token != null && token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", token); + httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); + + + httpURLConnection.getOutputStream().write(postDataBytes); + String response; + if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { + getSinceMaxId(); + response = converToString(httpURLConnection.getInputStream()); + } else { + String error = null; + if (httpURLConnection.getErrorStream() != null) { + InputStream stream = httpURLConnection.getErrorStream(); + if (stream == null) { + stream = httpURLConnection.getInputStream(); + } + try (Scanner scanner = new Scanner(stream)) { + scanner.useDelimiter("\\Z"); + if (scanner.hasNext()) { + error = scanner.next(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + int responseCode = httpURLConnection.getResponseCode(); + try { + httpURLConnection.getInputStream().close(); + } catch (Exception ignored) { + } + throw new HttpsConnectionException(responseCode, error); + } + getSinceMaxId(); + httpURLConnection.getInputStream().close(); return response; } @@ -646,145 +512,73 @@ public class HttpsConnection { public void download(final String downloadUrl, final OnDownloadInterface listener) { new Thread(() -> { URL url; - HttpsURLConnection httpsURLConnection; - HttpURLConnection httpURLConnection; - if (downloadUrl.startsWith("https://")) { - try { - url = new URL(downloadUrl); - if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); - else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - int responseCode = httpsURLConnection.getResponseCode(); + try { + url = new URL(downloadUrl); + if (proxy != null) + httpURLConnection = (HttpURLConnection) url.openConnection(proxy); + else + httpURLConnection = (HttpURLConnection) url.openConnection(); + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + int responseCode = httpURLConnection.getResponseCode(); - // always check HTTP response code first - if (responseCode == HttpURLConnection.HTTP_OK) { - String fileName = ""; - String disposition = httpsURLConnection.getHeaderField("Content-Disposition"); + // always check HTTP response code first + if (responseCode == HttpURLConnection.HTTP_OK) { + String fileName = ""; + String disposition = httpURLConnection.getHeaderField("Content-Disposition"); - if (disposition != null) { - // extracts file name from header field - int index = disposition.indexOf("filename="); - if (index > 0) { - fileName = disposition.substring(index + 10, - disposition.length() - 1); - } - } else { - // extracts file name from URL - fileName = downloadUrl.substring(downloadUrl.lastIndexOf("/") + 1 - ); + if (disposition != null) { + // extracts file name from header field + int index = disposition.indexOf("filename="); + if (index > 0) { + fileName = disposition.substring(index + 10, + disposition.length() - 1); } - fileName = FileNameCleaner.cleanFileName(fileName); - // opens input stream from the HTTP connection - InputStream inputStream = httpsURLConnection.getInputStream(); - File saveDir = context.getCacheDir(); - final String saveFilePath = saveDir + File.separator + fileName; - - // opens an output stream to save into file - FileOutputStream outputStream = new FileOutputStream(saveFilePath); - - int bytesRead; - byte[] buffer = new byte[CHUNK_SIZE]; - int contentSize = httpsURLConnection.getContentLength(); - int downloadedFileSize = 0; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); - downloadedFileSize += bytesRead; - if (context instanceof SlideMediaActivity) { - final int currentProgress = (downloadedFileSize * 100) / contentSize; - ((SlideMediaActivity) context).runOnUiThread(() -> listener.onUpdateProgress(currentProgress > 0 ? currentProgress : 101)); - } - } - outputStream.close(); - inputStream.close(); - if (context instanceof TootActivity) - ((TootActivity) context).runOnUiThread(() -> listener.onDownloaded(saveFilePath, downloadUrl, null)); - if (context instanceof SlideMediaActivity) - ((SlideMediaActivity) context).runOnUiThread(() -> listener.onDownloaded(saveFilePath, downloadUrl, null)); } else { - final Error error = new Error(); - error.setError(String.valueOf(responseCode)); - if (context instanceof TootActivity) - ((TootActivity) context).runOnUiThread(() -> listener.onDownloaded(null, downloadUrl, error)); - if (context instanceof SlideMediaActivity) - ((SlideMediaActivity) context).runOnUiThread(() -> listener.onDownloaded(null, downloadUrl, error)); - + // extracts file name from URL + fileName = downloadUrl.substring(downloadUrl.lastIndexOf("/") + 1 + ); } - } catch (IOException e) { - Error error = new Error(); - error.setError(context.getString(R.string.toast_error)); - } + fileName = FileNameCleaner.cleanFileName(fileName); + // opens input stream from the HTTP connection + InputStream inputStream = httpURLConnection.getInputStream(); + File saveDir = context.getCacheDir(); + final String saveFilePath = saveDir + File.separator + fileName; - } else { - try { - url = new URL(downloadUrl); - if (proxy != null) - httpURLConnection = (HttpURLConnection) url.openConnection(proxy); - else - httpURLConnection = (HttpURLConnection) url.openConnection(); - httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); - int responseCode = httpURLConnection.getResponseCode(); + // opens an output stream to save into file + FileOutputStream outputStream = new FileOutputStream(saveFilePath); - // always check HTTP response code first - if (responseCode == HttpURLConnection.HTTP_OK) { - String fileName = ""; - String disposition = httpURLConnection.getHeaderField("Content-Disposition"); - - if (disposition != null) { - // extracts file name from header field - int index = disposition.indexOf("filename="); - if (index > 0) { - fileName = disposition.substring(index + 10, - disposition.length() - 1); - } - } else { - // extracts file name from URL - fileName = downloadUrl.substring(downloadUrl.lastIndexOf("/") + 1 - ); + int bytesRead; + byte[] buffer = new byte[CHUNK_SIZE]; + int contentSize = httpURLConnection.getContentLength(); + int downloadedFileSize = 0; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + downloadedFileSize += bytesRead; + if (context instanceof SlideMediaActivity) { + final int currentProgress = (downloadedFileSize * 100) / contentSize; + ((SlideMediaActivity) context).runOnUiThread(() -> listener.onUpdateProgress(currentProgress > 0 ? currentProgress : 101)); } - fileName = FileNameCleaner.cleanFileName(fileName); - // opens input stream from the HTTP connection - InputStream inputStream = httpURLConnection.getInputStream(); - File saveDir = context.getCacheDir(); - final String saveFilePath = saveDir + File.separator + fileName; - - // opens an output stream to save into file - FileOutputStream outputStream = new FileOutputStream(saveFilePath); - - int bytesRead; - byte[] buffer = new byte[CHUNK_SIZE]; - int contentSize = httpURLConnection.getContentLength(); - int downloadedFileSize = 0; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); - downloadedFileSize += bytesRead; - if (context instanceof SlideMediaActivity) { - final int currentProgress = (downloadedFileSize * 100) / contentSize; - ((SlideMediaActivity) context).runOnUiThread(() -> listener.onUpdateProgress(currentProgress > 0 ? currentProgress : 101)); - } - } - outputStream.close(); - inputStream.close(); - if (context instanceof TootActivity) - ((TootActivity) context).runOnUiThread(() -> listener.onDownloaded(saveFilePath, downloadUrl, null)); - if (context instanceof SlideMediaActivity) - ((SlideMediaActivity) context).runOnUiThread(() -> listener.onDownloaded(saveFilePath, downloadUrl, null)); - } else { - final Error error = new Error(); - error.setError(String.valueOf(responseCode)); - if (context instanceof TootActivity) - ((TootActivity) context).runOnUiThread(() -> listener.onDownloaded(null, downloadUrl, error)); - if (context instanceof SlideMediaActivity) - ((SlideMediaActivity) context).runOnUiThread(() -> listener.onDownloaded(null, downloadUrl, error)); - } - } catch (IOException e) { - Error error = new Error(); - error.setError(context.getString(R.string.toast_error)); - } + outputStream.close(); + inputStream.close(); + if (context instanceof TootActivity) + ((TootActivity) context).runOnUiThread(() -> listener.onDownloaded(saveFilePath, downloadUrl, null)); + if (context instanceof SlideMediaActivity) + ((SlideMediaActivity) context).runOnUiThread(() -> listener.onDownloaded(saveFilePath, downloadUrl, null)); + } else { + final Error error = new Error(); + error.setError(String.valueOf(responseCode)); + if (context instanceof TootActivity) + ((TootActivity) context).runOnUiThread(() -> listener.onDownloaded(null, downloadUrl, error)); + if (context instanceof SlideMediaActivity) + ((SlideMediaActivity) context).runOnUiThread(() -> listener.onDownloaded(null, downloadUrl, error)); + } + } catch (IOException e) { + Error error = new Error(); + error.setError(context.getString(R.string.toast_error)); } + }).start(); } @@ -797,50 +591,29 @@ public class HttpsConnection { } catch (MalformedURLException e) { return null; } - if (downloadUrl.startsWith("https://")) { - try { - if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); - else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - int responseCode = httpsURLConnection.getResponseCode(); - // always check HTTP response code first - if (responseCode >= 200 && responseCode < 400) { - // opens input stream from the HTTP connection - return httpsURLConnection.getInputStream(); - } - httpsURLConnection.getInputStream().close(); - } catch (IOException | NoSuchAlgorithmException | KeyManagementException ignored) { + try { + if (proxy != null) + httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); + else + httpURLConnection = (HttpsURLConnection) url.openConnection(); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); } - if (httpsURLConnection != null) - try { - httpsURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - } else { - try { - if (proxy != null) - httpURLConnection = (HttpURLConnection) url.openConnection(proxy); - else - httpURLConnection = (HttpURLConnection) url.openConnection(); - httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); - int responseCode = httpURLConnection.getResponseCode(); - // always check HTTP response code first - if (responseCode >= 200 && responseCode < 400) { - // opens input stream from the HTTP connection - return httpURLConnection.getInputStream(); - } - httpURLConnection.getInputStream().close(); - } catch (IOException ignored) { + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + int responseCode = httpURLConnection.getResponseCode(); + // always check HTTP response code first + if (responseCode >= 200 && responseCode < 400) { + // opens input stream from the HTTP connection + return httpURLConnection.getInputStream(); } - if (httpURLConnection != null) - try { - httpURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } + httpURLConnection.getInputStream().close(); + } catch (IOException | NoSuchAlgorithmException | KeyManagementException ignored) { } + if (httpURLConnection != null) + try { + httpURLConnection.getInputStream().close(); + } catch (Exception ignored) { + } return null; } @@ -925,128 +698,64 @@ public class HttpsConnection { } byte[] postDataBytes = (postData.toString()).getBytes(StandardCharsets.UTF_8); - if (urlConnection.startsWith("https://")) { - if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); - else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpsURLConnection.setConnectTimeout(timeout * 1000); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { - httpsURLConnection.setRequestMethod("PATCH"); - } else { - httpsURLConnection.setRequestProperty("X-HTTP-Method-Override", "PATCH"); - httpsURLConnection.setRequestMethod("POST"); - } - if (token != null && !token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", token); - httpsURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - httpsURLConnection.setDoOutput(true); - - String response; - OutputStream outputStream = httpsURLConnection.getOutputStream(); - outputStream.write(postDataBytes); - if (avatar != null) { - uploadMedia(urlConnection, avatar, null, avatarName); - } - if (header != null) { - uploadMedia(urlConnection, null, header, headerName); - } - if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { - response = converToString(httpsURLConnection.getInputStream()); - } else { - String error = null; - if (httpsURLConnection.getErrorStream() != null) { - InputStream stream = httpsURLConnection.getErrorStream(); - if (stream == null) { - stream = httpsURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpsURLConnection.getResponseCode(); - try { - httpsURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - try { - httpsURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } - httpsURLConnection.getInputStream().close(); - return response; - } else { - if (proxy != null) - httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); - else - httpURLConnection = (HttpsURLConnection) url.openConnection(); - httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpURLConnection.setConnectTimeout(timeout * 1000); - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { - httpURLConnection.setRequestMethod("PATCH"); - } else { - httpURLConnection.setRequestProperty("X-HTTP-Method-Override", "PATCH"); - httpURLConnection.setRequestMethod("POST"); - } - if (token != null && !token.startsWith("Basic ")) - httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpURLConnection.setRequestProperty("Authorization", token); - httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - httpURLConnection.setDoOutput(true); - - - OutputStream outputStream = httpURLConnection.getOutputStream(); - outputStream.write(postDataBytes); - if (avatar != null) { - uploadMedia(urlConnection, avatar, null, avatarName); - } - if (header != null) { - uploadMedia(urlConnection, null, header, headerName); - } - String response; - if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { - response = converToString(httpsURLConnection.getInputStream()); - } else { - String error = null; - if (httpURLConnection.getErrorStream() != null) { - InputStream stream = httpURLConnection.getErrorStream(); - if (stream == null) { - stream = httpURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpURLConnection.getResponseCode(); - try { - httpURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - - throw new HttpsConnectionException(responseCode, error); - } - httpURLConnection.getInputStream().close(); - return response; + if (proxy != null) + httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); + else + httpURLConnection = (HttpsURLConnection) url.openConnection(); + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + httpURLConnection.setConnectTimeout(timeout * 1000); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); } + httpURLConnection.setRequestMethod("PATCH"); + if (token != null && !token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); + else if (token != null && token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", token); + httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); + httpURLConnection.setDoOutput(true); + + String response; + OutputStream outputStream = httpURLConnection.getOutputStream(); + outputStream.write(postDataBytes); + if (avatar != null) { + uploadMedia(urlConnection, avatar, null, avatarName); + } + if (header != null) { + uploadMedia(urlConnection, null, header, headerName); + } + if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { + response = converToString(httpURLConnection.getInputStream()); + } else { + String error = null; + if (httpURLConnection.getErrorStream() != null) { + InputStream stream = httpURLConnection.getErrorStream(); + if (stream == null) { + stream = httpURLConnection.getInputStream(); + } + try (Scanner scanner = new Scanner(stream)) { + scanner.useDelimiter("\\Z"); + if (scanner.hasNext()) { + error = scanner.next(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + int responseCode = httpURLConnection.getResponseCode(); + try { + httpURLConnection.getInputStream().close(); + } catch (Exception ignored) { + } + try { + httpURLConnection.getInputStream().close(); + } catch (Exception ignored) { + } + throw new HttpsConnectionException(responseCode, error); + } + httpURLConnection.getInputStream().close(); + return response; } @@ -1071,104 +780,56 @@ public class HttpsConnection { } byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); - if (urlConnection.startsWith("https://")) { - if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); - else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpsURLConnection.setConnectTimeout(timeout * 1000); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); - if (token != null && !token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", token); - httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - - httpsURLConnection.setRequestMethod("PUT"); - httpsURLConnection.setDoInput(true); - httpsURLConnection.setDoOutput(true); - - httpsURLConnection.getOutputStream().write(postDataBytes); - String response; - if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - response = converToString(httpsURLConnection.getInputStream()); - } else { - String error = null; - if (httpsURLConnection.getErrorStream() != null) { - InputStream stream = httpsURLConnection.getErrorStream(); - if (stream == null) { - stream = httpsURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpsURLConnection.getResponseCode(); - try { - httpsURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } - getSinceMaxId(); - httpsURLConnection.getInputStream().close(); - return response; - } else { - if (proxy != null) - httpURLConnection = (HttpURLConnection) url.openConnection(proxy); - else - httpURLConnection = (HttpURLConnection) url.openConnection(); - httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpURLConnection.setConnectTimeout(timeout * 1000); - if (token != null && !token.startsWith("Basic ")) - httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpURLConnection.setRequestProperty("Authorization", token); - httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - - httpURLConnection.setRequestMethod("PUT"); - httpURLConnection.setDoInput(true); - httpURLConnection.setDoOutput(true); - - httpURLConnection.getOutputStream().write(postDataBytes); - String response; - if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - response = converToString(httpURLConnection.getInputStream()); - } else { - String error = null; - if (httpURLConnection.getErrorStream() != null) { - InputStream stream = httpURLConnection.getErrorStream(); - if (stream == null) { - stream = httpURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpURLConnection.getResponseCode(); - try { - httpURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } - getSinceMaxId(); - httpURLConnection.getInputStream().close(); - return response; + if (proxy != null) + httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); + else + httpURLConnection = (HttpsURLConnection) url.openConnection(); + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + httpURLConnection.setConnectTimeout(timeout * 1000); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); } + if (token != null && !token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); + else if (token != null && token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", token); + httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); + + httpURLConnection.setRequestMethod("PUT"); + httpURLConnection.setDoInput(true); + httpURLConnection.setDoOutput(true); + + httpURLConnection.getOutputStream().write(postDataBytes); + String response; + if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { + getSinceMaxId(); + response = converToString(httpURLConnection.getInputStream()); + } else { + String error = null; + if (httpURLConnection.getErrorStream() != null) { + InputStream stream = httpURLConnection.getErrorStream(); + if (stream == null) { + stream = httpURLConnection.getInputStream(); + } + try (Scanner scanner = new Scanner(stream)) { + scanner.useDelimiter("\\Z"); + if (scanner.hasNext()) { + error = scanner.next(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + int responseCode = httpURLConnection.getResponseCode(); + try { + httpURLConnection.getInputStream().close(); + } catch (Exception ignored) { + } + throw new HttpsConnectionException(responseCode, error); + } + getSinceMaxId(); + httpURLConnection.getInputStream().close(); + return response; } @@ -1193,95 +854,50 @@ public class HttpsConnection { } byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8); - if (urlConnection.startsWith("https://")) { - if (proxy != null) - httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy); - else - httpsURLConnection = (HttpsURLConnection) url.openConnection(); - httpsURLConnection.setRequestProperty("User-Agent", USER_AGENT); - httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance)); - if (token != null && !token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", token); - httpsURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - httpsURLConnection.setRequestMethod("DELETE"); - httpsURLConnection.setConnectTimeout(timeout * 1000); - httpsURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); + if (proxy != null) + httpURLConnection = (HttpsURLConnection) url.openConnection(proxy); + else + httpURLConnection = (HttpsURLConnection) url.openConnection(); + httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); + if (httpURLConnection instanceof HttpsURLConnection) { + ((HttpsURLConnection) httpURLConnection).setSSLSocketFactory(new TLSSocketFactory(this.instance)); + } + if (token != null && !token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", "Bearer " + token); + else if (token != null && token.startsWith("Basic ")) + httpURLConnection.setRequestProperty("Authorization", token); + httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + httpURLConnection.setRequestMethod("DELETE"); + httpURLConnection.setConnectTimeout(timeout * 1000); + httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - httpsURLConnection.getOutputStream().write(postDataBytes); - if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - httpsURLConnection.getInputStream().close(); - return httpsURLConnection.getResponseCode(); - } else { - String error = null; - if (httpsURLConnection.getErrorStream() != null) { - InputStream stream = httpsURLConnection.getErrorStream(); - if (stream == null) { - stream = httpsURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - int responseCode = httpsURLConnection.getResponseCode(); - try { - httpsURLConnection.getInputStream().close(); - } catch (Exception ignored) { - } - throw new HttpsConnectionException(responseCode, error); - } + httpURLConnection.getOutputStream().write(postDataBytes); + if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { + getSinceMaxId(); + httpURLConnection.getInputStream().close(); + return httpURLConnection.getResponseCode(); } else { - if (proxy != null) - httpURLConnection = (HttpURLConnection) url.openConnection(proxy); - else - httpURLConnection = (HttpURLConnection) url.openConnection(); - httpURLConnection.setRequestProperty("User-Agent", USER_AGENT); - if (token != null && !token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token); - else if (token != null && token.startsWith("Basic ")) - httpsURLConnection.setRequestProperty("Authorization", token); - httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); - httpURLConnection.setRequestMethod("DELETE"); - httpURLConnection.setConnectTimeout(timeout * 1000); - httpURLConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); - - httpURLConnection.getOutputStream().write(postDataBytes); - - - if (httpURLConnection.getResponseCode() >= 200 && httpURLConnection.getResponseCode() < 400) { - getSinceMaxId(); - httpURLConnection.getInputStream().close(); - return httpURLConnection.getResponseCode(); - } else { - String error = null; - if (httpURLConnection.getErrorStream() != null) { - InputStream stream = httpURLConnection.getErrorStream(); - if (stream == null) { - stream = httpURLConnection.getInputStream(); - } - try (Scanner scanner = new Scanner(stream)) { - scanner.useDelimiter("\\Z"); - if (scanner.hasNext()) { - error = scanner.next(); - } - } catch (Exception e) { - e.printStackTrace(); - } + String error = null; + if (httpURLConnection.getErrorStream() != null) { + InputStream stream = httpURLConnection.getErrorStream(); + if (stream == null) { + stream = httpURLConnection.getInputStream(); } - int responseCode = httpURLConnection.getResponseCode(); - try { - httpURLConnection.getInputStream().close(); - } catch (Exception ignored) { + try (Scanner scanner = new Scanner(stream)) { + scanner.useDelimiter("\\Z"); + if (scanner.hasNext()) { + error = scanner.next(); + } + } catch (Exception e) { + e.printStackTrace(); } - throw new HttpsConnectionException(responseCode, error); } + int responseCode = httpURLConnection.getResponseCode(); + try { + httpURLConnection.getInputStream().close(); + } catch (Exception ignored) { + } + throw new HttpsConnectionException(responseCode, error); } } @@ -1297,53 +913,30 @@ public class HttpsConnection { private void getSinceMaxId() { if (Helper.getLiveInstanceWithProtocol(context) == null) return; - if (Helper.getLiveInstanceWithProtocol(context).startsWith("https://")) { - if (httpsURLConnection == null) - return; - Map> map = httpsURLConnection.getHeaderFields(); + if (httpURLConnection == null) + return; + Map> map = httpURLConnection.getHeaderFields(); - for (Map.Entry> entry : map.entrySet()) { - if (entry.toString().startsWith("Link") || entry.toString().startsWith("link")) { - Pattern patternMaxId = Pattern.compile("max_id=([0-9a-zA-Z]+).*"); - Matcher matcherMaxId = patternMaxId.matcher(entry.toString()); - if (matcherMaxId.find()) { - max_id = matcherMaxId.group(1); - } - if (entry.toString().startsWith("Link")) { - Pattern patternSinceId = Pattern.compile("since_id=([0-9a-zA-Z]+).*"); - Matcher matcherSinceId = patternSinceId.matcher(entry.toString()); - if (matcherSinceId.find()) { - since_id = matcherSinceId.group(1); - } - - } - } else if (entry.toString().startsWith("Min-Id") || entry.toString().startsWith("min-id")) { - Pattern patternMaxId = Pattern.compile("min-id=\\[([0-9a-zA-Z]+).*]"); - Matcher matcherMaxId = patternMaxId.matcher(entry.toString()); - if (matcherMaxId.find()) { - max_id = matcherMaxId.group(1); - } + for (Map.Entry> entry : map.entrySet()) { + if (entry.toString().startsWith("Link") || entry.toString().startsWith("link")) { + Pattern patternMaxId = Pattern.compile("max_id=([0-9a-zA-Z]+).*"); + Matcher matcherMaxId = patternMaxId.matcher(entry.toString()); + if (matcherMaxId.find()) { + max_id = matcherMaxId.group(1); } - } - } else { - if (httpURLConnection == null) - return; - Map> map = httpURLConnection.getHeaderFields(); - for (Map.Entry> entry : map.entrySet()) { - if (entry.toString().startsWith("Link") || entry.toString().startsWith("link")) { - Pattern patternMaxId = Pattern.compile("max_id=([0-9a-zA-Z]+).*"); - Matcher matcherMaxId = patternMaxId.matcher(entry.toString()); - if (matcherMaxId.find()) { - max_id = matcherMaxId.group(1); + if (entry.toString().startsWith("Link")) { + Pattern patternSinceId = Pattern.compile("since_id=([0-9a-zA-Z]+).*"); + Matcher matcherSinceId = patternSinceId.matcher(entry.toString()); + if (matcherSinceId.find()) { + since_id = matcherSinceId.group(1); } - if (entry.toString().startsWith("Link")) { - Pattern patternSinceId = Pattern.compile("since_id=([0-9a-zA-Z]+).*"); - Matcher matcherSinceId = patternSinceId.matcher(entry.toString()); - if (matcherSinceId.find()) { - since_id = matcherSinceId.group(1); - } - } + } + } else if (entry.toString().startsWith("Min-Id") || entry.toString().startsWith("min-id")) { + Pattern patternMaxId = Pattern.compile("min-id=\\[([0-9a-zA-Z]+).*]"); + Matcher matcherMaxId = patternMaxId.matcher(entry.toString()); + if (matcherMaxId.find()) { + max_id = matcherMaxId.group(1); } } } @@ -1355,18 +948,10 @@ public class HttpsConnection { } int getActionCode() { - if (Helper.getLiveInstanceWithProtocol(context).startsWith("https://")) { - try { - return httpsURLConnection.getResponseCode(); - } catch (IOException e) { - return -1; - } - } else { - try { - return httpURLConnection.getResponseCode(); - } catch (IOException e) { - return -1; - } + try { + return httpURLConnection.getResponseCode(); + } catch (IOException e) { + return -1; } } diff --git a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java index 893082aa7..4479b76df 100644 --- a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java @@ -127,7 +127,6 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot private final List translators = new ArrayList<>(); private type type; private Context context; - private AsyncTask asyncTask; private int countTrans, countLanguage, notificationCount, ledCount, videoSpinnerCount, liveNotificationCount; private AccountSearchDevAdapter translatorManager; private TextView set_folder; @@ -136,11 +135,9 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot //From: https://gist.github.com/asifmujteba/d89ba9074bc941de1eaa#file-asfurihelper - @TargetApi(Build.VERSION_CODES.KITKAT) public static String getPath(final Context context, final Uri uri) { - final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // DocumentProvider - if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { + if (DocumentsContract.isDocumentUri(context, uri)) { // ExternalStorageProvider if (isExternalStorageDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); @@ -2570,10 +2567,6 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot public void onDestroy() { super.onDestroy(); - if (type == LANGUAGE) { - if (asyncTask != null && asyncTask.getStatus() == AsyncTask.Status.RUNNING) - asyncTask.cancel(true); - } } public enum type { diff --git a/app/src/main/java/app/fedilab/android/fragments/TabLayoutNotificationsFragment.java b/app/src/main/java/app/fedilab/android/fragments/TabLayoutNotificationsFragment.java index 57a60bf57..e249602f3 100644 --- a/app/src/main/java/app/fedilab/android/fragments/TabLayoutNotificationsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/TabLayoutNotificationsFragment.java @@ -127,10 +127,11 @@ public class TabLayoutNotificationsFragment extends Fragment { tabLayout.addTab(tabFav); if (tabBoost.getCustomView() != null) tabLayout.addTab(tabBoost); - if (tabPoll.getCustomView() != null) - tabLayout.addTab(tabPoll); if (tabStatus.getCustomView() != null) tabLayout.addTab(tabStatus); + if (tabPoll.getCustomView() != null) + tabLayout.addTab(tabPoll); + tabLayout.addTab(tabFollow); if (theme == Helper.THEME_BLACK) @@ -196,7 +197,7 @@ public class TabLayoutNotificationsFragment extends Fragment { } @Override - public void onAttach(Context context) { + public void onAttach(@NotNull Context context) { super.onAttach(context); this.context = context; } diff --git a/app/src/main/java/app/fedilab/android/helper/BaseHelper.java b/app/src/main/java/app/fedilab/android/helper/BaseHelper.java index 05f80c42c..b89a79e16 100644 --- a/app/src/main/java/app/fedilab/android/helper/BaseHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/BaseHelper.java @@ -1139,8 +1139,8 @@ public class BaseHelper { channelTitle = context.getString(R.string.channel_notif_media); break; case TOOT: - channelId = "channel_toot"; - channelTitle = context.getString(R.string.channel_notif_toot); + channelId = "channel_status"; + channelTitle = context.getString(R.string.channel_notif_status); break; default: channelId = "channel_boost"; @@ -3454,16 +3454,26 @@ public class BaseHelper { ContentResolver resolver = context.getContentResolver(); Cursor returnCursor = resolver.query(uri, null, null, null, null); - assert returnCursor != null; - try { - int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); - returnCursor.moveToFirst(); - String name = returnCursor.getString(nameIndex); - returnCursor.close(); - Random r = new Random(); - int suf = r.nextInt(9999 - 1000) + 1000; - return suf + name; - } catch (Exception e) { + if (returnCursor != null) { + try { + int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); + returnCursor.moveToFirst(); + String name = returnCursor.getString(nameIndex); + returnCursor.close(); + Random r = new Random(); + int suf = r.nextInt(9999 - 1000) + 1000; + return suf + name; + } catch (Exception e) { + Random r = new Random(); + int suf = r.nextInt(9999 - 1000) + 1000; + ContentResolver cr = context.getContentResolver(); + String mime = cr.getType(uri); + if (mime != null && mime.split("/").length > 1) + return "__" + suf + "." + mime.split("/")[1]; + else + return "__" + suf + ".jpg"; + } + } else { Random r = new Random(); int suf = r.nextInt(9999 - 1000) + 1000; ContentResolver cr = context.getContentResolver(); diff --git a/app/src/main/java/app/fedilab/android/jobs/BaseNotificationsSyncJob.java b/app/src/main/java/app/fedilab/android/jobs/BaseNotificationsSyncJob.java index 3d1e7b86e..de23862ef 100644 --- a/app/src/main/java/app/fedilab/android/jobs/BaseNotificationsSyncJob.java +++ b/app/src/main/java/app/fedilab/android/jobs/BaseNotificationsSyncJob.java @@ -161,6 +161,7 @@ public class BaseNotificationsSyncJob extends Job { boolean notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION, true); boolean notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE, true); boolean notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL, true); + boolean notif_status = sharedpreferences.getBoolean(Helper.SET_NOTIF_STATUS, true); final String max_id = sharedpreferences.getString(Helper.LAST_NOTIFICATION_MAX_ID + account.getId() + account.getInstance(), null); final List notifications = new ArrayList<>(); int pos = 0; @@ -178,6 +179,7 @@ public class BaseNotificationsSyncJob extends Job { int newMentions = 0; int newShare = 0; int newPolls = 0; + int newStatus = 0; String notificationUrl = null; String title = null; final String message; @@ -199,6 +201,19 @@ public class BaseNotificationsSyncJob extends Job { } } break; + case "status": + notifType = Helper.NotifType.STATUS; + if (notif_status) { + newStatus++; + if (notificationUrl == null) { + notificationUrl = notification.getAccount().getAvatar(); + if (notification.getAccount().getDisplay_name() != null && notification.getAccount().getDisplay_name().length() > 0) + title = String.format("%s %s", notification.getAccount().getDisplay_name(), getContext().getString(R.string.notif_mention)); + else + title = String.format("@%s %s", notification.getAccount().getAcct(), getContext().getString(R.string.notif_mention)); + } + } + break; case "reblog": notifType = Helper.NotifType.BOOST; if (notif_share) { @@ -272,7 +287,7 @@ public class BaseNotificationsSyncJob extends Job { } } - int allNotifCount = newFollows + newAdds + newMentions + newShare + newPolls; + int allNotifCount = newFollows + newAdds + newMentions + newShare + newPolls + newStatus; if (allNotifCount > 0) { //Some others notification int other = allNotifCount - 1; diff --git a/app/src/main/java/app/fedilab/android/services/BackupStatusService.java b/app/src/main/java/app/fedilab/android/services/BackupStatusService.java index 901b42dbd..a4ec2eca9 100644 --- a/app/src/main/java/app/fedilab/android/services/BackupStatusService.java +++ b/app/src/main/java/app/fedilab/android/services/BackupStatusService.java @@ -67,12 +67,10 @@ public class BackupStatusService extends IntentService { * * @param name Used to name the worker thread, important only for debugging. */ - @SuppressWarnings("unused") public BackupStatusService(String name) { super(name); } - @SuppressWarnings("unused") public BackupStatusService() { super("BackupStatusService"); } diff --git a/app/src/main/java/app/fedilab/android/services/BaseLiveNotificationService.java b/app/src/main/java/app/fedilab/android/services/BaseLiveNotificationService.java index f749cae0c..0665bb38d 100644 --- a/app/src/main/java/app/fedilab/android/services/BaseLiveNotificationService.java +++ b/app/src/main/java/app/fedilab/android/services/BaseLiveNotificationService.java @@ -342,8 +342,9 @@ public abstract class BaseLiveNotificationService extends Service implements Net boolean notif_add = sharedpreferences.getBoolean(Helper.SET_NOTIF_ADD, true); boolean notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION, true); boolean notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE, true); + boolean notif_status = sharedpreferences.getBoolean(Helper.SET_NOTIF_STATUS, true); boolean notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL, true); - boolean somethingToPush = (notif_follow || notif_add || notif_mention || notif_share || notif_poll); + boolean somethingToPush = (notif_follow || notif_add || notif_mention || notif_share || notif_poll || notif_status); String message = null; if (somethingToPush) { switch (notification.getType()) { @@ -373,7 +374,7 @@ public abstract class BaseLiveNotificationService extends Service implements Net break; case "status": notifType = Helper.NotifType.STATUS; - if (notif_mention) { + if (notif_status) { if (notification.getAccount().getDisplay_name() != null && notification.getAccount().getDisplay_name().length() > 0) message = String.format("%s %s", notification.getAccount().getDisplay_name(), getString(R.string.notif_status)); else diff --git a/app/src/main/java/app/fedilab/android/services/BaseStreamingFederatedTimelineService.java b/app/src/main/java/app/fedilab/android/services/BaseStreamingFederatedTimelineService.java index fa7c57031..25a2ce323 100644 --- a/app/src/main/java/app/fedilab/android/services/BaseStreamingFederatedTimelineService.java +++ b/app/src/main/java/app/fedilab/android/services/BaseStreamingFederatedTimelineService.java @@ -60,12 +60,10 @@ public abstract class BaseStreamingFederatedTimelineService extends IntentServic * * @param name Used to name the worker thread, important only for debugging. */ - @SuppressWarnings("unused") public BaseStreamingFederatedTimelineService(String name) { super(name); } - @SuppressWarnings("unused") public BaseStreamingFederatedTimelineService() { super("StreamingFederatedTimelineService"); } diff --git a/app/src/main/java/app/fedilab/android/services/BaseStreamingHomeTimelineService.java b/app/src/main/java/app/fedilab/android/services/BaseStreamingHomeTimelineService.java index f77d90f33..818602db5 100644 --- a/app/src/main/java/app/fedilab/android/services/BaseStreamingHomeTimelineService.java +++ b/app/src/main/java/app/fedilab/android/services/BaseStreamingHomeTimelineService.java @@ -60,12 +60,10 @@ public abstract class BaseStreamingHomeTimelineService extends IntentService { * * @param name Used to name the worker thread, important only for debugging. */ - @SuppressWarnings("unused") public BaseStreamingHomeTimelineService(String name) { super(name); } - @SuppressWarnings("unused") public BaseStreamingHomeTimelineService() { super("StreamingHomeTimelineService"); } @@ -104,14 +102,6 @@ public abstract class BaseStreamingHomeTimelineService extends IntentService { Uri url = Uri.parse("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=user&access_token=" + accountStream.getToken()); AsyncHttpRequest.setDefaultHeaders(headers, url); Account finalAccountStream = accountStream; - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { - try { - AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(accountStream.getInstance()).getSSLContext()); - AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true); - } catch (KeyManagementException | NoSuchAlgorithmException e) { - e.printStackTrace(); - } - } AsyncHttpClient.getDefaultInstance().websocket("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=user&access_token=" + accountStream.getToken(), "wss", (ex, webSocket) -> { if (ex != null) { ex.printStackTrace(); diff --git a/app/src/main/java/app/fedilab/android/services/BaseStreamingLocalTimelineService.java b/app/src/main/java/app/fedilab/android/services/BaseStreamingLocalTimelineService.java index c61f2db17..614601c87 100644 --- a/app/src/main/java/app/fedilab/android/services/BaseStreamingLocalTimelineService.java +++ b/app/src/main/java/app/fedilab/android/services/BaseStreamingLocalTimelineService.java @@ -104,14 +104,6 @@ public abstract class BaseStreamingLocalTimelineService extends IntentService { Uri url = Uri.parse("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=public:local&access_token=" + accountStream.getToken()); AsyncHttpRequest.setDefaultHeaders(headers, url); Account finalAccountStream = accountStream; - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { - try { - AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(accountStream.getInstance()).getSSLContext()); - AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true); - } catch (KeyManagementException | NoSuchAlgorithmException e) { - e.printStackTrace(); - } - } AsyncHttpClient.getDefaultInstance().websocket("wss://" + accountStream.getInstance() + "/api/v1/streaming/?stream=public:local&access_token=" + accountStream.getToken(), "wss", (ex, webSocket) -> { if (ex != null) { ex.printStackTrace(); diff --git a/app/src/main/java/app/fedilab/android/services/LiveNotificationDelayedService.java b/app/src/main/java/app/fedilab/android/services/LiveNotificationDelayedService.java index 02522e06e..f4ddeeb7b 100644 --- a/app/src/main/java/app/fedilab/android/services/LiveNotificationDelayedService.java +++ b/app/src/main/java/app/fedilab/android/services/LiveNotificationDelayedService.java @@ -214,11 +214,10 @@ public class LiveNotificationDelayedService extends Service { private void startThread(Account accountStream, String key) { Thread thread = new Thread() { - @SuppressWarnings("ConstantConditions") @Override public void run() { while (fetch) { - taks(accountStream); + task(accountStream); fetch = (Helper.liveNotifType(LiveNotificationDelayedService.this) == Helper.NOTIF_DELAYED); if (sleeps.containsKey(key) && sleeps.get(key) != null) { try { @@ -241,8 +240,7 @@ public class LiveNotificationDelayedService extends Service { } - @SuppressWarnings("ConstantConditions") - private void taks(Account account) { + private void task(Account account) { String key = account.getUsername() + "@" + account.getInstance(); APIResponse apiResponse; @@ -341,8 +339,9 @@ public class LiveNotificationDelayedService extends Service { boolean notif_add = sharedpreferences.getBoolean(Helper.SET_NOTIF_ADD, true); boolean notif_mention = sharedpreferences.getBoolean(Helper.SET_NOTIF_MENTION, true); boolean notif_share = sharedpreferences.getBoolean(Helper.SET_NOTIF_SHARE, true); + boolean notif_status = sharedpreferences.getBoolean(Helper.SET_NOTIF_STATUS, true); boolean notif_poll = sharedpreferences.getBoolean(Helper.SET_NOTIF_POLL, true); - boolean somethingToPush = (notif_follow || notif_add || notif_mention || notif_share || notif_poll); + boolean somethingToPush = (notif_follow || notif_add || notif_mention || notif_share || notif_poll || notif_status); String message = null; if (somethingToPush) { @@ -371,6 +370,30 @@ public class LiveNotificationDelayedService extends Service { canSendBroadCast = false; } break; + case "status": + notifType = Helper.NotifType.STATUS; + if (notif_status) { + if (notification.getAccount().getDisplay_name() != null && notification.getAccount().getDisplay_name().length() > 0) + message = String.format("%s %s", notification.getAccount().getDisplay_name(), getString(R.string.notif_status)); + else + message = String.format("@%s %s", notification.getAccount().getAcct(), getString(R.string.notif_status)); + if (notification.getStatus() != null) { + if (notification.getStatus().getSpoiler_text() != null && notification.getStatus().getSpoiler_text().length() > 0) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + message = "\n" + new SpannableString(Html.fromHtml(notification.getStatus().getSpoiler_text(), FROM_HTML_MODE_LEGACY)); + else + message = "\n" + new SpannableString(Html.fromHtml(notification.getStatus().getSpoiler_text())); + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + message = "\n" + new SpannableString(Html.fromHtml(notification.getStatus().getContent(), FROM_HTML_MODE_LEGACY)); + else + message = "\n" + new SpannableString(Html.fromHtml(notification.getStatus().getContent())); + } + } + } else { + canSendBroadCast = false; + } + break; case "reblog": notifType = Helper.NotifType.BOOST; if (notif_share) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1d757c58a..ceb07e1d1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -591,7 +591,7 @@ Poll Ended New Toot Toots Backup - New post + New posts Media Download Change notification sound Select Tone