From 8c44f338dacf5acdf2a2148198d7acb61060c33a Mon Sep 17 00:00:00 2001 From: Thomas <tschneider.ac@gmail.com> Date: Wed, 21 Dec 2022 18:31:21 +0100 Subject: [PATCH] Rename Nitter instances --- .../client/entities/app/RemoteInstance.java | 2 + .../android/helper/PinnedTimelineHelper.java | 144 ++++++++++++------ .../main/res/menu/option_nitter_timeline.xml | 12 ++ app/src/main/res/values/strings.xml | 1 + .../metadata/android/en/changelogs/452.txt | 2 +- 5 files changed, 114 insertions(+), 47 deletions(-) create mode 100644 app/src/main/res/menu/option_nitter_timeline.xml diff --git a/app/src/main/java/app/fedilab/android/client/entities/app/RemoteInstance.java b/app/src/main/java/app/fedilab/android/client/entities/app/RemoteInstance.java index 39b73df4..6230dd1b 100644 --- a/app/src/main/java/app/fedilab/android/client/entities/app/RemoteInstance.java +++ b/app/src/main/java/app/fedilab/android/client/entities/app/RemoteInstance.java @@ -27,6 +27,8 @@ public class RemoteInstance implements Serializable { public String id; @SerializedName("host") public String host; + @SerializedName("displayName") + public String displayName; @SerializedName("type") public InstanceType type; @SerializedName("tags") diff --git a/app/src/main/java/app/fedilab/android/helper/PinnedTimelineHelper.java b/app/src/main/java/app/fedilab/android/helper/PinnedTimelineHelper.java index 52bb8e81..fba039d9 100644 --- a/app/src/main/java/app/fedilab/android/helper/PinnedTimelineHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/PinnedTimelineHelper.java @@ -39,6 +39,7 @@ import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.PopupMenu; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; @@ -356,6 +357,10 @@ public class PinnedTimelineHelper { name = pinnedTimeline.remoteInstance.host; if (pinnedTimeline.remoteInstance.type == RemoteInstance.InstanceType.NITTER) { String remoteInstance = sharedpreferences.getString(activity.getString(R.string.SET_NITTER_HOST), activity.getString(R.string.DEFAULT_NITTER_HOST)).toLowerCase(); + //Custom name for Nitter instances + if (pinnedTimeline.remoteInstance.displayName != null && pinnedTimeline.remoteInstance.displayName.trim().length() > 0) { + name = pinnedTimeline.remoteInstance.displayName; + } ident = "@R@" + remoteInstance; } else { ident = "@R@" + pinnedTimeline.remoteInstance.host; @@ -521,7 +526,7 @@ public class PinnedTimelineHelper { if (pinnedTimelineVisibleList.get(position).remoteInstance.type != RemoteInstance.InstanceType.NITTER) { instanceClick(activity, finalPinned, v, activityMainBinding, finalI, activityMainBinding.tabLayout.getTabAt(finalI).getTag().toString()); } else { - nitterClick(activity, finalPinned, activityMainBinding, finalI, activityMainBinding.tabLayout.getTabAt(finalI).getTag().toString()); + nitterClick(activity, finalPinned, v, activityMainBinding, finalI, activityMainBinding.tabLayout.getTabAt(finalI).getTag().toString()); } break; case HOME: @@ -979,6 +984,10 @@ public class PinnedTimelineHelper { if (values.trim().length() == 0) values = tag; tagTimeline.displayName = values; + View titleView = view.findViewById(R.id.title); + if (titleView instanceof AppCompatTextView) { + ((AppCompatTextView) titleView).setText(tagTimeline.displayName); + } pinned.pinnedTimelines.get(finalOffSetPosition).tagTimeline = tagTimeline; try { new Pinned(activity).updatePinned(pinned); @@ -1224,7 +1233,7 @@ public class PinnedTimelineHelper { * @param pinned - {@link Pinned} * @param position - int position of the tab */ - public static void nitterClick(BaseMainActivity activity, Pinned pinned, ActivityMainBinding activityMainBinding, int position, String slug) { + public static void nitterClick(BaseMainActivity activity, Pinned pinned, View view, ActivityMainBinding activityMainBinding, int position, String slug) { int toRemove = itemToRemoveInBottomMenu(activity); int offSetPosition = position - (BOTTOM_TIMELINE_COUNT - toRemove); @@ -1236,54 +1245,97 @@ public class PinnedTimelineHelper { RemoteInstance remoteInstance = pinned.pinnedTimelines.get(offSetPosition).remoteInstance; if (remoteInstance == null) return; - String accounts = remoteInstance.host; - AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity, Helper.dialogStyle()); - LayoutInflater inflater = activity.getLayoutInflater(); - View dialogView = inflater.inflate(R.layout.tags_any, new LinearLayout(activity), false); - dialogBuilder.setView(dialogView); - final EditText editText = dialogView.findViewById(R.id.filter_any); - editText.setHint(R.string.list_of_twitter_accounts); - if (accounts != null) { - editText.setText(accounts); - editText.setSelection(editText.getText().toString().length()); - } + PopupMenu popup = new PopupMenu(activity, view); + popup.getMenuInflater() + .inflate(R.menu.option_nitter_timeline, popup.getMenu()); int finalOffSetPosition = offSetPosition; - dialogBuilder.setPositiveButton(R.string.validate, (dialog, id) -> { - pinned.pinnedTimelines.get(finalOffSetPosition).remoteInstance.host = editText.getText().toString().trim(); - try { - new Pinned(activity).updatePinned(pinned); - } catch (DBException e) { - e.printStackTrace(); - } - FragmentMastodonTimeline fragmentMastodonTimeline = null; - try { - new StatusCache(activity).deleteForSlug(slug); - } catch (DBException e) { - e.printStackTrace(); - } - if (activityMainBinding.viewPager.getAdapter() != null) { - Fragment fragment = (Fragment) activityMainBinding.viewPager.getAdapter().instantiateItem(activityMainBinding.viewPager, activityMainBinding.tabLayout.getSelectedTabPosition()); - if (fragment instanceof FragmentMastodonTimeline && fragment.isVisible()) { - fragmentMastodonTimeline = ((FragmentMastodonTimeline) fragment); - fragmentMastodonTimeline.refreshAllAdapters(); + popup.setOnMenuItemClickListener(item -> { + int itemId = item.getItemId(); + if (itemId == R.id.action_displayname) { + AlertDialog.Builder dialogBuilder; + LayoutInflater inflater; + View dialogView; + AlertDialog alertDialog; + dialogBuilder = new AlertDialog.Builder(activity, Helper.dialogStyle()); + inflater = activity.getLayoutInflater(); + dialogView = inflater.inflate(R.layout.tags_name, new LinearLayout(activity), false); + dialogBuilder.setView(dialogView); + final EditText editTextName = dialogView.findViewById(R.id.column_name); + if (remoteInstance.displayName != null) { + editTextName.setText(remoteInstance.displayName); + editTextName.setSelection(editTextName.getText().toString().length()); } + dialogBuilder.setPositiveButton(R.string.validate, (dialog, id) -> { + String values = editTextName.getText().toString(); + if (values.trim().length() == 0) { + values = remoteInstance.displayName; + } + remoteInstance.displayName = values; + View titleView = view.findViewById(R.id.title); + if (titleView instanceof AppCompatTextView) { + ((AppCompatTextView) titleView).setText(remoteInstance.displayName); + } + pinned.pinnedTimelines.get(finalOffSetPosition).remoteInstance = remoteInstance; + try { + new Pinned(activity).updatePinned(pinned); + } catch (DBException e) { + e.printStackTrace(); + } + }); + alertDialog = dialogBuilder.create(); + alertDialog.show(); + } else if (itemId == R.id.action_nitter_manage_accounts) { + String accounts = remoteInstance.host; + AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity, Helper.dialogStyle()); + LayoutInflater inflater = activity.getLayoutInflater(); + View dialogView = inflater.inflate(R.layout.tags_any, new LinearLayout(activity), false); + dialogBuilder.setView(dialogView); + final EditText editText = dialogView.findViewById(R.id.filter_any); + editText.setHint(R.string.list_of_twitter_accounts); + if (accounts != null) { + editText.setText(accounts); + editText.setSelection(editText.getText().toString().length()); + } + dialogBuilder.setPositiveButton(R.string.validate, (dialog, id) -> { + pinned.pinnedTimelines.get(finalOffSetPosition).remoteInstance.host = editText.getText().toString().trim(); + try { + new Pinned(activity).updatePinned(pinned); + } catch (DBException e) { + e.printStackTrace(); + } + FragmentMastodonTimeline fragmentMastodonTimeline = null; + try { + new StatusCache(activity).deleteForSlug(slug); + } catch (DBException e) { + e.printStackTrace(); + } + if (activityMainBinding.viewPager.getAdapter() != null) { + Fragment fragment = (Fragment) activityMainBinding.viewPager.getAdapter().instantiateItem(activityMainBinding.viewPager, activityMainBinding.tabLayout.getSelectedTabPosition()); + if (fragment instanceof FragmentMastodonTimeline && fragment.isVisible()) { + fragmentMastodonTimeline = ((FragmentMastodonTimeline) fragment); + fragmentMastodonTimeline.refreshAllAdapters(); + } + } + FragmentTransaction fragTransaction1 = activity.getSupportFragmentManager().beginTransaction(); + if (fragmentMastodonTimeline == null) + return; + fragTransaction1.detach(fragmentMastodonTimeline).commit(); + Bundle bundle = new Bundle(); + bundle.putSerializable(Helper.ARG_REMOTE_INSTANCE, pinned.pinnedTimelines.get(finalOffSetPosition)); + bundle.putSerializable(Helper.ARG_TIMELINE_TYPE, Timeline.TimeLineEnum.REMOTE); + bundle.putSerializable(Helper.ARG_INITIALIZE_VIEW, false); + fragmentMastodonTimeline.setArguments(bundle); + FragmentTransaction fragTransaction2 = activity.getSupportFragmentManager().beginTransaction(); + fragTransaction2.attach(fragmentMastodonTimeline); + fragTransaction2.commit(); + fragmentMastodonTimeline.recreate(); + }); + AlertDialog alertDialog = dialogBuilder.create(); + alertDialog.show(); } - FragmentTransaction fragTransaction1 = activity.getSupportFragmentManager().beginTransaction(); - if (fragmentMastodonTimeline == null) - return; - fragTransaction1.detach(fragmentMastodonTimeline).commit(); - Bundle bundle = new Bundle(); - bundle.putSerializable(Helper.ARG_REMOTE_INSTANCE, pinned.pinnedTimelines.get(finalOffSetPosition)); - bundle.putSerializable(Helper.ARG_TIMELINE_TYPE, Timeline.TimeLineEnum.REMOTE); - bundle.putSerializable(Helper.ARG_INITIALIZE_VIEW, false); - fragmentMastodonTimeline.setArguments(bundle); - FragmentTransaction fragTransaction2 = activity.getSupportFragmentManager().beginTransaction(); - fragTransaction2.attach(fragmentMastodonTimeline); - fragTransaction2.commit(); - fragmentMastodonTimeline.recreate(); + return true; }); - AlertDialog alertDialog = dialogBuilder.create(); - alertDialog.show(); + popup.show(); } diff --git a/app/src/main/res/menu/option_nitter_timeline.xml b/app/src/main/res/menu/option_nitter_timeline.xml new file mode 100644 index 00000000..cbfc4cc6 --- /dev/null +++ b/app/src/main/res/menu/option_nitter_timeline.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + <item + android:id="@+id/action_displayname" + android:title="@string/change_tag_column" + app:showAsAction="always" /> + <item + android:id="@+id/action_nitter_manage_accounts" + android:title="@string/manage_accounts" + app:showAsAction="always" /> +</menu> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index acded866..1a8c3a21 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2111,4 +2111,5 @@ <string name="mute_them_all">Mute them all</string> <string name="import_data">Import data</string> <string name="group_reblogs">Group reblogs in home timeline</string> + <string name="manage_accounts">Manage accounts</string> </resources> \ No newline at end of file diff --git a/src/fdroid/fastlane/metadata/android/en/changelogs/452.txt b/src/fdroid/fastlane/metadata/android/en/changelogs/452.txt index edfcd879..754cefcb 100644 --- a/src/fdroid/fastlane/metadata/android/en/changelogs/452.txt +++ b/src/fdroid/fastlane/metadata/android/en/changelogs/452.txt @@ -1,5 +1,5 @@ Added: - +- Rename Nitter timelines Changed: