implement bookmarks list!!
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
package org.joinmastodon.android.api.requests.accounts;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
|
import org.joinmastodon.android.api.MastodonAPIRequest;
|
||||||
|
import org.joinmastodon.android.model.Status;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import okhttp3.Response;
|
||||||
|
|
||||||
|
public class GetBookmarks extends MastodonAPIRequest<List<Status>>{
|
||||||
|
private String maxId;
|
||||||
|
|
||||||
|
public GetBookmarks(String maxID, String minID, int limit){
|
||||||
|
super(HttpMethod.GET, "/bookmarks", new TypeToken<>(){});
|
||||||
|
if(maxID!=null)
|
||||||
|
addQueryParameter("max_id", maxID);
|
||||||
|
if(minID!=null)
|
||||||
|
addQueryParameter("min_id", minID);
|
||||||
|
if(limit>0)
|
||||||
|
addQueryParameter("limit", ""+limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void validateAndPostprocessResponse(List<Status> respObj, Response httpResponse) throws IOException {
|
||||||
|
super.validateAndPostprocessResponse(respObj, httpResponse);
|
||||||
|
// <https://mastodon.social/api/v1/bookmarks?max_id=268962>; rel="next",
|
||||||
|
// <https://mastodon.social/api/v1/bookmarks?min_id=268981>; rel="prev"
|
||||||
|
String link=httpResponse.header("link");
|
||||||
|
// parsing link header by hand; using a library would be cleaner
|
||||||
|
// (also, the functionality should be part of the max id logics and implemented in MastodonAPIRequest)
|
||||||
|
if(link==null) return;
|
||||||
|
String maxIdEq="max_id=";
|
||||||
|
for(String s : link.split(",")) {
|
||||||
|
if(s.contains("rel=\"next\"")) {
|
||||||
|
int start=s.indexOf(maxIdEq)+maxIdEq.length();
|
||||||
|
int end=s.indexOf('>');
|
||||||
|
if(start<0 || start>end) return;
|
||||||
|
this.maxId=s.substring(start, end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMaxId() {
|
||||||
|
return maxId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package org.joinmastodon.android.fragments;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import org.joinmastodon.android.R;
|
||||||
|
import org.joinmastodon.android.api.requests.accounts.GetBookmarks;
|
||||||
|
import org.joinmastodon.android.api.session.AccountSession;
|
||||||
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
|
import org.joinmastodon.android.model.Account;
|
||||||
|
import org.joinmastodon.android.model.Status;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import me.grishka.appkit.api.SimpleCallback;
|
||||||
|
|
||||||
|
public class BookmarksListFragment extends StatusListFragment{
|
||||||
|
|
||||||
|
private String accountID;
|
||||||
|
private Account self;
|
||||||
|
private String lastMaxId=null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState){
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
accountID=getArguments().getString("account");
|
||||||
|
AccountSession session=AccountSessionManager.getInstance().getAccount(accountID);
|
||||||
|
self=session.self;
|
||||||
|
setTitle(R.string.bookmarks);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onShown(){
|
||||||
|
super.onShown();
|
||||||
|
if(!getArguments().getBoolean("noAutoLoad") && !loaded && !dataLoading)
|
||||||
|
loadData();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doLoadData(int offset, int count) {
|
||||||
|
GetBookmarks b=new GetBookmarks(offset>0 ? lastMaxId : null, null, count);
|
||||||
|
currentRequest=b.setCallback(new SimpleCallback<>(this){
|
||||||
|
@Override
|
||||||
|
public void onSuccess(List<Status> result){
|
||||||
|
onDataLoaded(result, b.getMaxId()!=null);
|
||||||
|
lastMaxId=b.getMaxId();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.exec(accountID);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -516,7 +516,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
|||||||
if(isOwnProfile){
|
if(isOwnProfile){
|
||||||
for(int i=0;i<menu.size();i++){
|
for(int i=0;i<menu.size();i++){
|
||||||
MenuItem item=menu.getItem(i);
|
MenuItem item=menu.getItem(i);
|
||||||
item.setVisible(item.getItemId()==R.id.share);
|
item.setVisible(item.getItemId()==R.id.share || item.getItemId()==R.id.bookmarks);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -536,11 +536,16 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList
|
|||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item){
|
public boolean onOptionsItemSelected(MenuItem item){
|
||||||
int id=item.getItemId();
|
int id=item.getItemId();
|
||||||
if(id==R.id.share){
|
if(id==R.id.share) {
|
||||||
Intent intent=new Intent(Intent.ACTION_SEND);
|
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||||
intent.setType("text/plain");
|
intent.setType("text/plain");
|
||||||
intent.putExtra(Intent.EXTRA_TEXT, account.url);
|
intent.putExtra(Intent.EXTRA_TEXT, account.url);
|
||||||
startActivity(Intent.createChooser(intent, item.getTitle()));
|
startActivity(Intent.createChooser(intent, item.getTitle()));
|
||||||
|
}else if(id==R.id.bookmarks) {
|
||||||
|
Bundle args=new Bundle();
|
||||||
|
args.putString("account", accountID);
|
||||||
|
args.putParcelable("profileAccount", Parcels.wrap(account));
|
||||||
|
Nav.go(getActivity(), BookmarksListFragment.class, args);
|
||||||
}else if(id==R.id.mute){
|
}else if(id==R.id.mute){
|
||||||
confirmToggleMuted();
|
confirmToggleMuted();
|
||||||
}else if(id==R.id.block){
|
}else if(id==R.id.block){
|
||||||
|
|||||||
@@ -7,4 +7,10 @@
|
|||||||
<item android:id="@+id/block_domain" android:title="@string/block_domain"/>
|
<item android:id="@+id/block_domain" android:title="@string/block_domain"/>
|
||||||
<item android:id="@+id/hide_boosts" android:title="@string/hide_boosts_from_user"/>
|
<item android:id="@+id/hide_boosts" android:title="@string/hide_boosts_from_user"/>
|
||||||
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser"/>
|
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/bookmarks"
|
||||||
|
android:showAsAction="always"
|
||||||
|
android:visible="false"
|
||||||
|
android:icon="@drawable/ic_fluent_bookmark_multiple_24_filled"
|
||||||
|
android:title="@string/bookmarks"/>
|
||||||
</menu>
|
</menu>
|
||||||
@@ -279,6 +279,7 @@
|
|||||||
<string name="button_favorite">Favorite</string>
|
<string name="button_favorite">Favorite</string>
|
||||||
<string name="button_share">Share</string>
|
<string name="button_share">Share</string>
|
||||||
<string name="button_bookmark">Bookmark</string>
|
<string name="button_bookmark">Bookmark</string>
|
||||||
|
<string name="bookmarks">Bookmarks</string>
|
||||||
<string name="media_no_description">Media without description</string>
|
<string name="media_no_description">Media without description</string>
|
||||||
<string name="add_media">Add media</string>
|
<string name="add_media">Add media</string>
|
||||||
<string name="add_poll">Add a poll</string>
|
<string name="add_poll">Add a poll</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user