diff options
author | tom79 <tschneider.ac@gmail.com> | 2019-05-25 18:58:31 +0200 |
---|---|---|
committer | tom79 <tschneider.ac@gmail.com> | 2019-05-25 18:58:31 +0200 |
commit | 7d14a0ad8535143db9bcbb4f60fa87c3fd85edd9 (patch) | |
tree | 91cf18bd315ebdf2eab8e221cb4bbeb0e931bdfd /app/src | |
parent | cc2caa3a66b91af312fa1d90bb40f188159112e5 (diff) |
Allow to disable bookmark
Diffstat (limited to 'app/src')
9 files changed, 77 insertions, 28 deletions
diff --git a/app/src/main/java/app/fedilab/android/asynctasks/RetrieveFeedsAfterBookmarkAsyncTask.java b/app/src/main/java/app/fedilab/android/asynctasks/RetrieveFeedsAfterBookmarkAsyncTask.java index 3e5bf8a02..41326ddac 100644 --- a/app/src/main/java/app/fedilab/android/asynctasks/RetrieveFeedsAfterBookmarkAsyncTask.java +++ b/app/src/main/java/app/fedilab/android/asynctasks/RetrieveFeedsAfterBookmarkAsyncTask.java @@ -21,6 +21,7 @@ import java.lang.ref.WeakReference; import app.fedilab.android.client.API; import app.fedilab.android.client.APIResponse; +import app.fedilab.android.helper.Helper; import app.fedilab.android.interfaces.OnRetrieveFeedsAfterBookmarkInterface; diff --git a/app/src/main/java/app/fedilab/android/client/API.java b/app/src/main/java/app/fedilab/android/client/API.java index 74185f3c2..408c787b0 100644 --- a/app/src/main/java/app/fedilab/android/client/API.java +++ b/app/src/main/java/app/fedilab/android/client/API.java @@ -1015,34 +1015,40 @@ public class API { SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open(); statuses = new TimelineCacheDAO(context, db).get(max_id); - if( statuses != null){ - Iterator<Status> i = statuses.iterator(); - List<String> ids = new ArrayList<>(); - while (i.hasNext()) { - Status s = i.next(); - if( ids.contains(s.getId())) { - i.remove(); - new TimelineCacheDAO(context, db).remove(s.getId()); - }else{ - ids.add(s.getId()); + SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); + boolean remember_position_home = sharedpreferences.getBoolean(Helper.SET_REMEMBER_POSITION_HOME, true); + //TODO: remove forced condition + if( remember_position_home ){ + if( statuses != null){ + Iterator<Status> i = statuses.iterator(); + List<String> ids = new ArrayList<>(); + while (i.hasNext()) { + Status s = i.next(); + if( ids.contains(s.getId())) { + i.remove(); + new TimelineCacheDAO(context, db).remove(s.getId()); + }else{ + ids.add(s.getId()); + } } } - } - - if( statuses == null){ - return getHomeTimeline(max_id); - }else{ - if( statuses.size() > 0) { - if( statuses.get(0).getId().matches("\\d+")){ - apiResponse.setSince_id(String.valueOf(Long.parseLong(statuses.get(0).getId())+1)); - apiResponse.setMax_id(String.valueOf(Long.parseLong(statuses.get(statuses.size() - 1).getId())-1)); - }else{ - apiResponse.setSince_id(statuses.get(0).getId()); - apiResponse.setMax_id(statuses.get(statuses.size() - 1).getId()); + if( statuses == null){ + return getHomeTimeline(max_id); + }else{ + if( statuses.size() > 0) { + if( statuses.get(0).getId().matches("\\d+")){ + apiResponse.setSince_id(String.valueOf(Long.parseLong(statuses.get(0).getId())+1)); + apiResponse.setMax_id(String.valueOf(Long.parseLong(statuses.get(statuses.size() - 1).getId())-1)); + }else{ + apiResponse.setSince_id(statuses.get(0).getId()); + apiResponse.setMax_id(statuses.get(statuses.size() - 1).getId()); + } } + apiResponse.setStatuses(statuses); + return apiResponse; } - apiResponse.setStatuses(statuses); - return apiResponse; + }else{ + return getHomeTimeline(max_id); } } diff --git a/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java b/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java index 5013383bc..15819ce9c 100644 --- a/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java +++ b/app/src/main/java/app/fedilab/android/client/PeertubeAPI.java @@ -17,7 +17,6 @@ package app.fedilab.android.client; import android.content.Context; import android.content.SharedPreferences; import android.database.sqlite.SQLiteDatabase; -import android.util.Log; import org.json.JSONArray; import org.json.JSONException; diff --git a/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java b/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java index 98db8395a..68237849c 100644 --- a/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/DisplayStatusFragment.java @@ -540,7 +540,10 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn //Only for the Home timeline if( type == RetrieveFeedsAsyncTask.Type.HOME && !firstTootsLoaded){ - asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + boolean remember_position_home = sharedpreferences.getBoolean(Helper.SET_REMEMBER_POSITION_HOME, true); + if( remember_position_home) { + asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } firstTootsLoaded = true; } //Let's deal with statuses @@ -925,6 +928,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn @Override public void onRetrieveFeedsAfterBookmark(APIResponse apiResponse) { + if( statusListAdapter == null) return; if( apiResponse == null || (apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 404) ){ @@ -937,10 +941,12 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn return; } List<Status> statuses = apiResponse.getStatuses(); + if( statuses == null || statuses.size() == 0 || this.statuses == null ) return; //Find the position of toots between those already present int position = 0; + if( position < this.statuses.size() && statuses.get(0).getCreated_at() != null && this.statuses.get(position).getCreated_at() != null) { while (position < this.statuses.size() && statuses.get(0).getCreated_at().before(this.statuses.get(position).getCreated_at())) { position++; @@ -949,7 +955,9 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn ArrayList<Status> tmpStatuses = new ArrayList<>(); for (Status tmpStatus : statuses) { //Put the toot at its place in the list (id desc) - if( !this.statuses.contains(tmpStatus) ) { //Element not already added + if (this.statuses.size() == 0){ + tmpStatuses.add(tmpStatus); + }else if( tmpStatus.getCreated_at().after(this.statuses.get(0).getCreated_at())) { //Element not already added //Mark status at new ones when their id is greater than the last read toot id if (type == RetrieveFeedsAsyncTask.Type.HOME && lastReadTootDate != null && tmpStatus.getCreated_at().after(lastReadTootDate) ) { tmpStatus.setNew(true); @@ -1025,7 +1033,11 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn if( !pagination) { if (type == RetrieveFeedsAsyncTask.Type.HOME) { if (context instanceof BaseMainActivity) { - asyncTask = new RetrieveFeedsAsyncTask(context, type, initialBookMark, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + boolean remember_position_home = sharedpreferences.getBoolean(Helper.SET_REMEMBER_POSITION_HOME, true); + if(remember_position_home ) + asyncTask = new RetrieveFeedsAsyncTask(context, type, initialBookMark, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + else + asyncTask = new RetrieveFeedsAsyncTask(context, type, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } } else { //Most classical search will be done by this call asyncTask = new RetrieveFeedsAsyncTask(context, type, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); diff --git a/app/src/main/java/app/fedilab/android/fragments/SettingsFragment.java b/app/src/main/java/app/fedilab/android/fragments/SettingsFragment.java index 3277466cc..15701a3ca 100644 --- a/app/src/main/java/app/fedilab/android/fragments/SettingsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/SettingsFragment.java @@ -464,6 +464,19 @@ public class SettingsFragment extends Fragment { } }); + boolean remember_position_home = sharedpreferences.getBoolean(Helper.SET_REMEMBER_POSITION_HOME, true); + final CheckBox set_remember_position = rootView.findViewById(R.id.set_remember_position); + set_remember_position.setChecked(remember_position_home); + + set_remember_position.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SharedPreferences.Editor editor = sharedpreferences.edit(); + editor.putBoolean(Helper.SET_REMEMBER_POSITION_HOME, set_remember_position.isChecked()); + editor.apply(); + } + }); + boolean old_direct_timeline = sharedpreferences.getBoolean(Helper.SET_OLD_DIRECT_TIMELINE, false); final CheckBox set_old_direct_timeline = rootView.findViewById(R.id.set_old_direct_timeline); set_old_direct_timeline.setChecked(old_direct_timeline); diff --git a/app/src/main/java/app/fedilab/android/helper/Helper.java b/app/src/main/java/app/fedilab/android/helper/Helper.java index e333e68a0..0568d54cf 100644 --- a/app/src/main/java/app/fedilab/android/helper/Helper.java +++ b/app/src/main/java/app/fedilab/android/helper/Helper.java @@ -328,6 +328,7 @@ public class Helper { public static final String SET_LONG_PRESS_MEDIA = "set_long_press_media"; public static final String SET_DISPLAY_TIMELINE_IN_LIST = "set_display_timeline_in_list"; public static final String SET_ONION_SCHEME = "set_onion_scheme"; + public static final String SET_REMEMBER_POSITION_HOME = "set_remember_position"; public static final int S_NO = 0; static final int S_512KO = 1; public static final int S_1MO = 2; diff --git a/app/src/main/res/layout-sw600dp/fragment_settings.xml b/app/src/main/res/layout-sw600dp/fragment_settings.xml index 6b5fe4c6b..9eaac67b9 100644 --- a/app/src/main/res/layout-sw600dp/fragment_settings.xml +++ b/app/src/main/res/layout-sw600dp/fragment_settings.xml @@ -99,6 +99,14 @@ </LinearLayout> <CheckBox + android:id="@+id/set_remember_position" + android:layout_width="wrap_content" + android:layout_marginTop="@dimen/settings_checkbox_margin" + android:layout_marginBottom="@dimen/settings_checkbox_margin" + android:text="@string/set_remember_position" + android:layout_height="wrap_content" /> + + <CheckBox android:id="@+id/set_old_direct_timeline" android:layout_width="wrap_content" android:layout_marginTop="@dimen/settings_checkbox_margin" diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index b7d00cf56..140f022f2 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -103,6 +103,14 @@ </LinearLayout> <CheckBox + android:id="@+id/set_remember_position" + android:layout_width="wrap_content" + android:layout_marginTop="@dimen/settings_checkbox_margin" + android:layout_marginBottom="@dimen/settings_checkbox_margin" + android:text="@string/set_remember_position" + android:layout_height="wrap_content" /> + + <CheckBox android:id="@+id/set_old_direct_timeline" android:layout_width="wrap_content" android:layout_marginTop="@dimen/settings_checkbox_margin" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9d2867ed1..ff27585dd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -949,6 +949,7 @@ <string name="display_timeline">Display timelines</string> <string name="set_display_bot_icon">Mark bot accounts in toots</string> <string name="add_tags">Manage tags</string> + <string name="set_remember_position">Remember the position in Home timeline</string> <plurals name="number_of_vote"> <item quantity="one">%d vote</item> |