Fix counters

This commit is contained in:
Thomas 2022-10-04 09:37:20 +02:00
parent a2406f23a5
commit 77dcb6db31
3 changed files with 34 additions and 8 deletions

View File

@ -1096,7 +1096,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
binding.bottomNavView.removeBadge(R.id.nav_privates);
}
}
selectTab(Timeline.TimeLineEnum.CONVERSATION.getValue(), count);
setCounterToTab(Timeline.TimeLineEnum.CONVERSATION.getValue(), count);
}
@Override
@ -1112,9 +1112,15 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
binding.bottomNavView.removeBadge(R.id.nav_notifications);
}
}
selectTab(Timeline.TimeLineEnum.NOTIFICATION.getValue(), count);
setCounterToTab(Timeline.TimeLineEnum.NOTIFICATION.getValue(), count);
}
/**
* Get the tab depending of its position
*
* @param slug String slug for the timeline
* @return int - position
*/
private int getTabPosition(String slug) {
int position = 0;
for (int i = 0; i < binding.tabLayout.getTabCount(); i++) {
@ -1127,7 +1133,13 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
return -1;
}
private void selectTab(String slug, int count) {
/**
* Set the counter to the tab depending of the slug
*
* @param slug - String slug for the pinned timeline
* @param count - int new messages
*/
private void setCounterToTab(String slug, int count) {
int position = getTabPosition(slug);
if (position >= 0 && position < binding.tabLayout.getTabCount()) {
TabLayout.Tab tab = binding.tabLayout.getTabAt(position);
@ -1141,9 +1153,6 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
if (count > 0) {
counter.setVisibility(View.VISIBLE);
counter.setText(String.valueOf(count));
} else {
counter.setVisibility(View.GONE);
counter.setText("0");
}
}
}
@ -1203,7 +1212,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
break;
}
}
selectTab(slug, count);
setCounterToTab(slug, count);
}
@Override

View File

@ -35,6 +35,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
@ -68,6 +69,7 @@ import app.fedilab.android.databinding.TabCustomViewBinding;
import app.fedilab.android.exception.DBException;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonConversation;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonTimeline;
import app.fedilab.android.ui.fragment.timeline.FragmentNotificationContainer;
import app.fedilab.android.ui.pageadapter.FedilabPageAdapter;
import es.dmoral.toasty.Toasty;
@ -121,6 +123,11 @@ public class PinnedTimelineHelper {
params.setMargins(0, 0, 0, actionBarHeight);
}
}
//Remove badge when reselecting
activityMainBinding.bottomNavView.setOnItemReselectedListener(item -> {
activityMainBinding.bottomNavView.removeBadge(item.getItemId());
});
activityMainBinding.viewPager.setLayoutParams(params);
List<PinnedTimeline> pinnedTimelines = pinned.pinnedTimelines;
@ -495,10 +502,20 @@ public class PinnedTimelineHelper {
@Override
public void onTabReselected(TabLayout.Tab tab) {
Fragment fragment = fedilabPageAdapter.getCurrentFragment();
View view = tab.getCustomView();
if (view != null) {
TextView counter = view.findViewById(R.id.tab_counter);
if (counter != null) {
counter.setVisibility(View.GONE);
counter.setText("0");
}
}
if (fragment instanceof FragmentMastodonTimeline) {
((FragmentMastodonTimeline) fragment).scrollToTop();
} else if (fragment instanceof FragmentMastodonConversation) {
((FragmentMastodonConversation) fragment).scrollToTop();
} else if (fragment instanceof FragmentNotificationContainer) {
((FragmentNotificationContainer) fragment).scrollToTop();
}
}
});

View File

@ -324,7 +324,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter.
//Update the timeline with new statuses
int insertedStatus = updateStatusListWith(fetched_statuses.statuses);
//For these directions, the app will display counters for new messages
if (insertedStatus >= 0 && update != null && (direction == DIRECTION.FETCH_NEW || direction == DIRECTION.SCROLL_TOP || direction == DIRECTION.REFRESH)) {
if (insertedStatus >= 0 && update != null && direction != DIRECTION.FETCH_NEW && !fetchingMissing) {
update.onUpdate(insertedStatus, timelineType, slug);
}
if (direction == DIRECTION.TOP && fetchingMissing) {