summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowConversationActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowConversationActivity.java')
-rw-r--r--app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowConversationActivity.java254
1 files changed, 100 insertions, 154 deletions
diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowConversationActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowConversationActivity.java
index 21958c9a8..2e55059f3 100644
--- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowConversationActivity.java
+++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/ShowConversationActivity.java
@@ -16,18 +16,14 @@ package fr.gouv.etalab.mastodon.activities;
import android.annotation.SuppressLint;
+import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
-import android.os.Handler;
-import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.ActionBar;
-import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
@@ -36,38 +32,28 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
-import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
-
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.target.SimpleTarget;
-import com.bumptech.glide.request.transition.Transition;
-
import java.util.ArrayList;
import java.util.List;
+import es.dmoral.toasty.Toasty;
import fr.gouv.etalab.mastodon.R;
-import fr.gouv.etalab.mastodon.asynctasks.RetrieveCardAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveContextAsyncTask;
-import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
-import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.Account;
-import fr.gouv.etalab.mastodon.client.Entities.Card;
import fr.gouv.etalab.mastodon.client.Entities.Context;
import fr.gouv.etalab.mastodon.client.Entities.Error;
import fr.gouv.etalab.mastodon.client.Entities.Status;
import fr.gouv.etalab.mastodon.drawers.ConversationDecoration;
import fr.gouv.etalab.mastodon.drawers.StatusListAdapter;
import fr.gouv.etalab.mastodon.helper.Helper;
-import fr.gouv.etalab.mastodon.interfaces.OnRetrieveCardInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveContextInterface;
-import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_BLACK;
+import static fr.gouv.etalab.mastodon.helper.Helper.THEME_LIGHT;
/**
@@ -75,14 +61,13 @@ import static fr.gouv.etalab.mastodon.helper.Helper.THEME_BLACK;
* Show conversation activity class
*/
-public class ShowConversationActivity extends BaseActivity implements OnRetrieveFeedsInterface, OnRetrieveContextInterface, OnRetrieveCardInterface {
+public class ShowConversationActivity extends BaseActivity implements OnRetrieveContextInterface {
- private String statusId;
private Status initialStatus;
+ private Status detailsStatus;
private SwipeRefreshLayout swipeRefreshLayout;
private RecyclerView lv_status;
- private boolean isRefreshed;
private ImageView pp_actionBar;
private List<Status> statuses;
private StatusListAdapter statusListAdapter;
@@ -107,19 +92,22 @@ public class ShowConversationActivity extends BaseActivity implements OnRetrieve
default:
setTheme(R.style.AppThemeDark_NoActionBar);
}
- expanded = false;
setContentView(R.layout.activity_show_conversation);
-
+ lv_status = findViewById(R.id.lv_status);
Toolbar toolbar = findViewById(R.id.toolbar);
if( theme == THEME_BLACK)
toolbar.setBackgroundColor(ContextCompat.getColor(ShowConversationActivity.this, R.color.black));
setSupportActionBar(toolbar);
Bundle b = getIntent().getExtras();
- if(b != null)
- statusId = b.getString("statusId", null);
- if( statusId == null)
+ statuses = new ArrayList<>();
+ if(b != null) {
+ detailsStatus = b.getParcelable("status");
+ expanded = b.getBoolean("expanded", false);
+ initialStatus = b.getParcelable("initialStatus");
+ }
+ if( detailsStatus == null || detailsStatus.getId() == null)
finish();
if( getSupportActionBar() != null)
@@ -133,10 +121,14 @@ public class ShowConversationActivity extends BaseActivity implements OnRetrieve
TextView title = getSupportActionBar().getCustomView().findViewById(R.id.toolbar_title);
pp_actionBar = getSupportActionBar().getCustomView().findViewById(R.id.pp_actionBar);
ImageView action_refresh = getSupportActionBar().getCustomView().findViewById(R.id.action_refresh);
- final ImageView action_expand = getSupportActionBar().getCustomView().findViewById(R.id.action_expand);
+ ImageView action_expand = getSupportActionBar().getCustomView().findViewById(R.id.action_expand);
title.setText(R.string.conversation);
ImageView close_conversation = getSupportActionBar().getCustomView().findViewById(R.id.close_conversation);
+ if( expanded)
+ action_expand.setImageResource(R.drawable.ic_expand_less);
+ else
+ action_expand.setImageResource(R.drawable.ic_expand_more);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
@@ -156,32 +148,36 @@ public class ShowConversationActivity extends BaseActivity implements OnRetrieve
action_refresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- if( statuses != null) {
- swipeRefreshLayout.setRefreshing(true);
- (new Handler()).postDelayed(new Runnable() {
- @Override
- public void run() {
- isRefreshed = true;
- statusId = statuses.get(statuses.size() - 1).getId();
- new RetrieveFeedsAsyncTask(getApplicationContext(), RetrieveFeedsAsyncTask.Type.ONESTATUS, statusId, null, false, false, ShowConversationActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
- }, 1000);
- }
+ Intent intent = new Intent(ShowConversationActivity.this, ShowConversationActivity.class);
+ Bundle b = new Bundle();
+ b.putParcelable("status", detailsStatus);
+ b.putBoolean("expanded", expanded);
+ if( expanded && statuses != null && statuses.size() > 0)
+ b.putParcelable("initialStatus", statuses.get(0));
+ intent.putExtras(b);
+ finish();
+ startActivity(intent);
}
});
action_expand.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
expanded = !expanded;
- if( expanded)
- action_expand.setImageResource(R.drawable.ic_expand_less);
- else
- action_expand.setImageResource(R.drawable.ic_expand_more);
- new RetrieveFeedsAsyncTask(getApplicationContext(), RetrieveFeedsAsyncTask.Type.ONESTATUS, statusId,null, false,false, ShowConversationActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-
+ Intent intent = new Intent(ShowConversationActivity.this, ShowConversationActivity.class);
+ Bundle b = new Bundle();
+ b.putParcelable("status", detailsStatus);
+ b.putBoolean("expanded", expanded);
+ if( expanded && statuses != null && statuses.size() > 0)
+ b.putParcelable("initialStatus", statuses.get(0));
+ intent.putExtras(b);
+ finish();
+ startActivity(intent);
}
});
+ if (theme == THEME_LIGHT){
+ Helper.colorizeToolbar(getSupportActionBar().getCustomView().findViewById(R.id.toolbar), R.color.black, ShowConversationActivity.this);
+ }
}else{
setTitle(R.string.conversation);
}
@@ -190,36 +186,40 @@ public class ShowConversationActivity extends BaseActivity implements OnRetrieve
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
Account account = new AccountDAO(getApplicationContext(),db).getAccountByID(userId);
if( account.getAvatar() == null){
- Toast.makeText(ShowConversationActivity.this,R.string.toast_error, Toast.LENGTH_LONG).show();
+ Toasty.error(ShowConversationActivity.this,getString(R.string.toast_error), Toast.LENGTH_LONG).show();
finish();
}
String url = account.getAvatar();
if( url.startsWith("/") ){
url = Helper.getLiveInstanceWithProtocol(getApplicationContext()) + account.getAvatar();
}
- Glide.with(getApplicationContext())
- .asBitmap()
- .load(url)
- .into(new SimpleTarget<Bitmap>() {
- @Override
- public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
- BitmapDrawable ppDrawable = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(resource, (int) Helper.convertDpToPixel(25, getApplicationContext()), (int) Helper.convertDpToPixel(25, getApplicationContext()), true));
- if( pp_actionBar != null){
- pp_actionBar.setImageDrawable(ppDrawable);
- } else if( getSupportActionBar() != null){
-
- getSupportActionBar().setIcon(ppDrawable);
- getSupportActionBar().setDisplayShowHomeEnabled(true);
- }
- }
- });
-
+ Helper.loadGiF(getApplicationContext(), url, pp_actionBar);
- isRefreshed = false;
swipeRefreshLayout = findViewById(R.id.swipeContainer);
- new RetrieveFeedsAsyncTask(getApplicationContext(), RetrieveFeedsAsyncTask.Type.ONESTATUS, statusId,null, false,false, ShowConversationActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ boolean isOnWifi = Helper.isOnWIFI(getApplicationContext());
+ int behaviorWithAttachments = sharedpreferences.getInt(Helper.SET_ATTACHMENT_ACTION, Helper.ATTACHMENT_ALWAYS);
+ int positionSpinnerTrans = sharedpreferences.getInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX);
+ if( initialStatus != null)
+ statuses.add(initialStatus);
+ else
+ statuses.add(detailsStatus);
+ statusListAdapter = new StatusListAdapter(ShowConversationActivity.this, 0, null, isOnWifi, behaviorWithAttachments, positionSpinnerTrans, statuses);
+ final LinearLayoutManager mLayoutManager;
+ mLayoutManager = new LinearLayoutManager(this);
+ lv_status.setLayoutManager(mLayoutManager);
+ boolean compactMode = sharedpreferences.getBoolean(Helper.SET_COMPACT_MODE, false);
+ lv_status.addItemDecoration(new ConversationDecoration(ShowConversationActivity.this, theme, compactMode));
+ lv_status.setAdapter(statusListAdapter);
+ String statusIdToFetch = null;
+ if( initialStatus != null)
+ statusIdToFetch = initialStatus.getId();
+ else if(detailsStatus != null)
+ statusIdToFetch = detailsStatus.getId();
+ if( statusIdToFetch == null)
+ finish();
+ new RetrieveContextAsyncTask(getApplicationContext(), expanded, statusIdToFetch, ShowConversationActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
switch (theme){
case Helper.THEME_LIGHT:
swipeRefreshLayout.setColorSchemeResources(R.color.mastodonC4,
@@ -243,15 +243,19 @@ public class ShowConversationActivity extends BaseActivity implements OnRetrieve
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
- isRefreshed = true;
- new RetrieveFeedsAsyncTask(getApplicationContext(), RetrieveFeedsAsyncTask.Type.ONESTATUS, statusId,null, false,false, ShowConversationActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+ Intent intent = new Intent(ShowConversationActivity.this, ShowConversationActivity.class);
+ Bundle b = new Bundle();
+ b.putParcelable("status", detailsStatus);
+ b.putBoolean("expanded", expanded);
+ if( expanded && statuses != null && statuses.size() > 0)
+ b.putParcelable("initialStatus", statuses.get(0));
+ b.putParcelable("status", detailsStatus);
+ intent.putExtras(b);
+ finish();
+ startActivity(intent);
}
});
- lv_status = findViewById(R.id.lv_status);
- lv_status.addItemDecoration(new DividerItemDecoration(ShowConversationActivity.this, DividerItemDecoration.VERTICAL));
- final LinearLayoutManager mLayoutManager;
- mLayoutManager = new LinearLayoutManager(this);
- lv_status.setLayoutManager(mLayoutManager);
+
}
@@ -267,102 +271,44 @@ public class ShowConversationActivity extends BaseActivity implements OnRetrieve
}
}
- @Override
- public void onRetrieveFeeds(APIResponse apiResponse) {
- if( apiResponse.getError() != null){
- Toast.makeText(getApplicationContext(), apiResponse.getError().getError(),Toast.LENGTH_LONG).show();
- return;
- }
- List<Status> statuses = apiResponse.getStatuses();
- if( statuses != null && statuses.size() > 0 ){
- initialStatus = statuses.get(0);
- new RetrieveContextAsyncTask(getApplicationContext(), expanded, initialStatus.getId(), ShowConversationActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
- }
- }
@Override
- public void onRetrieveContext(Context context, Status statusFirst, Error error) {
+ public void onRetrieveContext(Context context, Error error) {
swipeRefreshLayout.setRefreshing(false);
- RelativeLayout loader = findViewById(R.id.loader);
- if( error != null){
- Toast.makeText(getApplicationContext(), error.getError(),Toast.LENGTH_LONG).show();
+ if( error != null ){
+ Toasty.error(getApplicationContext(), error.getError(),Toast.LENGTH_LONG).show();
+ return;
+ }
+ if( context.getAncestors() == null ){
return;
}
- boolean isOnWifi = Helper.isOnWIFI(getApplicationContext());
- SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
- int behaviorWithAttachments = sharedpreferences.getInt(Helper.SET_ATTACHMENT_ACTION, Helper.ATTACHMENT_ALWAYS);
- int positionSpinnerTrans = sharedpreferences.getInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX);
- int position = 0;
- boolean positionFound = false;
- statuses = new ArrayList<>();
- if( expanded) {
- if (statusFirst != null)
- statuses.add(0, statusFirst);
- if (context.getAncestors() != null && context.getAncestors().size() > 0) {
- for (Status status : context.getAncestors()) {
- statuses.add(status);
- if (!positionFound)
- position++;
- if (status.getId().equals(initialStatus.getId()))
- positionFound = true;
-
- }
- } else if (statusFirst == null) {
- statuses.add(0, initialStatus);
- positionFound = true;
- }
- if (context.getDescendants() != null && context.getDescendants().size() > 0) {
- for (Status status : context.getDescendants()) {
- statuses.add(status);
- if (!positionFound)
- position++;
- if (status.getId().equals(initialStatus.getId()))
- positionFound = true;
- }
- }
- }else {
- position = 0;
+ statusListAdapter.setConversationPosition( context.getAncestors().size());
+ if(!expanded) {
if (context.getAncestors() != null && context.getAncestors().size() > 0) {
- statuses.addAll(context.getAncestors());
- position = context.getAncestors().size();
+ statuses.addAll(0, context.getAncestors());
+ statusListAdapter.notifyItemRangeInserted(0, context.getAncestors().size());
}
- statuses.add(initialStatus);
if (context.getDescendants() != null && context.getDescendants().size() > 0) {
- statuses.addAll(context.getDescendants());
+ statuses.addAll(context.getAncestors().size() + 1, context.getDescendants());
+ statusListAdapter.notifyItemRangeChanged(context.getAncestors().size()+1, context.getDescendants().size());
}
- }
- if( isRefreshed){
- position = statuses.size()-1;
- lv_status.scrollToPosition(position);
- }else {
- lv_status.smoothScrollToPosition(position);
- }
- statusListAdapter = new StatusListAdapter(ShowConversationActivity.this, position, null, isOnWifi, behaviorWithAttachments, positionSpinnerTrans, statuses);
- // lv_status.addItemDecoration(new ConversationDecoration(ShowConversationActivity.this,position), DividerItemDecoration.VERTICAL);
- lv_status.setAdapter(statusListAdapter);
- statusListAdapter.notifyDataSetChanged();
- loader.setVisibility(View.GONE);
- lv_status.setVisibility(View.VISIBLE);
-
-
- new RetrieveCardAsyncTask(getApplicationContext(), initialStatus.getId(), ShowConversationActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-
- }
-
- @Override
- public void onRetrieveAccount(Card card) {
- int position = 0;
- for(Status status: this.statuses) {
- if( initialStatus.getId().equals(status.getId())) {
- if( card != null) {
- this.statuses.get(position).setCard(card);
- initialStatus.setCard(card);
- statusListAdapter.notifyItemChanged(position);
+ }else{
+ List<Status> statusesTemp = context.getDescendants();
+ int i = 1;
+ int position = 0;
+ for(Status status: statusesTemp){
+ statuses.add(status);
+ if( status.getId().equals(detailsStatus.getId())) {
+ statusListAdapter.setConversationPosition(i);
+ detailsStatus = status;
+ position = i;
}
- return;
+ i++;
}
- position++;
+ statusListAdapter.notifyItemRangeChanged(1,context.getDescendants().size());
+ lv_status.scrollToPosition(position);
}
}
+
}