Loading app/build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -13,8 +13,8 @@ android { defaultConfig { minSdk 21 targetSdk 32 versionCode 438 versionName "3.9.3" versionCode 439 versionName "3.9.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } flavorDimensions "default" Loading app/src/main/assets/release_notes/notes.json +5 −0 Original line number Diff line number Diff line [ { "version": "3.9.4", "code": "439", "note": "Changed:\n- Remove card presentation\n- Link color for black theme\n\nFixed:\n- Crash when changing the theme" }, { "version": "3.9.3", "code": "438", Loading app/src/main/java/app/fedilab/android/BaseMainActivity.java +6 −4 Original line number Diff line number Diff line Loading @@ -646,10 +646,12 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt if (currentAccount.mastodon_account.display_name == null || currentAccount.mastodon_account.display_name.isEmpty()) { currentAccount.mastodon_account.display_name = currentAccount.mastodon_account.acct; } if (!isFinishing()) { headerMainBinding.accountName.setText( currentAccount.mastodon_account.getSpanDisplayName(BaseMainActivity.this, new WeakReference<>(headerMainBinding.accountName)), TextView.BufferType.SPANNABLE); } float scale = sharedpreferences.getFloat(getString(R.string.SET_FONT_SCALE), 1.1f); headerMainBinding.accountName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18 * 1.1f / scale); headerMainBinding.accountAcc.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18 * 1.1f / scale); Loading app/src/main/java/app/fedilab/android/client/entities/api/Account.java +8 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ package app.fedilab.android.client.entities.api; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see <http://www.gnu.org/licenses>. */ import android.app.Activity; import android.content.Context; import android.text.Spannable; import android.view.View; Loading Loading @@ -87,6 +88,13 @@ public class Account implements Serializable { return SpannableHelper.convert(context, display_name, null, this, null, false, viewWeakReference); } public synchronized Spannable getSpanDisplayName(Activity activity, WeakReference<View> viewWeakReference) { if (display_name == null || display_name.isEmpty()) { display_name = username; } return SpannableHelper.convertEmoji(activity, display_name, this, viewWeakReference); } public synchronized Spannable getSpanDisplayNameTitle(Context context, WeakReference<View> viewWeakReference, String title) { return SpannableHelper.convert(context, title, null, this, null, false, viewWeakReference); } Loading app/src/main/java/app/fedilab/android/helper/SpannableHelper.java +37 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package app.fedilab.android.helper; import static app.fedilab.android.BaseMainActivity.currentAccount; import static app.fedilab.android.ui.drawer.StatusAdapter.sendAction; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; Loading Loading @@ -1037,4 +1038,40 @@ public class SpannableHelper { } return spannableString; } public static Spannable convertEmoji(Activity activity, String text, Account account, WeakReference<View> viewWeakReference) { SpannableString initialContent; if (text == null) { return null; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) initialContent = new SpannableString(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY)); else initialContent = new SpannableString(Html.fromHtml(text)); SpannableStringBuilder content = new SpannableStringBuilder(initialContent); List<Emoji> emojiList = account.emojis; SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(activity); boolean animate = !sharedpreferences.getBoolean(activity.getString(R.string.SET_DISABLE_ANIMATED_EMOJI), false); if (emojiList != null && emojiList.size() > 0) { for (Emoji emoji : emojiList) { Matcher matcher = Pattern.compile(":" + emoji.shortcode + ":", Pattern.LITERAL) .matcher(content); while (matcher.find()) { CustomEmoji customEmoji = new CustomEmoji(new WeakReference<>(viewWeakReference.get())); content.setSpan(customEmoji, matcher.start(), matcher.end(), 0); if (Helper.isValidContextForGlide(activity)) { Glide.with(viewWeakReference.get()) .asDrawable() .load(animate ? emoji.url : emoji.static_url) .into(customEmoji.getTarget(animate)); } } } } return trimSpannable(new SpannableStringBuilder(content)); } } Loading
app/build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -13,8 +13,8 @@ android { defaultConfig { minSdk 21 targetSdk 32 versionCode 438 versionName "3.9.3" versionCode 439 versionName "3.9.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } flavorDimensions "default" Loading
app/src/main/assets/release_notes/notes.json +5 −0 Original line number Diff line number Diff line [ { "version": "3.9.4", "code": "439", "note": "Changed:\n- Remove card presentation\n- Link color for black theme\n\nFixed:\n- Crash when changing the theme" }, { "version": "3.9.3", "code": "438", Loading
app/src/main/java/app/fedilab/android/BaseMainActivity.java +6 −4 Original line number Diff line number Diff line Loading @@ -646,10 +646,12 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt if (currentAccount.mastodon_account.display_name == null || currentAccount.mastodon_account.display_name.isEmpty()) { currentAccount.mastodon_account.display_name = currentAccount.mastodon_account.acct; } if (!isFinishing()) { headerMainBinding.accountName.setText( currentAccount.mastodon_account.getSpanDisplayName(BaseMainActivity.this, new WeakReference<>(headerMainBinding.accountName)), TextView.BufferType.SPANNABLE); } float scale = sharedpreferences.getFloat(getString(R.string.SET_FONT_SCALE), 1.1f); headerMainBinding.accountName.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18 * 1.1f / scale); headerMainBinding.accountAcc.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18 * 1.1f / scale); Loading
app/src/main/java/app/fedilab/android/client/entities/api/Account.java +8 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ package app.fedilab.android.client.entities.api; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see <http://www.gnu.org/licenses>. */ import android.app.Activity; import android.content.Context; import android.text.Spannable; import android.view.View; Loading Loading @@ -87,6 +88,13 @@ public class Account implements Serializable { return SpannableHelper.convert(context, display_name, null, this, null, false, viewWeakReference); } public synchronized Spannable getSpanDisplayName(Activity activity, WeakReference<View> viewWeakReference) { if (display_name == null || display_name.isEmpty()) { display_name = username; } return SpannableHelper.convertEmoji(activity, display_name, this, viewWeakReference); } public synchronized Spannable getSpanDisplayNameTitle(Context context, WeakReference<View> viewWeakReference, String title) { return SpannableHelper.convert(context, title, null, this, null, false, viewWeakReference); } Loading
app/src/main/java/app/fedilab/android/helper/SpannableHelper.java +37 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package app.fedilab.android.helper; import static app.fedilab.android.BaseMainActivity.currentAccount; import static app.fedilab.android.ui.drawer.StatusAdapter.sendAction; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; Loading Loading @@ -1037,4 +1038,40 @@ public class SpannableHelper { } return spannableString; } public static Spannable convertEmoji(Activity activity, String text, Account account, WeakReference<View> viewWeakReference) { SpannableString initialContent; if (text == null) { return null; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) initialContent = new SpannableString(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY)); else initialContent = new SpannableString(Html.fromHtml(text)); SpannableStringBuilder content = new SpannableStringBuilder(initialContent); List<Emoji> emojiList = account.emojis; SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(activity); boolean animate = !sharedpreferences.getBoolean(activity.getString(R.string.SET_DISABLE_ANIMATED_EMOJI), false); if (emojiList != null && emojiList.size() > 0) { for (Emoji emoji : emojiList) { Matcher matcher = Pattern.compile(":" + emoji.shortcode + ":", Pattern.LITERAL) .matcher(content); while (matcher.find()) { CustomEmoji customEmoji = new CustomEmoji(new WeakReference<>(viewWeakReference.get())); content.setSpan(customEmoji, matcher.start(), matcher.end(), 0); if (Helper.isValidContextForGlide(activity)) { Glide.with(viewWeakReference.get()) .asDrawable() .load(animate ? emoji.url : emoji.static_url) .into(customEmoji.getTarget(animate)); } } } } return trimSpannable(new SpannableStringBuilder(content)); } }