Commit 6b043fc4 authored by Thomas's avatar Thomas
Browse files

Timeline keep position

parent 77e90ff4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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;
+14 −6
Original line number Diff line number Diff line
@@ -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;

@@ -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();
@@ -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;
        }
+23 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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);
        }
@@ -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() {
@@ -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
+16 −1
Original line number Diff line number Diff line
@@ -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);
@@ -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);
                }
            });
        }
    }

+103 −46

File changed.

Preview size limit exceeded, changes collapsed.

Loading