Loading app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java +42 −11 Original line number Diff line number Diff line Loading @@ -221,6 +221,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> private final boolean checkRemotely; public RemoteInstance.InstanceType type; public PinnedTimeline pinnedTimeline; public boolean reverseTimeline; public FetchMoreCallBack fetchMoreCallBack; private Context context; private boolean visiblePixelfed; Loading Loading @@ -2668,11 +2669,15 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } if ((status.isFetchMore || status.isUnreachableGap) && fetchMoreCallBack != null) { boolean showInTopContainer = (status.positionFetchMore == Status.PositionFetchMore.BOTTOM); if (adapter instanceof StatusAdapter && ((StatusAdapter) adapter).reverseTimeline) { showInTopContainer = !showInTopContainer; } if (status.isUnreachableGap) { DrawerFetchMoreBinding drawerFetchMoreBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(context)); drawerFetchMoreBinding.fetchMoreContainer.setVisibility(View.GONE); drawerFetchMoreBinding.unreachableGapMessage.setVisibility(View.VISIBLE); if (status.positionFetchMore == Status.PositionFetchMore.BOTTOM) { if (showInTopContainer) { holder.binding.fetchMoreContainerBottom.setVisibility(View.GONE); holder.binding.fetchMoreContainerTop.setVisibility(View.VISIBLE); holder.binding.fetchMoreContainerTop.removeAllViews(); Loading @@ -2687,7 +2692,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> DrawerFetchMoreBinding drawerFetchMoreBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(context)); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); drawerFetchMoreBinding.getRoot().setLayoutParams(lp); if (status.positionFetchMore == Status.PositionFetchMore.BOTTOM) { if (showInTopContainer) { holder.binding.fetchMoreContainerBottom.setVisibility(View.GONE); holder.binding.fetchMoreContainerTop.setVisibility(View.VISIBLE); holder.binding.fetchMoreContainerTop.removeAllViews(); Loading @@ -2698,12 +2703,21 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> holder.binding.fetchMoreContainerBottom.removeAllViews(); holder.binding.fetchMoreContainerBottom.addView(drawerFetchMoreBinding.getRoot()); } boolean reverseMode = adapter instanceof StatusAdapter && ((StatusAdapter) adapter).reverseTimeline; drawerFetchMoreBinding.fetchMoreMin.setOnClickListener(v -> { status.isFetchMore = false; status.isFetching = true; int position = holder.getBindingAdapterPosition(); adapter.notifyItemChanged(position); if (position < statusList.size() - 1) { if (reverseMode) { String fromId; if (status.positionFetchMore == Status.PositionFetchMore.TOP || position == 0) { fromId = statusList.get(position).id; } else { fromId = statusList.get(position - 1).id; } fetchMoreCallBack.onClickMaxId(fromId, status); } else if (position < statusList.size() - 1) { String fromId; if (status.positionFetchMore == Status.PositionFetchMore.TOP) { fromId = statusList.get(position + 1).id; Loading @@ -2714,9 +2728,21 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } }); drawerFetchMoreBinding.fetchMoreMax.setOnClickListener(v -> { //We hide the button status.isFetchMore = false; status.isFetching = true; if (reverseMode) { int position = holder.getBindingAdapterPosition(); adapter.notifyItemChanged(position); if (position < statusList.size() - 1) { String fromId; if (status.positionFetchMore == Status.PositionFetchMore.TOP) { fromId = statusList.get(position + 1).id; } else { fromId = status.id; } fetchMoreCallBack.onClickMinId(fromId, status); } } else { String fromId; if (status.positionFetchMore == Status.PositionFetchMore.TOP || holder.getBindingAdapterPosition() == 0) { fromId = statusList.get(holder.getBindingAdapterPosition()).id; Loading @@ -2725,6 +2751,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } fetchMoreCallBack.onClickMaxId(fromId, status); adapter.notifyItemChanged(holder.getBindingAdapterPosition()); } }); } else { holder.binding.fetchMoreContainerBottom.setVisibility(View.GONE); Loading Loading @@ -2753,7 +2780,11 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); drawerMessageFetchingBinding.fetchingContainer.setLayoutParams(lp); drawerMessageFetchingBinding.fetchingProgress.getIndeterminateDrawable().setColorFilter(ThemeHelper.getAttColor(context, R.attr.colorPrimary), PorterDuff.Mode.SRC_IN); if (status.positionFetchMore == Status.PositionFetchMore.BOTTOM) { boolean fetchInTopContainer = (status.positionFetchMore == Status.PositionFetchMore.BOTTOM); if (adapter instanceof StatusAdapter && ((StatusAdapter) adapter).reverseTimeline) { fetchInTopContainer = !fetchInTopContainer; } if (fetchInTopContainer) { holder.binding.fetchMoreContainerBottom.setVisibility(View.GONE); holder.binding.fetchMoreContainerTop.setVisibility(View.VISIBLE); holder.binding.fetchMoreContainerTop.removeAllViews(); Loading app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentTimelinesSettings.java +3 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,9 @@ public class FragmentTimelinesSettings extends PreferenceFragmentCompat implemen if (key.compareToIgnoreCase(getString(R.string.SET_TIMELINE_SCROLLBAR)) == 0) { recreate = true; } if (key.compareToIgnoreCase(getString(R.string.SET_REVERSE_TIMELINE)) == 0) { recreate = true; } if (key.compareToIgnoreCase(getString(R.string.SET_DISPLAY_BOOKMARK)) == 0) { SwitchPreferenceCompat SET_DISPLAY_BOOKMARK = findPreference(getString(R.string.SET_DISPLAY_BOOKMARK)); if (SET_DISPLAY_BOOKMARK != null) { Loading app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTimeline.java +53 −16 Original line number Diff line number Diff line Loading @@ -217,6 +217,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. private String ident; private String slug; private boolean canBeFederated; private boolean reverseTimeline; private boolean rememberPosition; private String publicTrendsDomain; Loading Loading @@ -655,11 +656,18 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } else if (update != null && insertedStatus == 0 && direction == DIRECTION.REFRESH) { update.onUpdate(0, timelineType, slug); } if (direction == DIRECTION.TOP && fetchingMissing && canScroll) { if (fetchingMissing && canScroll) { if (!reverseTimeline && direction == DIRECTION.TOP) { int position = getAbsolutePosition(fetched_statuses.statuses.get(fetched_statuses.statuses.size() - 1)); if (position != -1) { binding.recyclerView.scrollToPosition(position + 1); } } else if (reverseTimeline && direction == DIRECTION.BOTTOM) { int position = getAbsolutePosition(fetched_statuses.statuses.get(0)); if (position > 0) { binding.recyclerView.scrollToPosition(position - 1); } } } if (!fetchingMissing) { if (search != null) { Loading Loading @@ -773,9 +781,12 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. min_id = statuses.pagination.min_id; } } SharedPreferences sharedpref = PreferenceManager.getDefaultSharedPreferences(requireActivity()); reverseTimeline = sharedpref.getBoolean(getString(R.string.SET_REVERSE_TIMELINE), false); statusAdapter = new StatusAdapter(timelineStatuses, timelineType, minified, canBeFederated, checkRemotely); statusAdapter.fetchMoreCallBack = this; statusAdapter.pinnedTimeline = pinnedTimeline; statusAdapter.reverseTimeline = reverseTimeline; //------Specifications for Lemmy timelines if (pinnedTimeline != null && pinnedTimeline.remoteInstance != null) { statusAdapter.type = pinnedTimeline.remoteInstance.type; Loading @@ -791,6 +802,10 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } mLayoutManager = new LinearLayoutManager(requireActivity()); mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); if (reverseTimeline) { mLayoutManager.setReverseLayout(true); mLayoutManager.setStackFromEnd(true); } binding.recyclerView.setLayoutManager(mLayoutManager); binding.recyclerView.setAdapter(statusAdapter); Loading @@ -813,6 +828,27 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. ((BaseMainActivity) requireActivity()).manageFloatingButton(false); } int firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition(); if (reverseTimeline) { if (dy < 0) { int visibleItemCount = mLayoutManager.getChildCount(); int totalItemCount = mLayoutManager.getItemCount(); if (firstVisibleItem + visibleItemCount == totalItemCount) { if (!flagLoading) { flagLoading = true; binding.loadingNextElements.setVisibility(View.VISIBLE); router(DIRECTION.BOTTOM); } } else { binding.loadingNextElements.setVisibility(View.GONE); } } else if (firstVisibleItem == 0) { if (!flagLoading) { flagLoading = true; binding.loadingNextElements.setVisibility(View.VISIBLE); router(DIRECTION.TOP); } } } else { if (dy > 0) { int visibleItemCount = mLayoutManager.getChildCount(); int totalItemCount = mLayoutManager.getItemCount(); Loading @@ -825,7 +861,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } else { binding.loadingNextElements.setVisibility(View.GONE); } } else if (firstVisibleItem == 0) { //Scroll top and item is zero } else if (firstVisibleItem == 0) { if (!flagLoading) { flagLoading = true; binding.loadingNextElements.setVisibility(View.VISIBLE); Loading @@ -833,6 +869,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } } } } }); //For first tab we fetch new messages, if we keep position if (slug != null /*&& slug.compareTo(Helper.getSlugOfFirstFragment(requireActivity(), currentUserID, currentInstance)) == 0*/ && rememberPosition) { Loading app/src/main/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -1384,6 +1384,7 @@ <string name="SET_GROUP_REBLOGS" translatable="false">SET_GROUP_REBLOGS</string> <string name="SET_BOOST_ORIGINAL_DATE" translatable="false">SET_BOOST_ORIGINAL_DATE</string> <string name="SET_TIMELINE_SCROLLBAR" translatable="false">SET_TIMELINE_SCROLLBAR</string> <string name="SET_REVERSE_TIMELINE" translatable="false">SET_REVERSE_TIMELINE</string> <string name="SET_HIGHLIGHT_NEW_COMMENTS" translatable="false">SET_HIGHLIGHT_NEW_COMMENTS</string> <string name="SET_MARKDOWN_SUPPORT" translatable="false">SET_MARKDOWN_SUPPORT</string> <string name="SET_TRUNCATE_LINKS" translatable="false">SET_TRUNCATE_LINKS</string> Loading Loading @@ -2182,6 +2183,7 @@ <string name="Directory">Directory</string> <string name="boost_original_date">Display original date for boosts</string> <string name="timeline_scrollbar">Display a scroll bar for timelines</string> <string name="reverse_timeline">Reverse timeline reading order</string> <string name="highlight_new_comments">Highlight new comments in threads</string> <string name="markdown_support">Markdown support</string> <string name="set_disable_release_notes">Disable release notes</string> Loading app/src/main/res/xml/pref_timelines.xml +7 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,13 @@ app:singleLineTitle="false" app:title="@string/timeline_scrollbar" /> <SwitchPreferenceCompat android:defaultValue="false" app:iconSpaceReserved="false" app:key="@string/SET_REVERSE_TIMELINE" app:singleLineTitle="false" app:title="@string/reverse_timeline" /> <SwitchPreferenceCompat android:defaultValue="true" app:iconSpaceReserved="false" Loading Loading
app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java +42 −11 Original line number Diff line number Diff line Loading @@ -221,6 +221,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> private final boolean checkRemotely; public RemoteInstance.InstanceType type; public PinnedTimeline pinnedTimeline; public boolean reverseTimeline; public FetchMoreCallBack fetchMoreCallBack; private Context context; private boolean visiblePixelfed; Loading Loading @@ -2668,11 +2669,15 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } if ((status.isFetchMore || status.isUnreachableGap) && fetchMoreCallBack != null) { boolean showInTopContainer = (status.positionFetchMore == Status.PositionFetchMore.BOTTOM); if (adapter instanceof StatusAdapter && ((StatusAdapter) adapter).reverseTimeline) { showInTopContainer = !showInTopContainer; } if (status.isUnreachableGap) { DrawerFetchMoreBinding drawerFetchMoreBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(context)); drawerFetchMoreBinding.fetchMoreContainer.setVisibility(View.GONE); drawerFetchMoreBinding.unreachableGapMessage.setVisibility(View.VISIBLE); if (status.positionFetchMore == Status.PositionFetchMore.BOTTOM) { if (showInTopContainer) { holder.binding.fetchMoreContainerBottom.setVisibility(View.GONE); holder.binding.fetchMoreContainerTop.setVisibility(View.VISIBLE); holder.binding.fetchMoreContainerTop.removeAllViews(); Loading @@ -2687,7 +2692,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> DrawerFetchMoreBinding drawerFetchMoreBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(context)); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); drawerFetchMoreBinding.getRoot().setLayoutParams(lp); if (status.positionFetchMore == Status.PositionFetchMore.BOTTOM) { if (showInTopContainer) { holder.binding.fetchMoreContainerBottom.setVisibility(View.GONE); holder.binding.fetchMoreContainerTop.setVisibility(View.VISIBLE); holder.binding.fetchMoreContainerTop.removeAllViews(); Loading @@ -2698,12 +2703,21 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> holder.binding.fetchMoreContainerBottom.removeAllViews(); holder.binding.fetchMoreContainerBottom.addView(drawerFetchMoreBinding.getRoot()); } boolean reverseMode = adapter instanceof StatusAdapter && ((StatusAdapter) adapter).reverseTimeline; drawerFetchMoreBinding.fetchMoreMin.setOnClickListener(v -> { status.isFetchMore = false; status.isFetching = true; int position = holder.getBindingAdapterPosition(); adapter.notifyItemChanged(position); if (position < statusList.size() - 1) { if (reverseMode) { String fromId; if (status.positionFetchMore == Status.PositionFetchMore.TOP || position == 0) { fromId = statusList.get(position).id; } else { fromId = statusList.get(position - 1).id; } fetchMoreCallBack.onClickMaxId(fromId, status); } else if (position < statusList.size() - 1) { String fromId; if (status.positionFetchMore == Status.PositionFetchMore.TOP) { fromId = statusList.get(position + 1).id; Loading @@ -2714,9 +2728,21 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } }); drawerFetchMoreBinding.fetchMoreMax.setOnClickListener(v -> { //We hide the button status.isFetchMore = false; status.isFetching = true; if (reverseMode) { int position = holder.getBindingAdapterPosition(); adapter.notifyItemChanged(position); if (position < statusList.size() - 1) { String fromId; if (status.positionFetchMore == Status.PositionFetchMore.TOP) { fromId = statusList.get(position + 1).id; } else { fromId = status.id; } fetchMoreCallBack.onClickMinId(fromId, status); } } else { String fromId; if (status.positionFetchMore == Status.PositionFetchMore.TOP || holder.getBindingAdapterPosition() == 0) { fromId = statusList.get(holder.getBindingAdapterPosition()).id; Loading @@ -2725,6 +2751,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } fetchMoreCallBack.onClickMaxId(fromId, status); adapter.notifyItemChanged(holder.getBindingAdapterPosition()); } }); } else { holder.binding.fetchMoreContainerBottom.setVisibility(View.GONE); Loading Loading @@ -2753,7 +2780,11 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); drawerMessageFetchingBinding.fetchingContainer.setLayoutParams(lp); drawerMessageFetchingBinding.fetchingProgress.getIndeterminateDrawable().setColorFilter(ThemeHelper.getAttColor(context, R.attr.colorPrimary), PorterDuff.Mode.SRC_IN); if (status.positionFetchMore == Status.PositionFetchMore.BOTTOM) { boolean fetchInTopContainer = (status.positionFetchMore == Status.PositionFetchMore.BOTTOM); if (adapter instanceof StatusAdapter && ((StatusAdapter) adapter).reverseTimeline) { fetchInTopContainer = !fetchInTopContainer; } if (fetchInTopContainer) { holder.binding.fetchMoreContainerBottom.setVisibility(View.GONE); holder.binding.fetchMoreContainerTop.setVisibility(View.VISIBLE); holder.binding.fetchMoreContainerTop.removeAllViews(); Loading
app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentTimelinesSettings.java +3 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,9 @@ public class FragmentTimelinesSettings extends PreferenceFragmentCompat implemen if (key.compareToIgnoreCase(getString(R.string.SET_TIMELINE_SCROLLBAR)) == 0) { recreate = true; } if (key.compareToIgnoreCase(getString(R.string.SET_REVERSE_TIMELINE)) == 0) { recreate = true; } if (key.compareToIgnoreCase(getString(R.string.SET_DISPLAY_BOOKMARK)) == 0) { SwitchPreferenceCompat SET_DISPLAY_BOOKMARK = findPreference(getString(R.string.SET_DISPLAY_BOOKMARK)); if (SET_DISPLAY_BOOKMARK != null) { Loading
app/src/main/java/app/fedilab/android/mastodon/ui/fragment/timeline/FragmentMastodonTimeline.java +53 −16 Original line number Diff line number Diff line Loading @@ -217,6 +217,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. private String ident; private String slug; private boolean canBeFederated; private boolean reverseTimeline; private boolean rememberPosition; private String publicTrendsDomain; Loading Loading @@ -655,11 +656,18 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } else if (update != null && insertedStatus == 0 && direction == DIRECTION.REFRESH) { update.onUpdate(0, timelineType, slug); } if (direction == DIRECTION.TOP && fetchingMissing && canScroll) { if (fetchingMissing && canScroll) { if (!reverseTimeline && direction == DIRECTION.TOP) { int position = getAbsolutePosition(fetched_statuses.statuses.get(fetched_statuses.statuses.size() - 1)); if (position != -1) { binding.recyclerView.scrollToPosition(position + 1); } } else if (reverseTimeline && direction == DIRECTION.BOTTOM) { int position = getAbsolutePosition(fetched_statuses.statuses.get(0)); if (position > 0) { binding.recyclerView.scrollToPosition(position - 1); } } } if (!fetchingMissing) { if (search != null) { Loading Loading @@ -773,9 +781,12 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. min_id = statuses.pagination.min_id; } } SharedPreferences sharedpref = PreferenceManager.getDefaultSharedPreferences(requireActivity()); reverseTimeline = sharedpref.getBoolean(getString(R.string.SET_REVERSE_TIMELINE), false); statusAdapter = new StatusAdapter(timelineStatuses, timelineType, minified, canBeFederated, checkRemotely); statusAdapter.fetchMoreCallBack = this; statusAdapter.pinnedTimeline = pinnedTimeline; statusAdapter.reverseTimeline = reverseTimeline; //------Specifications for Lemmy timelines if (pinnedTimeline != null && pinnedTimeline.remoteInstance != null) { statusAdapter.type = pinnedTimeline.remoteInstance.type; Loading @@ -791,6 +802,10 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } mLayoutManager = new LinearLayoutManager(requireActivity()); mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); if (reverseTimeline) { mLayoutManager.setReverseLayout(true); mLayoutManager.setStackFromEnd(true); } binding.recyclerView.setLayoutManager(mLayoutManager); binding.recyclerView.setAdapter(statusAdapter); Loading @@ -813,6 +828,27 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. ((BaseMainActivity) requireActivity()).manageFloatingButton(false); } int firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition(); if (reverseTimeline) { if (dy < 0) { int visibleItemCount = mLayoutManager.getChildCount(); int totalItemCount = mLayoutManager.getItemCount(); if (firstVisibleItem + visibleItemCount == totalItemCount) { if (!flagLoading) { flagLoading = true; binding.loadingNextElements.setVisibility(View.VISIBLE); router(DIRECTION.BOTTOM); } } else { binding.loadingNextElements.setVisibility(View.GONE); } } else if (firstVisibleItem == 0) { if (!flagLoading) { flagLoading = true; binding.loadingNextElements.setVisibility(View.VISIBLE); router(DIRECTION.TOP); } } } else { if (dy > 0) { int visibleItemCount = mLayoutManager.getChildCount(); int totalItemCount = mLayoutManager.getItemCount(); Loading @@ -825,7 +861,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } else { binding.loadingNextElements.setVisibility(View.GONE); } } else if (firstVisibleItem == 0) { //Scroll top and item is zero } else if (firstVisibleItem == 0) { if (!flagLoading) { flagLoading = true; binding.loadingNextElements.setVisibility(View.VISIBLE); Loading @@ -833,6 +869,7 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } } } } }); //For first tab we fetch new messages, if we keep position if (slug != null /*&& slug.compareTo(Helper.getSlugOfFirstFragment(requireActivity(), currentUserID, currentInstance)) == 0*/ && rememberPosition) { Loading
app/src/main/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -1384,6 +1384,7 @@ <string name="SET_GROUP_REBLOGS" translatable="false">SET_GROUP_REBLOGS</string> <string name="SET_BOOST_ORIGINAL_DATE" translatable="false">SET_BOOST_ORIGINAL_DATE</string> <string name="SET_TIMELINE_SCROLLBAR" translatable="false">SET_TIMELINE_SCROLLBAR</string> <string name="SET_REVERSE_TIMELINE" translatable="false">SET_REVERSE_TIMELINE</string> <string name="SET_HIGHLIGHT_NEW_COMMENTS" translatable="false">SET_HIGHLIGHT_NEW_COMMENTS</string> <string name="SET_MARKDOWN_SUPPORT" translatable="false">SET_MARKDOWN_SUPPORT</string> <string name="SET_TRUNCATE_LINKS" translatable="false">SET_TRUNCATE_LINKS</string> Loading Loading @@ -2182,6 +2183,7 @@ <string name="Directory">Directory</string> <string name="boost_original_date">Display original date for boosts</string> <string name="timeline_scrollbar">Display a scroll bar for timelines</string> <string name="reverse_timeline">Reverse timeline reading order</string> <string name="highlight_new_comments">Highlight new comments in threads</string> <string name="markdown_support">Markdown support</string> <string name="set_disable_release_notes">Disable release notes</string> Loading
app/src/main/res/xml/pref_timelines.xml +7 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,13 @@ app:singleLineTitle="false" app:title="@string/timeline_scrollbar" /> <SwitchPreferenceCompat android:defaultValue="false" app:iconSpaceReserved="false" app:key="@string/SET_REVERSE_TIMELINE" app:singleLineTitle="false" app:title="@string/reverse_timeline" /> <SwitchPreferenceCompat android:defaultValue="true" app:iconSpaceReserved="false" Loading