diff --git a/app/build.gradle b/app/build.gradle
index 0bde93cc..2fb7f0fb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -22,9 +22,10 @@ android {
buildTypes {
release {
debuggable false
+ multiDexEnabled false
minifyEnabled true
shrinkResources true
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ proguardFiles 'proguard-rules.pro'
}
debug {
minifyEnabled false
@@ -46,12 +47,12 @@ proguardDictionaries {
}
dependencies {
- implementation 'androidx.appcompat:appcompat:1.3.1'
+ implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
- implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'org.twitter4j:twitter4j-core:4.0.7'
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index ca36a823..aa0f6685 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -1,28 +1,4 @@
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ~/Android/Sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in show.gradle.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile
+-repackageclasses org.nuclearfog.twidda
# keep these libraries but allow obfuscating
-dontwarn twitter4j.**
@@ -42,8 +18,6 @@
-adaptclassstrings org.conscrypt.OpenSSLProvider
-dontwarn javax.annotation.Nullable
--keep,allowobfuscation class javax.annotation.Nullable {*;}
--adaptclassstrings javax.annotation.Nullable
# use dictionaries to create random class/package names
-obfuscationdictionary dict/obfuscation-dictionary.txt
diff --git a/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java b/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java
index 3f9d0dfa..b7f6c309 100644
--- a/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java
+++ b/app/src/main/java/org/nuclearfog/twidda/activity/UserProfile.java
@@ -206,8 +206,9 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O
muteConfirm = new ConfirmDialog(this, DialogType.PROFILE_MUTE, this);
Intent i = getIntent();
- user = (User) i.getSerializableExtra(KEY_PROFILE_DATA);
- if (user != null) {
+ Object o = i.getSerializableExtra(KEY_PROFILE_DATA);
+ if (o instanceof User) {
+ user = (User) o;
adapter.setupProfilePage(user.getId());
} else {
long userId = i.getLongExtra(KEY_PROFILE_ID, 0);
@@ -644,6 +645,7 @@ public class UserProfile extends AppCompatActivity implements OnClickListener, O
Picasso.get().load(bannerLink).error(R.drawable.no_banner).into(bannerImage, this);
} else {
bannerImage.setImageResource(0);
+ toolbarBackground.setImageResource(0);
}
if (user.hasProfileImage()) {
String imgLink = user.getImageLink();
diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/model/Tweet.java b/app/src/main/java/org/nuclearfog/twidda/backend/model/Tweet.java
index c873335d..5782001e 100644
--- a/app/src/main/java/org/nuclearfog/twidda/backend/model/Tweet.java
+++ b/app/src/main/java/org/nuclearfog/twidda/backend/model/Tweet.java
@@ -1,5 +1,7 @@
package org.nuclearfog.twidda.backend.model;
+import android.os.Build;
+
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -50,7 +52,7 @@ public class Tweet implements Serializable {
private boolean favorited;
private boolean sensitiveMedia;
- private String[] medias = {};
+ private String[] mediaLinks = {};
private String userMentions = "";
private String locationName = "";
private String locationCoordinates = "";
@@ -143,7 +145,7 @@ public class Tweet implements Serializable {
this.time = time;
this.replyID = replyID;
this.embedded = embedded;
- this.medias = medias;
+ this.mediaLinks = medias;
this.mediaType = mediaType;
this.retweeted = retweeted;
this.favorited = favored;
@@ -267,7 +269,7 @@ public class Tweet implements Serializable {
* @return medias links array
*/
public String[] getMediaLinks() {
- return medias;
+ return mediaLinks;
}
/**
@@ -429,15 +431,23 @@ public class Tweet implements Serializable {
* @param mediaEntities media information
*/
private void getMedia(MediaEntity[] mediaEntities) {
- medias = new String[mediaEntities.length];
- if (medias.length == 0) {
+ mediaLinks = new String[mediaEntities.length];
+ if (mediaLinks.length == 0) {
mediaType = MediaType.NONE;
} else {
switch (mediaEntities[0].getType()) {
case PHOTO:
mediaType = MediaType.IMAGE;
- for (int i = 0; i < mediaEntities.length; i++) {
- medias[i] = mediaEntities[i].getMediaURLHttps();
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ // since twitter dropped TLS 1.1 support,
+ // https links will not work on pre lollipop devices anymore
+ for (int i = 0; i < mediaEntities.length; i++) {
+ mediaLinks[i] = mediaEntities[i].getMediaURL();
+ }
+ } else {
+ for (int i = 0; i < mediaEntities.length; i++) {
+ mediaLinks[i] = mediaEntities[i].getMediaURLHttps();
+ }
}
break;
@@ -447,14 +457,24 @@ public class Tweet implements Serializable {
if (type.getContentType().equals(MEDIA_VIDEO)) {
// get link with selected video format
// a tweet can only have one video
- medias[0] = type.getUrl();
+ mediaLinks[0] = type.getUrl();
+ // switching to http since twitter dropped TLS 1.1 support, pre lollipop
+ // devices don't support https
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP &&
+ mediaLinks[0].startsWith("https://")) {
+ mediaLinks[0] = "http://" + mediaLinks[0].substring(8);
+ }
}
}
break;
case ANGIF:
mediaType = MediaType.GIF;
- medias[0] = mediaEntities[0].getVideoVariants()[0].getUrl();
+ mediaLinks[0] = mediaEntities[0].getVideoVariants()[0].getUrl();
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP &&
+ mediaLinks[0].startsWith("https://")) {
+ mediaLinks[0] = "http://" + mediaLinks[0].substring(8);
+ }
break;
default:
diff --git a/app/src/main/java/org/nuclearfog/twidda/backend/model/User.java b/app/src/main/java/org/nuclearfog/twidda/backend/model/User.java
index b468f4b5..112098c8 100644
--- a/app/src/main/java/org/nuclearfog/twidda/backend/model/User.java
+++ b/app/src/main/java/org/nuclearfog/twidda/backend/model/User.java
@@ -1,5 +1,7 @@
package org.nuclearfog.twidda.backend.model;
+import android.os.Build;
+
import androidx.annotation.NonNull;
import java.io.Serializable;
@@ -58,14 +60,27 @@ public class User implements Serializable {
this.username = user.getName();
if (user.getScreenName() != null)
this.screenName = '@' + user.getScreenName();
- if (user.getOriginalProfileImageURLHttps() != null)
- this.profileImg = user.getOriginalProfileImageURLHttps();
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ // since twitter dropped TLS 1.1 support,
+ // https links will not work on pre lollipop devices anymore
+ if (user.getOriginalProfileImageURL() != null) {
+ this.profileImg = user.getOriginalProfileImageURL();
+ }
+ if (bannerLink != null && bannerLink.length() > 12 && bannerLink.startsWith("https://")) {
+ bannerImg = "http://" + bannerLink.substring(8, bannerLink.length() - 4);
+ }
+ } else {
+ if (user.getOriginalProfileImageURLHttps() != null) {
+ this.profileImg = user.getOriginalProfileImageURLHttps();
+ }
+ if (bannerLink != null && bannerLink.length() > 4) {
+ bannerImg = bannerLink.substring(0, bannerLink.length() - 4);
+ }
+ }
if (user.getURLEntity().getExpandedURL() != null)
this.link = user.getURLEntity().getExpandedURL();
if (user.getLocation() != null)
this.location = user.getLocation();
- if (bannerLink != null && bannerLink.length() > 4)
- bannerImg = bannerLink.substring(0, bannerLink.length() - 4);
if (bio != null && !bio.isEmpty()) {
URLEntity[] entities = user.getDescriptionURLEntities();
StringBuilder builder = new StringBuilder(user.getDescription());
diff --git a/app/src/main/res/layout/item_image.xml b/app/src/main/res/layout/item_image.xml
index b336e7d4..46a2aaa3 100644
--- a/app/src/main/res/layout/item_image.xml
+++ b/app/src/main/res/layout/item_image.xml
@@ -7,7 +7,7 @@
diff --git a/app/src/main/res/layout/page_media.xml b/app/src/main/res/layout/page_media.xml
index 3e404bf9..d54bf427 100644
--- a/app/src/main/res/layout/page_media.xml
+++ b/app/src/main/res/layout/page_media.xml
@@ -18,7 +18,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:enable_move="true"
app:max_zoom_in="10.0"
- app:max_zoom_out="0.7" />
+ app:max_zoom_out="0.5" />
12sp
18sp
12sp
- 6
+ 5
48dp
diff --git a/gradle.properties b/gradle.properties
index 2c6ed659..c1e7a465 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -10,9 +10,9 @@
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
-#Fri Mar 12 11:41:58 CET 2021
+#Fri Dec 03 17:30:19 CET 2021
+org.gradle.configureondemand=false;
+org.gradle.jvmargs=-Xmx1536M -Dkotlin.daemon.jvm.options\="-Xmx1536M"
android.enableJetifier=true
android.useAndroidX=true
-android.enableR8.fullMode=true
-org.gradle.configureondemand=false;
-org.gradle.jvmargs=-Xmx1024M -Dkotlin.daemon.jvm.options\="-Xmx1024M"
\ No newline at end of file
+android.enableR8.fullMode=true
\ No newline at end of file