diff --git a/app/build.gradle b/app/build.gradle
index de715e3c..f3198f4a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -141,7 +141,7 @@ dependencies {
implementation("com.vanniktech:android-image-cropper:4.3.3")
annotationProcessor "com.github.bumptech.glide:compiler:4.12.0"
implementation 'jp.wasabeef:glide-transformations:4.3.0'
- implementation 'com.github.penfeizhou.android.animation:glide-plugin:2.23.0'
+ implementation 'com.github.penfeizhou.android.animation:glide-plugin:3.0.4'
implementation 'androidx.media3:media3-exoplayer-hls:1.2.1'
implementation "androidx.media3:media3-exoplayer:1.2.1"
implementation "androidx.media3:media3-exoplayer-dash:1.2.1"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 85dcfb36..12ee7f2c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -230,6 +230,7 @@
android:configChanges="keyboardHidden|orientation|screenSize" />
diff --git a/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java b/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java
index 30af13d8..1588c20c 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/activities/ProfileActivity.java
@@ -82,9 +82,6 @@ import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Set;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
import androidmads.library.qrgenearator.QRGContents;
import androidmads.library.qrgenearator.QRGEncoder;
@@ -103,6 +100,7 @@ import app.fedilab.android.mastodon.client.entities.api.Field;
import app.fedilab.android.mastodon.client.entities.api.IdentityProof;
import app.fedilab.android.mastodon.client.entities.api.MastodonList;
import app.fedilab.android.mastodon.client.entities.api.RelationShip;
+import app.fedilab.android.mastodon.client.entities.api.Status;
import app.fedilab.android.mastodon.client.entities.app.CachedBundle;
import app.fedilab.android.mastodon.client.entities.app.Languages;
import app.fedilab.android.mastodon.client.entities.app.Pinned;
@@ -132,7 +130,6 @@ public class ProfileActivity extends BaseActivity {
private RelationShip relationship;
private FamiliarFollowers familiarFollowers;
private Account account;
- private ScheduledExecutorService scheduledExecutorService;
private action doAction;
private AccountsVM accountsVM;
private RecyclerView identityProofsRecycler;
@@ -357,14 +354,7 @@ public class ProfileActivity extends BaseActivity {
this.identityProofList = identityProofs;
updateAccount();
});
- //Animate emojis
- if (account.emojis != null && !account.emojis.isEmpty()) {
- boolean disableAnimatedEmoji = sharedpreferences.getBoolean(getString(R.string.SET_DISABLE_ANIMATED_EMOJI), false);
- if (!disableAnimatedEmoji) {
- scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
- scheduledExecutorService.scheduleAtFixedRate(() -> binding.accountDn.invalidate(), 0, 130, TimeUnit.MILLISECONDS);
- }
- }
+
binding.accountTabLayout.clearOnTabSelectedListeners();
binding.accountTabLayout.removeAllTabs();
//Tablayout for timelines/following/followers
@@ -550,8 +540,15 @@ public class ProfileActivity extends BaseActivity {
});
binding.accountNote.setText(
account.getSpanNote(ProfileActivity.this,
- new WeakReference<>(binding.accountNote)),
+ new WeakReference<>(binding.accountNote), () -> {
+ //TODO: replace this hack
+ binding.accountNote.setText(
+ account.getSpanNote(ProfileActivity.this,
+ new WeakReference<>(binding.accountNote)), TextView.BufferType.SPANNABLE);
+
+ }),
TextView.BufferType.SPANNABLE);
+
binding.accountNote.setMovementMethod(LinkMovementMethod.getInstance());
@@ -1370,10 +1367,6 @@ public class ProfileActivity extends BaseActivity {
@Override
public void onDestroy() {
- if (scheduledExecutorService != null) {
- scheduledExecutorService.shutdownNow();
- scheduledExecutorService = null;
- }
try {
unregisterReceiver(broadcast_data);
} catch (IllegalArgumentException e) {
diff --git a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Account.java b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Account.java
index 8d4cad29..2408db28 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Account.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/client/entities/api/Account.java
@@ -112,6 +112,9 @@ public class Account implements Serializable {
public synchronized Spannable getSpanNote(Context context, WeakReference viewWeakReference) {
return SpannableHelper.convert(context, note, null, this, null, viewWeakReference, null, true, false);
}
+ public synchronized Spannable getSpanNote(Context context, WeakReference viewWeakReference, Status.Callback callback) {
+ return SpannableHelper.convert(context, note, null, this, null, viewWeakReference, callback, true, false);
+ }
@Override
public boolean equals(@Nullable Object obj) {
diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java
index abf2e0c7..016dc369 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/helper/Helper.java
@@ -918,7 +918,7 @@ public class Helper {
ft.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);
Fragment _fragment = fragmentManager.findFragmentByTag(tag);
if (_fragment != null && _fragment.isAdded()) {
- ft.show(_fragment).commit();
+ ft.show(_fragment).commitAllowingStateLoss();
fragment = _fragment;
} else {
if (args != null) fragment.setArguments(args);
@@ -930,7 +930,7 @@ public class Helper {
}catch (Exception ignored){}
}
if (!fragmentManager.isDestroyed()) {
- ft.commit();
+ ft.commitAllowingStateLoss();
}
}
fragmentManager.executePendingTransactions();
@@ -2159,6 +2159,22 @@ public class Helper {
.build();
}
+ public static OkHttpClient myPostOkHttpClient(Context context) {
+ return new OkHttpClient.Builder()
+ .addInterceptor(chain -> {
+ Request originalRequest = chain.request();
+ Request requestWithUserAgent = originalRequest.newBuilder()
+ .header("User-Agent", context.getString(R.string.app_name) + "/" + BuildConfig.VERSION_NAME + "/" + BuildConfig.VERSION_CODE)
+ .build();
+ return chain.proceed(requestWithUserAgent);
+ })
+ .readTimeout(120, TimeUnit.SECONDS)
+ .connectTimeout(120, TimeUnit.SECONDS)
+ .callTimeout(120, TimeUnit.SECONDS)
+ .proxy(Helper.getProxy(context))
+ .build();
+ }
+
public static String parseHtml(String html) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY).toString();
diff --git a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java
index 42e1d8e0..ebcb2416 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/jobs/ComposeWorker.java
@@ -47,9 +47,7 @@ import com.google.gson.Gson;
import java.io.IOException;
import java.net.IDN;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
-import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import app.fedilab.android.BaseMainActivity;
@@ -72,7 +70,6 @@ import app.fedilab.android.mastodon.helper.Helper;
import app.fedilab.android.mastodon.ui.drawer.StatusAdapter;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
-import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.Response;
@@ -94,19 +91,11 @@ public class ComposeWorker extends Worker {
context.getSystemService(NOTIFICATION_SERVICE);
}
- private static OkHttpClient getOkHttpClient(Context context) {
- return new OkHttpClient.Builder()
- .readTimeout(120, TimeUnit.SECONDS)
- .connectTimeout(120, TimeUnit.SECONDS)
- .proxy(Helper.getProxy(context.getApplicationContext()))
- .build();
- }
-
private static MastodonStatusesService init(Context context, String instance) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://" + (instance != null ? IDN.toASCII(instance, IDN.ALLOW_UNASSIGNED) : null) + "/api/v1/")
.addConverterFactory(GsonConverterFactory.create(Helper.getDateBuilder()))
- .client(getOkHttpClient(context))
+ .client(Helper.myPostOkHttpClient(context))
.build();
return retrofit.create(MastodonStatusesService.class);
}
diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java
index a3161817..92d04578 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/ComposeAdapter.java
@@ -598,7 +598,9 @@ public class ComposeAdapter extends RecyclerView.Adapter splitText = ComposeHelper.splitToots(contentString, max_car);
- contentString = splitText.get(0);
+ if(!splitText.isEmpty()) {
+ contentString = splitText.get(0);
+ }
}
int currentLength = MastodonHelper.countLength(holder);
if (promptDraftListener != null) {
diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java
index c25300d6..efa97aa9 100644
--- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java
+++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java
@@ -59,7 +59,6 @@ import android.os.Looper;
import android.text.Html;
import android.text.SpannableString;
import android.text.TextUtils;
-import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MotionEvent;
diff --git a/app/src/main/res/layouts/mastodon/layout/fragment_slide_media.xml b/app/src/main/res/layouts/mastodon/layout/fragment_slide_media.xml
index e82be301..f59694b1 100644
--- a/app/src/main/res/layouts/mastodon/layout/fragment_slide_media.xml
+++ b/app/src/main/res/layouts/mastodon/layout/fragment_slide_media.xml
@@ -9,8 +9,7 @@
+ android:layout_height="match_parent">