Detects tab with tag

This commit is contained in:
Thomas 2022-10-03 18:51:41 +02:00
parent d8f8c2dc0d
commit a2406f23a5
4 changed files with 54 additions and 22 deletions

View file

@ -1096,10 +1096,11 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
binding.bottomNavView.removeBadge(R.id.nav_privates);
}
}
selectTab(Timeline.TimeLineEnum.CONVERSATION.getValue(), count);
}
@Override
public void onUpdateNotification(int count, String slug) {
public void onUpdateNotification(int count) {
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(BaseMainActivity.this);
boolean singleBar = sharedpreferences.getBoolean(getString(R.string.SET_USE_SINGLE_TOPBAR), false);
if (!singleBar) {
@ -1111,6 +1112,42 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
binding.bottomNavView.removeBadge(R.id.nav_notifications);
}
}
selectTab(Timeline.TimeLineEnum.NOTIFICATION.getValue(), count);
}
private int getTabPosition(String slug) {
int position = 0;
for (int i = 0; i < binding.tabLayout.getTabCount(); i++) {
TabLayout.Tab tab = binding.tabLayout.getTabAt(i);
if (tab != null && tab.getTag() != null && tab.getTag().equals(slug)) {
return position;
}
position++;
}
return -1;
}
private void selectTab(String slug, int count) {
int position = getTabPosition(slug);
if (position >= 0 && position < binding.tabLayout.getTabCount()) {
TabLayout.Tab tab = binding.tabLayout.getTabAt(position);
View view = null;
if (tab != null) {
view = tab.getCustomView();
}
if (view != null) {
TextView counter = view.findViewById(R.id.tab_counter);
if (counter != null) {
if (count > 0) {
counter.setVisibility(View.VISIBLE);
counter.setText(String.valueOf(count));
} else {
counter.setVisibility(View.GONE);
counter.setText("0");
}
}
}
}
}
@Override
@ -1166,25 +1203,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
break;
}
}
int selectedTab = binding.tabLayout.getSelectedTabPosition();
TabLayout.Tab tab = binding.tabLayout.getTabAt(selectedTab);
View view = null;
if (tab != null) {
view = tab.getCustomView();
}
if (view != null) {
TextView counter = view.findViewById(R.id.tab_counter);
if (counter != null) {
if (count > 0) {
counter.setVisibility(View.VISIBLE);
counter.setText(String.valueOf(count));
} else {
counter.setVisibility(View.GONE);
counter.setText("0");
}
}
}
selectTab(slug, count);
}
@Override

View file

@ -245,6 +245,7 @@ public class PinnedTimelineHelper {
List<PinnedTimeline> pinnedToRemove = new ArrayList<>();
for (PinnedTimeline pinnedTimeline : pinned.pinnedTimelines) {
//Default timelines are not added if we are not in the single bar mode
String ident = null;
if (!singleBar) {
switch (pinnedTimeline.type) {
case HOME:
@ -262,14 +263,23 @@ public class PinnedTimelineHelper {
switch (pinnedTimeline.type) {
case LIST:
name = pinnedTimeline.mastodonList.title;
ident = "@l@" + pinnedTimeline.mastodonList.id;
break;
case TAG:
name = pinnedTimeline.tagTimeline.displayName != null && !pinnedTimeline.tagTimeline.displayName.isEmpty() ? pinnedTimeline.tagTimeline.displayName : pinnedTimeline.tagTimeline.name.replaceAll("#", "");
ident = "@T@" + name;
break;
case REMOTE:
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();
ident = "@R@" + remoteInstance;
} else {
ident = "@R@" + pinnedTimeline.remoteInstance.host;
}
break;
}
if (pinnedTimeline.type == Timeline.TimeLineEnum.LIST || pinnedTimeline.type == Timeline.TimeLineEnum.TAG || pinnedTimeline.type == Timeline.TimeLineEnum.REMOTE) {
TabCustomViewBinding tabCustomViewBinding = TabCustomViewBinding.inflate(activity.getLayoutInflater());
tabCustomViewBinding.title.setText(name);
@ -326,6 +336,9 @@ public class PinnedTimelineHelper {
}
tab.setCustomView(tabCustomDefaultViewBinding.getRoot());
}
//We be used to fetch position of tabs
String slug = pinnedTimeline.type.getValue() + (ident != null ? "|" + ident : "");
tab.setTag(slug);
activityMainBinding.tabLayout.addTab(tab);
pinnedTimelineVisibleList.add(pinnedTimeline);
}

View file

@ -468,7 +468,7 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
//Update the timeline with new statuses
int insertedStatus = updateNotificationListWith(fetched_notifications.notifications);
if (insertedStatus >= 0 && FragmentNotificationContainer.update != null && notificationType == NotificationTypeEnum.ALL && (direction == FragmentMastodonTimeline.DIRECTION.FETCH_NEW || direction == FragmentMastodonTimeline.DIRECTION.SCROLL_TOP || direction == FragmentMastodonTimeline.DIRECTION.REFRESH)) {
FragmentNotificationContainer.update.onUpdateNotification(insertedStatus, notificationType.getValue());
FragmentNotificationContainer.update.onUpdateNotification(insertedStatus);
}
if (direction == FragmentMastodonTimeline.DIRECTION.TOP && fetchingMissing) {
binding.recyclerView.scrollToPosition(getPosition(fetched_notifications.notifications.get(fetched_notifications.notifications.size() - 1)) + 1);

View file

@ -270,6 +270,6 @@ public class FragmentNotificationContainer extends Fragment {
public interface UpdateCounters {
void onUpdateNotification(int count, String slug);
void onUpdateNotification(int count);
}
}