From 03044b86b1059dfcf52727b4d22bd2a6312cab58 Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 11 Nov 2022 02:11:37 +0100 Subject: [PATCH] add clickable app name button --- .../ExtendedFooterStatusDisplayItem.java | 20 +++++++++++++----- .../ui/displayitems/StatusDisplayItem.java | 2 +- .../android/ui/utils/UiUtils.java | 7 ++++--- .../layout/display_item_extended_footer.xml | 21 ++++++++++++++++--- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java index 9fefedbbe..a4ca6a535 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java @@ -48,7 +48,7 @@ public class ExtendedFooterStatusDisplayItem extends StatusDisplayItem{ public static class Holder extends StatusDisplayItem.Holder{ private final TextView time; - private final Button favorites, reblogs, editHistory; + private final Button favorites, reblogs, editHistory, applicationName; private final ImageView visibility; private final Context context; @@ -58,8 +58,9 @@ public class ExtendedFooterStatusDisplayItem extends StatusDisplayItem{ reblogs=findViewById(R.id.reblogs); favorites=findViewById(R.id.favorites); editHistory=findViewById(R.id.edit_history); - time=findViewById(R.id.timestamp); + applicationName=findViewById(R.id.application_name); visibility=findViewById(R.id.visibility); + time=findViewById(R.id.timestamp); reblogs.setOnClickListener(v->startAccountListFragment(StatusReblogsListFragment.class)); favorites.setOnClickListener(v->startAccountListFragment(StatusFavoritesListFragment.class)); @@ -79,11 +80,20 @@ public class ExtendedFooterStatusDisplayItem extends StatusDisplayItem{ editHistory.setVisibility(View.GONE); } String timeStr=TIME_FORMATTER.format(item.status.createdAt.atZone(ZoneId.systemDefault())); - if(item.status.application!=null && !TextUtils.isEmpty(item.status.application.name)){ - time.setText(item.parentFragment.getString(R.string.timestamp_via_app, timeStr, item.status.application.name)); - }else{ + + if (item.status.application!=null && !TextUtils.isEmpty(item.status.application.name)) { + time.setText(item.parentFragment.getString(R.string.timestamp_via_app, timeStr, "")); + applicationName.setText(item.status.application.name); + if (item.status.application.website != null && item.status.application.website.toLowerCase().startsWith("https://")) { + applicationName.setOnClickListener(e -> UiUtils.openURL(context, null, item.status.application.website)); + } else { + applicationName.setEnabled(false); + } + } else { time.setText(timeStr); + applicationName.setVisibility(View.GONE); } + visibility.setImageResource(switch (s.visibility) { case PUBLIC -> R.drawable.ic_fluent_earth_20_regular; case UNLISTED -> R.drawable.ic_fluent_people_20_regular; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java index d1e5e1fd8..107af6e43 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java @@ -158,7 +158,7 @@ public abstract class StatusDisplayItem{ } public Holder(Context context, int layout, ViewGroup parent){ - super(context, layout, parent); + super(context, layout, parent); } public String getItemID(){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index 84436cca2..855816999 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -71,6 +71,7 @@ import java.util.function.Consumer; import java.util.stream.Collectors; import androidx.annotation.AttrRes; +import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.browser.customtabs.CustomTabsIntent; import androidx.recyclerview.widget.DiffUtil; @@ -548,10 +549,10 @@ public class UiUtils{ return GlobalUserPreferences.theme==GlobalUserPreferences.ThemePreference.DARK; } - public static void openURL(Context context, String accountID, String url){ + public static void openURL(Context context, @Nullable String accountID, String url){ Uri uri=Uri.parse(url); - String accountDomain=AccountSessionManager.getInstance().getAccount(accountID).domain; - if("https".equals(uri.getScheme()) && accountDomain.equalsIgnoreCase(uri.getAuthority())){ + String accountDomain=accountID != null ? AccountSessionManager.getInstance().getAccount(accountID).domain : null; + if(accountDomain!=null && "https".equals(uri.getScheme()) && accountDomain.equalsIgnoreCase(uri.getAuthority())){ List path=uri.getPathSegments(); // Match URLs like https://mastodon.social/@Gargron/108132679274083591 if(path.size()==2 && path.get(0).matches("^@[a-zA-Z0-9_]+$") && path.get(1).matches("^[0-9]+$")){ diff --git a/mastodon/src/main/res/layout/display_item_extended_footer.xml b/mastodon/src/main/res/layout/display_item_extended_footer.xml index a8e69d4ce..5e518b274 100644 --- a/mastodon/src/main/res/layout/display_item_extended_footer.xml +++ b/mastodon/src/main/res/layout/display_item_extended_footer.xml @@ -64,7 +64,7 @@ + tools:text="Dec 12, 2021, 12:42 PM via "/> + +