Improve media profile

This commit is contained in:
stom79 2019-01-22 18:07:06 +01:00
parent 17e1b02433
commit a588fb01de
2 changed files with 48 additions and 22 deletions

View File

@ -32,7 +32,9 @@ import java.util.List;
import fr.gouv.etalab.mastodon.R; import fr.gouv.etalab.mastodon.R;
import fr.gouv.etalab.mastodon.activities.MediaActivity; import fr.gouv.etalab.mastodon.activities.MediaActivity;
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity; import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
import fr.gouv.etalab.mastodon.activities.ShowConversationActivity;
import fr.gouv.etalab.mastodon.client.Entities.Attachment; import fr.gouv.etalab.mastodon.client.Entities.Attachment;
import fr.gouv.etalab.mastodon.client.Entities.Status;
/** /**
@ -42,21 +44,21 @@ import fr.gouv.etalab.mastodon.client.Entities.Attachment;
public class ImageAdapter extends RecyclerView.Adapter { public class ImageAdapter extends RecyclerView.Adapter {
private Context context; private Context context;
private List<Attachment> attachments; private List<Status> statuses;
private LayoutInflater layoutInflater; private LayoutInflater layoutInflater;
public ImageAdapter(Context context, List<Attachment> attachments) { public ImageAdapter(Context context, List<Status> statuses) {
this.context = context; this.context = context;
this.attachments = attachments; this.statuses = statuses;
this.layoutInflater = LayoutInflater.from(this.context); this.layoutInflater = LayoutInflater.from(this.context);
} }
public int getCount() { public int getCount() {
return attachments.size(); return statuses.size();
} }
public Attachment getItem(int position) { public Status getItem(int position) {
return attachments.get(position); return statuses.get(position);
} }
@NonNull @NonNull
@ -67,26 +69,38 @@ public class ImageAdapter extends RecyclerView.Adapter {
@Override @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
Attachment attachment = attachments.get(position); Status status = statuses.get(position);
final ImageAdapter.ViewHolder holder = (ImageAdapter.ViewHolder) viewHolder; final ImageAdapter.ViewHolder holder = (ImageAdapter.ViewHolder) viewHolder;
if( !((ShowAccountActivity)context).isFinishing()) if( !((ShowAccountActivity)context).isFinishing())
Glide.with(context).load(attachment.getPreview_url()).into(holder.imageView); Glide.with(context).load(status.getArt_attachment().getPreview_url()).into(holder.imageView);
holder.imageView.setOnClickListener(new View.OnClickListener() { holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Intent intent = new Intent(context, MediaActivity.class); Intent intent = new Intent(context, MediaActivity.class);
Bundle b = new Bundle(); Bundle b = new Bundle();
ArrayList<Attachment> attachmentsTmp = new ArrayList<>(); ArrayList<Attachment> attachmentsTmp = new ArrayList<>();
attachmentsTmp.add(attachments.get(position)); for(Status status1: statuses){
attachmentsTmp.add(status1.getArt_attachment());
}
intent.putParcelableArrayListExtra("mediaArray", attachmentsTmp); intent.putParcelableArrayListExtra("mediaArray", attachmentsTmp);
b.putInt("position", 1); b.putInt("position", 1);
intent.putExtras(b); intent.putExtras(b);
context.startActivity(intent); context.startActivity(intent);
} }
}); });
holder.imageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Intent intent = new Intent(context, ShowConversationActivity.class);
Bundle b = new Bundle();
b.putParcelable("status", status);
intent.putExtras(b);
context.startActivity(intent);
return false;
}
});
} }
public long getItemId(int position) { public long getItemId(int position) {
@ -95,7 +109,7 @@ public class ImageAdapter extends RecyclerView.Adapter {
@Override @Override
public int getItemCount() { public int getItemCount() {
return attachments.size(); return statuses.size();
} }

View File

@ -62,7 +62,7 @@ public class DisplayMediaFragment extends Fragment implements OnRetrieveFeedsInt
private boolean showMediaOnly, showPinned, showReply; private boolean showMediaOnly, showPinned, showReply;
boolean firstTootsLoaded; boolean firstTootsLoaded;
private SharedPreferences sharedpreferences; private SharedPreferences sharedpreferences;
private ArrayList<Attachment> attachments; private ArrayList<Status> statuses;
private ImageAdapter gridAdaper; private ImageAdapter gridAdaper;
public DisplayMediaFragment(){ public DisplayMediaFragment(){
@ -93,8 +93,8 @@ public class DisplayMediaFragment extends Fragment implements OnRetrieveFeedsInt
targetedId = bundle.getString("targetedid", null); targetedId = bundle.getString("targetedid", null);
} }
attachments = new ArrayList<>(); statuses = new ArrayList<>();
gridAdaper = new ImageAdapter(context, attachments); gridAdaper = new ImageAdapter(context, statuses);
RecyclerView gridview = rootView.findViewById(R.id.gridview_media); RecyclerView gridview = rootView.findViewById(R.id.gridview_media);
gridview.setAdapter(gridAdaper); gridview.setAdapter(gridAdaper);
@ -180,22 +180,34 @@ public class DisplayMediaFragment extends Fragment implements OnRetrieveFeedsInt
} }
List<Status> statuses = apiResponse.getStatuses(); List<Status> statuses = apiResponse.getStatuses();
max_id = apiResponse.getMax_id(); max_id = apiResponse.getMax_id();
if( attachments == null) if( this.statuses == null)
attachments = new ArrayList<>(); this.statuses = new ArrayList<>();
int previousPosition = this.attachments.size(); int previousPosition = this.statuses.size();
flag_loading = (max_id == null ); flag_loading = (max_id == null );
if( firstLoad && (statuses == null || statuses.size() == 0)) if( firstLoad && (statuses == null || statuses.size() == 0))
textviewNoAction.setVisibility(View.VISIBLE); textviewNoAction.setVisibility(View.VISIBLE);
else else
textviewNoAction.setVisibility(View.GONE); textviewNoAction.setVisibility(View.GONE);
if( statuses != null && statuses.size() > 0) {
for(Status status: statuses){ List<Status> convertedStatuses = new ArrayList<>();
if( status.getMedia_attachments() != null && status.getMedia_attachments().size() > 0) { if( apiResponse.getStatuses() != null && apiResponse.getStatuses().size() > 0){
attachments.addAll(status.getMedia_attachments()); for( Status status: apiResponse.getStatuses()){
gridAdaper.notifyItemRangeInserted(previousPosition, attachments.size()); if( status.getMedia_attachments() != null ) {
String statusSerialized = Helper.statusToStringStorage(status);
for (Attachment attachment : status.getMedia_attachments()) {
Status newStatus = Helper.restoreStatusFromString(statusSerialized);
if (newStatus == null)
break;
newStatus.setArt_attachment(attachment);
convertedStatuses.add(newStatus);
}
} }
} }
} }
if( convertedStatuses.size() > 0) {
this.statuses.addAll(convertedStatuses);
gridAdaper.notifyItemRangeInserted(previousPosition, this.statuses.size());
}
firstLoad = false; firstLoad = false;
} }