Loading app/src/main/java/app/fedilab/android/client/entities/api/Status.java +1 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ public class Status implements Serializable, Cloneable { public boolean isExpended = false; public boolean isTruncated = true; public boolean isFetchMore = false; public boolean isFetchMoreHidden = false; public boolean isMediaDisplayed = false; public boolean isMediaObfuscated = true; public boolean isChecked = false; Loading app/src/main/java/app/fedilab/android/client/entities/app/StatusCache.java +14 −6 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; Loading Loading @@ -284,22 +285,24 @@ public class StatusCache { * @return Statuses * @throws DBException - throws a db exception */ public Statuses geStatuses(CacheEnum type, String instance, String user_id, String max_id, String min_id) throws DBException { public Statuses geStatuses(CacheEnum type, String instance, String user_id, String max_id, String min_id, String since_id) throws DBException { if (db == null) { throw new DBException("db is null. Wrong initialization."); } String order = " DESC"; String selection = Sqlite.COL_INSTANCE + "='" + instance + "' AND " + Sqlite.COL_USER_ID + "= '" + user_id + "'"; String limit = String.valueOf(MastodonHelper.statusesPerCall(context)); if (max_id == null && min_id != null) { if (min_id != null) { selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + min_id + "'"; } else if (max_id != null && min_id == null) { selection += "AND " + Sqlite.COL_STATUS_ID + " < '" + max_id + "'"; order = " ASC"; } else if (max_id != null) { selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + min_id + "' AND " + Sqlite.COL_STATUS_ID + " < '" + max_id + "'"; selection += "AND " + Sqlite.COL_STATUS_ID + " < '" + max_id + "'"; } else if (since_id != null) { selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + since_id + "'"; limit = null; } try { Cursor c = db.query(Sqlite.TABLE_STATUS_CACHE, null, selection, null, null, null, Sqlite.COL_STATUS_ID + " DESC", limit); Cursor c = db.query(Sqlite.TABLE_STATUS_CACHE, null, selection, null, null, null, Sqlite.COL_STATUS_ID + order, limit); return createStatusReply(cursorToListOfStatuses(c)); } catch (Exception e) { e.printStackTrace(); Loading Loading @@ -373,6 +376,11 @@ public class StatusCache { statuses.statuses = statusList; Pagination pagination = new Pagination(); if (statusList != null && statusList.size() > 0) { //Status list is inverted, it happens for min_id due to ASC ordering if (statusList.get(0).id.compareTo(statusList.get(statusList.size() - 1).id) < 0) { Collections.reverse(statusList); statuses.statuses = statusList; } pagination.max_id = statusList.get(0).id; pagination.min_id = statusList.get(statusList.size() - 1).id; } Loading app/src/main/java/app/fedilab/android/helper/PinnedTimelineHelper.java +23 −2 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import java.util.List; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.activities.MainActivity; import app.fedilab.android.client.entities.api.MastodonList; import app.fedilab.android.client.entities.app.BottomMenu; import app.fedilab.android.client.entities.app.Pinned; Loading Loading @@ -146,7 +147,8 @@ public class PinnedTimelineHelper { //Pinned tab position will start after BOTTOM_TIMELINE_COUNT (ie 5) activityMainBinding.tabLayout.removeAllTabs(); //Small hack to hide first tabs (they represent the item of the bottom menu) for (int i = 0; i < BOTTOM_TIMELINE_COUNT; i++) { int toRemove = itemToRemoveInBottomMenu(activity); for (int i = 0; i < BOTTOM_TIMELINE_COUNT - toRemove; i++) { activityMainBinding.tabLayout.addTab(activityMainBinding.tabLayout.newTab()); ((ViewGroup) activityMainBinding.tabLayout.getChildAt(0)).getChildAt(i).setVisibility(View.GONE); } Loading Loading @@ -203,7 +205,7 @@ public class PinnedTimelineHelper { activityMainBinding.viewPager.clearOnPageChangeListeners(); activityMainBinding.tabLayout.clearOnTabSelectedListeners(); FedilabPageAdapter fedilabPageAdapter = new FedilabPageAdapter(activity.getSupportFragmentManager(), pinned, bottomMenu); FedilabPageAdapter fedilabPageAdapter = new FedilabPageAdapter(activity, activity.getSupportFragmentManager(), pinned, bottomMenu); activityMainBinding.viewPager.setAdapter(fedilabPageAdapter); activityMainBinding.viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(activityMainBinding.tabLayout)); activityMainBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { Loading Loading @@ -254,6 +256,25 @@ public class PinnedTimelineHelper { } public static int itemToRemoveInBottomMenu(Context context) { //Small hack to hide first tabs (they represent the item of the bottom menu) BottomMenu bottomMenuDb; int toRemove = 0; try { //If some menu items have been hidden we should not create tab for them bottomMenuDb = new BottomMenu(context).getAllBottomMenu(MainActivity.accountWeakReference.get()); if (bottomMenuDb != null && bottomMenuDb.bottom_menu != null) { for (BottomMenu.MenuItem menuItem : bottomMenuDb.bottom_menu) { if (!menuItem.visible) { toRemove++; } } } } catch (DBException e) { e.printStackTrace(); } return toRemove; } /** * Manage long clicks on Tag timelines Loading app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +16 −1 Original line number Diff line number Diff line Loading @@ -1675,6 +1675,9 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } else if (viewType == STATUS_ART) { //Art statuses DrawerStatusArtBinding itemBinding = DrawerStatusArtBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusViewHolder(itemBinding); } else if (viewType == STATUS_FETCH_MORE) { //Fetch more button DrawerFetchMoreBinding itemBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusViewHolder(itemBinding); } else { //Classic statuses if (!minified) { DrawerStatusBinding itemBinding = DrawerStatusBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); Loading Loading @@ -1764,7 +1767,19 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> }); } else if (viewHolder.getItemViewType() == STATUS_FETCH_MORE) { StatusViewHolder holder = (StatusViewHolder) viewHolder; holder.bindingFetchMore.fetchMore.setOnClickListener(v -> fetchMoreCallBack.onClick(status.id)); if (status.isFetchMoreHidden) { holder.bindingFetchMore.fetchMore.setVisibility(View.GONE); } else { holder.bindingFetchMore.fetchMore.setVisibility(View.VISIBLE); } holder.bindingFetchMore.fetchMore.setOnClickListener(v -> { //We hide the button status.isFetchMoreHidden = true; notifyItemChanged(position); if (position + 1 < statusList.size()) { fetchMoreCallBack.onClick(statusList.get(position + 1).id); } }); } } Loading app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java +103 −46 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
app/src/main/java/app/fedilab/android/client/entities/api/Status.java +1 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ public class Status implements Serializable, Cloneable { public boolean isExpended = false; public boolean isTruncated = true; public boolean isFetchMore = false; public boolean isFetchMoreHidden = false; public boolean isMediaDisplayed = false; public boolean isMediaObfuscated = true; public boolean isChecked = false; Loading
app/src/main/java/app/fedilab/android/client/entities/app/StatusCache.java +14 −6 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; Loading Loading @@ -284,22 +285,24 @@ public class StatusCache { * @return Statuses * @throws DBException - throws a db exception */ public Statuses geStatuses(CacheEnum type, String instance, String user_id, String max_id, String min_id) throws DBException { public Statuses geStatuses(CacheEnum type, String instance, String user_id, String max_id, String min_id, String since_id) throws DBException { if (db == null) { throw new DBException("db is null. Wrong initialization."); } String order = " DESC"; String selection = Sqlite.COL_INSTANCE + "='" + instance + "' AND " + Sqlite.COL_USER_ID + "= '" + user_id + "'"; String limit = String.valueOf(MastodonHelper.statusesPerCall(context)); if (max_id == null && min_id != null) { if (min_id != null) { selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + min_id + "'"; } else if (max_id != null && min_id == null) { selection += "AND " + Sqlite.COL_STATUS_ID + " < '" + max_id + "'"; order = " ASC"; } else if (max_id != null) { selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + min_id + "' AND " + Sqlite.COL_STATUS_ID + " < '" + max_id + "'"; selection += "AND " + Sqlite.COL_STATUS_ID + " < '" + max_id + "'"; } else if (since_id != null) { selection += "AND " + Sqlite.COL_STATUS_ID + " > '" + since_id + "'"; limit = null; } try { Cursor c = db.query(Sqlite.TABLE_STATUS_CACHE, null, selection, null, null, null, Sqlite.COL_STATUS_ID + " DESC", limit); Cursor c = db.query(Sqlite.TABLE_STATUS_CACHE, null, selection, null, null, null, Sqlite.COL_STATUS_ID + order, limit); return createStatusReply(cursorToListOfStatuses(c)); } catch (Exception e) { e.printStackTrace(); Loading Loading @@ -373,6 +376,11 @@ public class StatusCache { statuses.statuses = statusList; Pagination pagination = new Pagination(); if (statusList != null && statusList.size() > 0) { //Status list is inverted, it happens for min_id due to ASC ordering if (statusList.get(0).id.compareTo(statusList.get(statusList.size() - 1).id) < 0) { Collections.reverse(statusList); statuses.statuses = statusList; } pagination.max_id = statusList.get(0).id; pagination.min_id = statusList.get(statusList.size() - 1).id; } Loading
app/src/main/java/app/fedilab/android/helper/PinnedTimelineHelper.java +23 −2 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import java.util.List; import app.fedilab.android.BaseMainActivity; import app.fedilab.android.R; import app.fedilab.android.activities.MainActivity; import app.fedilab.android.client.entities.api.MastodonList; import app.fedilab.android.client.entities.app.BottomMenu; import app.fedilab.android.client.entities.app.Pinned; Loading Loading @@ -146,7 +147,8 @@ public class PinnedTimelineHelper { //Pinned tab position will start after BOTTOM_TIMELINE_COUNT (ie 5) activityMainBinding.tabLayout.removeAllTabs(); //Small hack to hide first tabs (they represent the item of the bottom menu) for (int i = 0; i < BOTTOM_TIMELINE_COUNT; i++) { int toRemove = itemToRemoveInBottomMenu(activity); for (int i = 0; i < BOTTOM_TIMELINE_COUNT - toRemove; i++) { activityMainBinding.tabLayout.addTab(activityMainBinding.tabLayout.newTab()); ((ViewGroup) activityMainBinding.tabLayout.getChildAt(0)).getChildAt(i).setVisibility(View.GONE); } Loading Loading @@ -203,7 +205,7 @@ public class PinnedTimelineHelper { activityMainBinding.viewPager.clearOnPageChangeListeners(); activityMainBinding.tabLayout.clearOnTabSelectedListeners(); FedilabPageAdapter fedilabPageAdapter = new FedilabPageAdapter(activity.getSupportFragmentManager(), pinned, bottomMenu); FedilabPageAdapter fedilabPageAdapter = new FedilabPageAdapter(activity, activity.getSupportFragmentManager(), pinned, bottomMenu); activityMainBinding.viewPager.setAdapter(fedilabPageAdapter); activityMainBinding.viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(activityMainBinding.tabLayout)); activityMainBinding.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { Loading Loading @@ -254,6 +256,25 @@ public class PinnedTimelineHelper { } public static int itemToRemoveInBottomMenu(Context context) { //Small hack to hide first tabs (they represent the item of the bottom menu) BottomMenu bottomMenuDb; int toRemove = 0; try { //If some menu items have been hidden we should not create tab for them bottomMenuDb = new BottomMenu(context).getAllBottomMenu(MainActivity.accountWeakReference.get()); if (bottomMenuDb != null && bottomMenuDb.bottom_menu != null) { for (BottomMenu.MenuItem menuItem : bottomMenuDb.bottom_menu) { if (!menuItem.visible) { toRemove++; } } } } catch (DBException e) { e.printStackTrace(); } return toRemove; } /** * Manage long clicks on Tag timelines Loading
app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +16 −1 Original line number Diff line number Diff line Loading @@ -1675,6 +1675,9 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> } else if (viewType == STATUS_ART) { //Art statuses DrawerStatusArtBinding itemBinding = DrawerStatusArtBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusViewHolder(itemBinding); } else if (viewType == STATUS_FETCH_MORE) { //Fetch more button DrawerFetchMoreBinding itemBinding = DrawerFetchMoreBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); return new StatusViewHolder(itemBinding); } else { //Classic statuses if (!minified) { DrawerStatusBinding itemBinding = DrawerStatusBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); Loading Loading @@ -1764,7 +1767,19 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> }); } else if (viewHolder.getItemViewType() == STATUS_FETCH_MORE) { StatusViewHolder holder = (StatusViewHolder) viewHolder; holder.bindingFetchMore.fetchMore.setOnClickListener(v -> fetchMoreCallBack.onClick(status.id)); if (status.isFetchMoreHidden) { holder.bindingFetchMore.fetchMore.setVisibility(View.GONE); } else { holder.bindingFetchMore.fetchMore.setVisibility(View.VISIBLE); } holder.bindingFetchMore.fetchMore.setOnClickListener(v -> { //We hide the button status.isFetchMoreHidden = true; notifyItemChanged(position); if (position + 1 < statusList.size()) { fetchMoreCallBack.onClick(statusList.get(position + 1).id); } }); } } Loading
app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java +103 −46 File changed.Preview size limit exceeded, changes collapsed. Show changes