forked from mirrors/Fedilab
some fixes
This commit is contained in:
parent
e1677b82d9
commit
72b5517421
2 changed files with 79 additions and 84 deletions
|
@ -55,10 +55,47 @@ public class QuickLoad {
|
||||||
db = null;
|
db = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private type typeOfFetch;
|
||||||
|
|
||||||
public QuickLoad(Context context) {
|
public QuickLoad(Context context) {
|
||||||
//Creation of the DB with tables
|
//Creation of the DB with tables
|
||||||
this.db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
this.db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||||
_mContext = context;
|
_mContext = context;
|
||||||
|
this.typeOfFetch = type.STATUSES;
|
||||||
|
}
|
||||||
|
|
||||||
|
public QuickLoad(Context context, type type) {
|
||||||
|
//Creation of the DB with tables
|
||||||
|
this.db = Sqlite.getInstance(context.getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||||
|
_mContext = context;
|
||||||
|
this.typeOfFetch = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update a QuickLoad in db
|
||||||
|
*
|
||||||
|
* @param quickLoad {@link QuickLoad}
|
||||||
|
* @throws DBException exception with database
|
||||||
|
*/
|
||||||
|
private void updateStatus(QuickLoad quickLoad) throws DBException {
|
||||||
|
if (db == null) {
|
||||||
|
throw new DBException("db is null. Wrong initialization.");
|
||||||
|
}
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
values.put(Sqlite.COL_POSITION, quickLoad.position);
|
||||||
|
if (quickLoad.statuses != null) {
|
||||||
|
values.put(Sqlite.COL_STATUSES, StatusDraft.mastodonStatusListToStringStorage(quickLoad.statuses));
|
||||||
|
} else if (quickLoad.notifications != null) {
|
||||||
|
values.put(Sqlite.COL_STATUSES, Notification.notificationsToStringStorage(quickLoad.notifications));
|
||||||
|
}
|
||||||
|
//Inserts token
|
||||||
|
try {
|
||||||
|
db.update(Sqlite.TABLE_QUICK_LOAD,
|
||||||
|
values, Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =? AND " + Sqlite.COL_SLUG + "=?",
|
||||||
|
new String[]{quickLoad.user_id, quickLoad.instance, quickLoad.slug});
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -474,26 +511,36 @@ public class QuickLoad {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update a QuickLoad in db
|
* Convert a cursor to QuickLoad
|
||||||
*
|
*
|
||||||
* @param quickLoad {@link QuickLoad}
|
* @param c Cursor
|
||||||
* @throws DBException exception with database
|
* @return QuickLoad
|
||||||
*/
|
*/
|
||||||
private void updateStatus(QuickLoad quickLoad) throws DBException {
|
private QuickLoad cursorToQuickLoad(Cursor c) {
|
||||||
if (db == null) {
|
//No element found
|
||||||
throw new DBException("db is null. Wrong initialization.");
|
if (c.getCount() == 0) {
|
||||||
|
c.close();
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
ContentValues values = new ContentValues();
|
//Take the first element
|
||||||
values.put(Sqlite.COL_POSITION, quickLoad.position);
|
c.moveToFirst();
|
||||||
values.put(Sqlite.COL_STATUSES, StatusDraft.mastodonStatusListToStringStorage(quickLoad.statuses));
|
QuickLoad quickLoad = new QuickLoad();
|
||||||
//Inserts token
|
quickLoad.id = c.getInt(c.getColumnIndexOrThrow(Sqlite.COL_ID));
|
||||||
try {
|
quickLoad.instance = c.getString(c.getColumnIndexOrThrow(Sqlite.COL_INSTANCE));
|
||||||
db.update(Sqlite.TABLE_QUICK_LOAD,
|
quickLoad.user_id = c.getString(c.getColumnIndexOrThrow(Sqlite.COL_USER_ID));
|
||||||
values, Sqlite.COL_USER_ID + " = ? AND " + Sqlite.COL_INSTANCE + " =? AND " + Sqlite.COL_SLUG + "=?",
|
quickLoad.slug = c.getString(c.getColumnIndexOrThrow(Sqlite.COL_SLUG));
|
||||||
new String[]{quickLoad.user_id, quickLoad.instance, quickLoad.slug});
|
if (typeOfFetch == type.STATUSES) {
|
||||||
} catch (Exception e) {
|
quickLoad.statuses = StatusDraft.restoreStatusListFromString(c.getString(c.getColumnIndexOrThrow(Sqlite.COL_STATUSES)));
|
||||||
e.printStackTrace();
|
} else if (typeOfFetch == type.NOTIFICATIONS) {
|
||||||
|
quickLoad.notifications = Notification.restoreNotificationsFromString(c.getString(c.getColumnIndexOrThrow(Sqlite.COL_STATUSES)));
|
||||||
}
|
}
|
||||||
|
quickLoad.position = c.getInt(c.getColumnIndexOrThrow(Sqlite.COL_POSITION));
|
||||||
|
|
||||||
|
//TimelineHelper.filterStatus(_mContext, quickLoad.statuses, TimelineHelper.FilterTimeLineType.PUBLIC);
|
||||||
|
quickLoad.statuses = SpannableHelper.convertStatus(_mContext, quickLoad.statuses);
|
||||||
|
//Close the cursor
|
||||||
|
c.close();
|
||||||
|
return quickLoad;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -536,33 +583,9 @@ public class QuickLoad {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
enum type {
|
||||||
* Convert a cursor to QuickLoad
|
STATUSES,
|
||||||
*
|
NOTIFICATIONS
|
||||||
* @param c Cursor
|
|
||||||
* @return QuickLoad
|
|
||||||
*/
|
|
||||||
private QuickLoad cursorToQuickLoad(Cursor c) {
|
|
||||||
//No element found
|
|
||||||
if (c.getCount() == 0) {
|
|
||||||
c.close();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
//Take the first element
|
|
||||||
c.moveToFirst();
|
|
||||||
QuickLoad quickLoad = new QuickLoad();
|
|
||||||
quickLoad.id = c.getInt(c.getColumnIndexOrThrow(Sqlite.COL_ID));
|
|
||||||
quickLoad.instance = c.getString(c.getColumnIndexOrThrow(Sqlite.COL_INSTANCE));
|
|
||||||
quickLoad.user_id = c.getString(c.getColumnIndexOrThrow(Sqlite.COL_USER_ID));
|
|
||||||
quickLoad.slug = c.getString(c.getColumnIndexOrThrow(Sqlite.COL_SLUG));
|
|
||||||
quickLoad.statuses = StatusDraft.restoreStatusListFromString(c.getString(c.getColumnIndexOrThrow(Sqlite.COL_STATUSES)));
|
|
||||||
quickLoad.position = c.getInt(c.getColumnIndexOrThrow(Sqlite.COL_POSITION));
|
|
||||||
|
|
||||||
//TimelineHelper.filterStatus(_mContext, quickLoad.statuses, TimelineHelper.FilterTimeLineType.PUBLIC);
|
|
||||||
quickLoad.statuses = SpannableHelper.convertStatus(_mContext, quickLoad.statuses);
|
|
||||||
//Close the cursor
|
|
||||||
c.close();
|
|
||||||
return quickLoad;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,6 @@ import app.fedilab.android.client.entities.api.Notification;
|
||||||
import app.fedilab.android.client.entities.api.Notifications;
|
import app.fedilab.android.client.entities.api.Notifications;
|
||||||
import app.fedilab.android.client.entities.api.Pagination;
|
import app.fedilab.android.client.entities.api.Pagination;
|
||||||
import app.fedilab.android.client.entities.api.Status;
|
import app.fedilab.android.client.entities.api.Status;
|
||||||
import app.fedilab.android.client.entities.api.Statuses;
|
|
||||||
import app.fedilab.android.client.entities.app.QuickLoad;
|
import app.fedilab.android.client.entities.app.QuickLoad;
|
||||||
import app.fedilab.android.databinding.FragmentPaginationBinding;
|
import app.fedilab.android.databinding.FragmentPaginationBinding;
|
||||||
import app.fedilab.android.helper.Helper;
|
import app.fedilab.android.helper.Helper;
|
||||||
|
@ -65,7 +64,6 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
|
||||||
|
|
||||||
private FragmentPaginationBinding binding;
|
private FragmentPaginationBinding binding;
|
||||||
private NotificationsVM notificationsVM;
|
private NotificationsVM notificationsVM;
|
||||||
private FragmentMastodonNotification currentFragment;
|
|
||||||
private boolean flagLoading;
|
private boolean flagLoading;
|
||||||
private static final int NOTIFICATION_PRESENT = -1;
|
private static final int NOTIFICATION_PRESENT = -1;
|
||||||
private static final int NOTIFICATION__AT_THE_BOTTOM = -2;
|
private static final int NOTIFICATION__AT_THE_BOTTOM = -2;
|
||||||
|
@ -91,7 +89,6 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private Notifications notifications;
|
|
||||||
private String max_id, min_id, min_id_fetch_more;
|
private String max_id, min_id, min_id_fetch_more;
|
||||||
private LinearLayoutManager mLayoutManager;
|
private LinearLayoutManager mLayoutManager;
|
||||||
private String instance, user_id;
|
private String instance, user_id;
|
||||||
|
@ -122,7 +119,6 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater,
|
public View onCreateView(@NonNull LayoutInflater inflater,
|
||||||
ViewGroup container, Bundle savedInstanceState) {
|
ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
|
||||||
currentFragment = this;
|
|
||||||
flagLoading = false;
|
flagLoading = false;
|
||||||
instance = MainActivity.currentInstance;
|
instance = MainActivity.currentInstance;
|
||||||
user_id = MainActivity.currentUserID;
|
user_id = MainActivity.currentUserID;
|
||||||
|
@ -232,7 +228,7 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
|
||||||
if (aggregateNotification) {
|
if (aggregateNotification) {
|
||||||
notifications.notifications = aggregateNotifications(notifications.notifications);
|
notifications.notifications = aggregateNotifications(notifications.notifications);
|
||||||
}
|
}
|
||||||
if (notificationAdapter != null && this.notifications != null) {
|
if (notificationAdapter != null && this.notificationList != null) {
|
||||||
int size = this.notificationList.size();
|
int size = this.notificationList.size();
|
||||||
this.notificationList.clear();
|
this.notificationList.clear();
|
||||||
this.notificationList = new ArrayList<>();
|
this.notificationList = new ArrayList<>();
|
||||||
|
@ -240,6 +236,7 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
|
||||||
}
|
}
|
||||||
this.notificationList = notifications.notifications;
|
this.notificationList = notifications.notifications;
|
||||||
notificationAdapter = new NotificationAdapter(this.notificationList);
|
notificationAdapter = new NotificationAdapter(this.notificationList);
|
||||||
|
notificationAdapter.fetchMoreCallBack = this;
|
||||||
mLayoutManager = new LinearLayoutManager(requireActivity());
|
mLayoutManager = new LinearLayoutManager(requireActivity());
|
||||||
binding.recyclerView.setLayoutManager(mLayoutManager);
|
binding.recyclerView.setLayoutManager(mLayoutManager);
|
||||||
binding.recyclerView.setAdapter(notificationAdapter);
|
binding.recyclerView.setAdapter(notificationAdapter);
|
||||||
|
@ -296,12 +293,12 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QuickLoad quickLoad = new QuickLoad(requireActivity()).getSavedValue(MainActivity.currentUserID, MainActivity.currentInstance, notificationType);
|
QuickLoad quickLoad = new QuickLoad(requireActivity()).getSavedValue(MainActivity.currentUserID, MainActivity.currentInstance, notificationType);
|
||||||
if (direction != FragmentMastodonTimeline.DIRECTION.REFRESH && !fetchingMissing && !binding.swipeContainer.isRefreshing() && direction == null && quickLoad != null && quickLoad.statuses != null && quickLoad.statuses.size() > 0) {
|
if (direction != FragmentMastodonTimeline.DIRECTION.REFRESH && !fetchingMissing && !binding.swipeContainer.isRefreshing() && direction == null && quickLoad != null && quickLoad.notifications != null && quickLoad.notifications.size() > 0) {
|
||||||
Statuses statuses = new Statuses();
|
Notifications notifications = new Notifications();
|
||||||
statuses.statuses = quickLoad.statuses;
|
notifications.notifications = quickLoad.notifications;
|
||||||
statuses.pagination = new Pagination();
|
notifications.pagination = new Pagination();
|
||||||
statuses.pagination.max_id = quickLoad.statuses.get(quickLoad.statuses.size() - 1).id;
|
notifications.pagination.max_id = quickLoad.notifications.get(quickLoad.statuses.size() - 1).id;
|
||||||
statuses.pagination.min_id = quickLoad.statuses.get(0).id;
|
notifications.pagination.min_id = quickLoad.notifications.get(0).id;
|
||||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||||
Runnable myRunnable = () -> initializeNotificationView(notifications);
|
Runnable myRunnable = () -> initializeNotificationView(notifications);
|
||||||
mainHandler.post(myRunnable);
|
mainHandler.post(myRunnable);
|
||||||
|
@ -316,17 +313,17 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
|
||||||
.observe(getViewLifecycleOwner(), this::initializeNotificationView);
|
.observe(getViewLifecycleOwner(), this::initializeNotificationView);
|
||||||
} else if (direction == FragmentMastodonTimeline.DIRECTION.BOTTOM) {
|
} else if (direction == FragmentMastodonTimeline.DIRECTION.BOTTOM) {
|
||||||
notificationsVM.getNotifications(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, max_id, null, null, MastodonHelper.statusesPerCall(requireActivity()), excludeType, null)
|
notificationsVM.getNotifications(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, max_id, null, null, MastodonHelper.statusesPerCall(requireActivity()), excludeType, null)
|
||||||
.observe(getViewLifecycleOwner(), this::initializeNotificationView);
|
.observe(getViewLifecycleOwner(), notificationsBottom -> dealWithPagination(notificationsBottom, FragmentMastodonTimeline.DIRECTION.BOTTOM, false));
|
||||||
} else if (direction == FragmentMastodonTimeline.DIRECTION.TOP) {
|
} else if (direction == FragmentMastodonTimeline.DIRECTION.TOP) {
|
||||||
notificationsVM.getNotifications(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, fetchingMissing ? min_id_fetch_more : min_id, MastodonHelper.statusesPerCall(requireActivity()), excludeType, null)
|
notificationsVM.getNotifications(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, fetchingMissing ? min_id_fetch_more : min_id, MastodonHelper.statusesPerCall(requireActivity()), excludeType, null)
|
||||||
.observe(getViewLifecycleOwner(), this::initializeNotificationView);
|
.observe(getViewLifecycleOwner(), notificationsTop -> dealWithPagination(notificationsTop, FragmentMastodonTimeline.DIRECTION.BOTTOM, fetchingMissing));
|
||||||
} else if (direction == FragmentMastodonTimeline.DIRECTION.REFRESH) {
|
} else if (direction == FragmentMastodonTimeline.DIRECTION.REFRESH) {
|
||||||
notificationsVM.getNotifications(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, null, MastodonHelper.statusesPerCall(requireActivity()), excludeType, null)
|
notificationsVM.getNotifications(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, null, MastodonHelper.statusesPerCall(requireActivity()), excludeType, null)
|
||||||
.observe(getViewLifecycleOwner(), notificationsReceived -> {
|
.observe(getViewLifecycleOwner(), notificationsRefresh -> {
|
||||||
if (notificationAdapter != null) {
|
if (notificationAdapter != null) {
|
||||||
dealWithPagination(notificationsReceived);
|
dealWithPagination(notificationsRefresh, FragmentMastodonTimeline.DIRECTION.REFRESH, true);
|
||||||
} else {
|
} else {
|
||||||
initializeNotificationView(notificationsReceived);
|
initializeNotificationView(notificationsRefresh);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -486,31 +483,6 @@ public class FragmentMastodonNotification extends Fragment implements Notificati
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Update view and pagination when scrolling down
|
|
||||||
*
|
|
||||||
* @param fetched_notifications Notifications
|
|
||||||
*/
|
|
||||||
private void dealWithPagination(Notifications fetched_notifications) {
|
|
||||||
binding.loadingNextElements.setVisibility(View.GONE);
|
|
||||||
flagLoading = false;
|
|
||||||
if (currentFragment.notifications != null && fetched_notifications != null && fetched_notifications.notifications != null) {
|
|
||||||
flagLoading = fetched_notifications.pagination.max_id == null;
|
|
||||||
if (aggregateNotification) {
|
|
||||||
fetched_notifications.notifications = aggregateNotifications(fetched_notifications.notifications);
|
|
||||||
}
|
|
||||||
int startId = 0;
|
|
||||||
//There are some statuses present in the timeline
|
|
||||||
if (currentFragment.notificationList.size() > 0) {
|
|
||||||
startId = currentFragment.notificationList.size();
|
|
||||||
}
|
|
||||||
currentFragment.notificationList.addAll(fetched_notifications.notifications);
|
|
||||||
max_id = fetched_notifications.pagination.max_id;
|
|
||||||
notificationAdapter.notifyItemRangeInserted(startId, fetched_notifications.notifications.size());
|
|
||||||
} else {
|
|
||||||
flagLoading = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
|
|
Loading…
Reference in a new issue