diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index b76d81c7e..28443971a 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -15,6 +15,7 @@ package com.keylesspalace.tusky; +import android.annotation.SuppressLint; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; @@ -27,6 +28,7 @@ import android.view.KeyEvent; import android.view.View; import android.view.WindowManager; import android.widget.ImageView; +import android.widget.PopupWindow; import android.widget.TextView; import androidx.annotation.Nullable; @@ -129,6 +131,7 @@ public final class MainActivity extends BottomSheetActivity implements ActionBut private int notificationTabPosition; private MainPagerAdapter adapter; + private List tabs; private final EmojiCompat.InitCallback emojiInitCallback = new EmojiCompat.InitCallback() { @Override @@ -226,6 +229,13 @@ public final class MainActivity extends BottomSheetActivity implements ActionBut viewPager.setOffscreenPageLimit(9); } + PopupWindow popupWindow = new PopupWindow(this); + @SuppressLint("InflateParams") + View popupView = getLayoutInflater().inflate(R.layout.view_tab_action, null); + popupWindow.setContentView(popupView); + popupWindow.setOutsideTouchable(true); + popupWindow.setFocusable(true); + tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { @@ -242,12 +252,34 @@ public final class MainActivity extends BottomSheetActivity implements ActionBut @Override public void onTabReselected(TabLayout.Tab tab) { - if (adapter != null) { - Fragment fragment = adapter.getFragment(tab.getPosition()); - if (fragment instanceof ReselectableFragment) { - ((ReselectableFragment) fragment).onReselect(); - } + if (tabs.get(tab.getPosition()).getId().equals(TabDataKt.DIRECT)) { + popupView.findViewById(R.id.tab_reset).setVisibility(View.GONE); + popupView.findViewById(R.id.tab_text_reset).setVisibility(View.GONE); } + + popupView.findViewById(R.id.tab_jump_to_top) + .setOnClickListener(v -> { + if (adapter != null) { + Fragment fragment = adapter.getFragment(tab.getPosition()); + if (fragment instanceof ReselectableFragment) { + ((ReselectableFragment) fragment).onReselect(); + } + } + + popupWindow.dismiss(); + }); + popupView.findViewById(R.id.tab_reset) + .setOnClickListener(v -> { + if (adapter != null) { + Fragment fragment = adapter.getFragment(tab.getPosition()); + if (fragment instanceof ReselectableFragment) { + ((ReselectableFragment) fragment).onReset(); + } + } + + popupWindow.dismiss(); + }); + popupWindow.showAsDropDown(tab.view); } }); @@ -543,7 +575,7 @@ public final class MainActivity extends BottomSheetActivity implements ActionBut } private void setupTabs(boolean selectNotificationTab) { - List tabs = accountManager.getActiveAccount().getTabPreferences(); + tabs = accountManager.getActiveAccount().getTabPreferences(); adapter = new MainPagerAdapter(tabs, this); viewPager.setAdapter(adapter); diff --git a/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt index c154d3236..52bdd3fdb 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationsFragment.kt @@ -195,6 +195,17 @@ class ConversationsFragment : SFragment(), StatusActionListener, Injectable, Res jumpToTop() } + override fun onReset() { + viewModel.conversations.observe(this, Observer> { + adapter.submitList(it) + }) + viewModel.networkState.observe(this, Observer { + adapter.setNetworkState(it) + }) + + viewModel.load() + } + override fun onVoteInPoll(position: Int, choices: MutableList) { viewModel.voteInPoll(position, choices) } diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java index dd98cafae..04d11e4eb 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/NotificationsFragment.java @@ -1258,4 +1258,9 @@ public class NotificationsFragment extends SFragment implements public void onReselect() { jumpToTop(); } + + @Override + public void onReset() { + fullyRefresh(); + } } diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java index 69e05d1a8..8b9c8c342 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java @@ -1594,6 +1594,11 @@ public class TimelineFragment extends SFragment implements jumpToTop(); } + @Override + public void onReset() { + fullyRefresh(); + } + @Override public void refreshContent() { if (isAdded()) diff --git a/app/src/main/java/com/keylesspalace/tusky/interfaces/ReselectableFragment.kt b/app/src/main/java/com/keylesspalace/tusky/interfaces/ReselectableFragment.kt index c50178c10..88350b94e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/interfaces/ReselectableFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/interfaces/ReselectableFragment.kt @@ -8,4 +8,5 @@ interface ReselectableFragment { * Call this method when tab reselected */ fun onReselect() + fun onReset() } \ No newline at end of file diff --git a/app/src/main/res/drawable-anydpi/ic_arrow_upward.xml b/app/src/main/res/drawable-anydpi/ic_arrow_upward.xml new file mode 100644 index 000000000..c64ae3516 --- /dev/null +++ b/app/src/main/res/drawable-anydpi/ic_arrow_upward.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/view_tab_action.xml b/app/src/main/res/layout/view_tab_action.xml new file mode 100644 index 000000000..314346a89 --- /dev/null +++ b/app/src/main/res/layout/view_tab_action.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b01e5b590..58a7b7c57 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -138,6 +138,8 @@ Show favorites Quote Authorize Now! + Jump to top + Reset tab Hashtags Mentions