diff options
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.java | 254 |
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); } } + } |