Added code to display the pinned toots in the ShowAccountActivity. The counter works, even though the thumb tacks don't quite, due to my code in DisplayStatusFragment not being quite right.

This commit is contained in:
PhotonQyv 2017-09-14 21:29:49 +01:00
parent 9c77466915
commit 9626ec9977
4 changed files with 61 additions and 5 deletions

View File

@ -78,6 +78,7 @@ import fr.gouv.etalab.mastodon.asynctasks.RetrieveAccountsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveRelationshipAsyncTask; import fr.gouv.etalab.mastodon.asynctasks.RetrieveRelationshipAsyncTask;
import fr.gouv.etalab.mastodon.client.API; import fr.gouv.etalab.mastodon.client.API;
import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.Account; import fr.gouv.etalab.mastodon.client.Entities.Account;
import fr.gouv.etalab.mastodon.client.Entities.Error; import fr.gouv.etalab.mastodon.client.Entities.Error;
import fr.gouv.etalab.mastodon.client.Entities.Status; import fr.gouv.etalab.mastodon.client.Entities.Status;
@ -89,6 +90,7 @@ import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface; import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveAccountInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveAccountInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsAccountInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsAccountInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRelationshipInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRelationshipInterface;
import fr.gouv.etalab.mastodon.sqlite.AccountDAO; import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite; import fr.gouv.etalab.mastodon.sqlite.Sqlite;
@ -103,7 +105,7 @@ import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
* Show account activity class * Show account activity class
*/ */
public class ShowAccountActivity extends AppCompatActivity implements OnPostActionInterface, OnRetrieveAccountInterface, OnRetrieveFeedsAccountInterface, OnRetrieveRelationshipInterface { public class ShowAccountActivity extends AppCompatActivity implements OnPostActionInterface, OnRetrieveAccountInterface, OnRetrieveFeedsAccountInterface, OnRetrieveRelationshipInterface, OnRetrieveFeedsInterface {
private ImageLoader imageLoader; private ImageLoader imageLoader;
@ -112,7 +114,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
private StatusListAdapter statusListAdapter; private StatusListAdapter statusListAdapter;
private FloatingActionButton account_follow; private FloatingActionButton account_follow;
private static final int NUM_PAGES = 3; private static final int NUM_PAGES = 4;
private ViewPager mPager; private ViewPager mPager;
private String accountId; private String accountId;
private TabLayout tabLayout; private TabLayout tabLayout;
@ -126,6 +128,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
private boolean isHiddingShowing = false; private boolean isHiddingShowing = false;
private LinearLayout main_header_container; private LinearLayout main_header_container;
private ImageView header_edit_profile; private ImageView header_edit_profile;
private List<Status> pins;
public enum action{ public enum action{
FOLLOW, FOLLOW,
@ -149,6 +152,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
setContentView(R.layout.activity_show_account); setContentView(R.layout.activity_show_account);
setTitle(""); setTitle("");
instanceValue += 1; instanceValue += 1;
pins = new ArrayList<>();
Bundle b = getIntent().getExtras(); Bundle b = getIntent().getExtras();
account_follow = (FloatingActionButton) findViewById(R.id.account_follow); account_follow = (FloatingActionButton) findViewById(R.id.account_follow);
account_follow_request = (TextView) findViewById(R.id.account_follow_request); account_follow_request = (TextView) findViewById(R.id.account_follow_request);
@ -160,6 +164,10 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
new RetrieveRelationshipAsyncTask(getApplicationContext(), accountId,ShowAccountActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); new RetrieveRelationshipAsyncTask(getApplicationContext(), accountId,ShowAccountActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new RetrieveAccountAsyncTask(getApplicationContext(),accountId, ShowAccountActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); new RetrieveAccountAsyncTask(getApplicationContext(),accountId, ShowAccountActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
// Get the pins, as early as we can
new RetrieveFeedsAsyncTask(getApplicationContext(), RetrieveFeedsAsyncTask.Type.PINS, userId, null, false,
ShowAccountActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else{ }else{
Toast.makeText(this,R.string.toast_error_loading_account,Toast.LENGTH_LONG).show(); Toast.makeText(this,R.string.toast_error_loading_account,Toast.LENGTH_LONG).show();
} }
@ -192,6 +200,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.toots))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.toots)));
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.following))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.following)));
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.followers))); tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.followers)));
tabLayout.addTab(tabLayout.newTab().setText(R.string.pinned_toots));
mPager = (ViewPager) findViewById(R.id.account_viewpager); mPager = (ViewPager) findViewById(R.id.account_viewpager);
PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager()); PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
@ -242,6 +251,11 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
if (displayAccountsFragment != null) if (displayAccountsFragment != null)
displayAccountsFragment.scrollToTop(); displayAccountsFragment.scrollToTop();
break; break;
case 3:
displayStatusFragment = ((DisplayStatusFragment) fragment);
if( displayStatusFragment != null )
displayStatusFragment.scrollToTop();
break;
} }
} }
}); });
@ -481,7 +495,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
SpannableString spannableString = Helper.clickableElementsDescription(ShowAccountActivity.this, account.getNote()); SpannableString spannableString = Helper.clickableElementsDescription(ShowAccountActivity.this, account.getNote());
account_note.setText(spannableString, TextView.BufferType.SPANNABLE); account_note.setText(spannableString, TextView.BufferType.SPANNABLE);
account_note.setMovementMethod(LinkMovementMethod.getInstance()); account_note.setMovementMethod(LinkMovementMethod.getInstance());
if (tabLayout.getTabAt(0) != null && tabLayout.getTabAt(1) != null && tabLayout.getTabAt(2) != null) { if (tabLayout.getTabAt(0) != null && tabLayout.getTabAt(1) != null && tabLayout.getTabAt(2) != null && tabLayout.getTabAt(3) != null) {
//noinspection ConstantConditions //noinspection ConstantConditions
tabLayout.getTabAt(0).setText(getString(R.string.status_cnt, account.getStatuses_count())); tabLayout.getTabAt(0).setText(getString(R.string.status_cnt, account.getStatuses_count()));
//noinspection ConstantConditions //noinspection ConstantConditions
@ -489,6 +503,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
//noinspection ConstantConditions //noinspection ConstantConditions
tabLayout.getTabAt(2).setText(getString(R.string.followers_cnt, account.getFollowers_count())); tabLayout.getTabAt(2).setText(getString(R.string.followers_cnt, account.getFollowers_count()));
} }
imageLoader.displayImage(account.getAvatar(), account_pp, options); imageLoader.displayImage(account.getAvatar(), account_pp, options);
} }
} }
@ -503,6 +518,30 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
} }
} }
@Override
public void onRetrieveFeeds(APIResponse apiResponse, boolean refreshData) {
if( apiResponse.getError() != null){
final SharedPreferences sharedpreferences = getApplicationContext().getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
boolean show_error_messages = sharedpreferences.getBoolean(Helper.SET_SHOW_ERROR_MESSAGES, true);
if( show_error_messages)
Toast.makeText(getApplicationContext(), apiResponse.getError().getError(),Toast.LENGTH_LONG).show();
return;
}
pins = apiResponse.getStatuses();
if (pins != null)
{
for (Status pin : pins)
{
this.statuses.add(pin);
}
tabLayout.getTabAt(3).setText(getString(R.string.pins_cnt, pins.size()));
statusListAdapter.notifyDataSetChanged();
}
}
@Override @Override
public void onRetrieveRelationship(Relationship relationship, Error error) { public void onRetrieveRelationship(Relationship relationship, Error error) {
@ -557,7 +596,7 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
} }
/** /**
* Pager adapter for the 3 fragments * Pager adapter for the 4 fragments
*/ */
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
ScreenSlidePagerAdapter(FragmentManager fm) { ScreenSlidePagerAdapter(FragmentManager fm) {
@ -593,6 +632,15 @@ public class ShowAccountActivity extends AppCompatActivity implements OnPostActi
bundle.putString("hideHeaderValue",String.valueOf(instanceValue)); bundle.putString("hideHeaderValue",String.valueOf(instanceValue));
displayAccountsFragment.setArguments(bundle); displayAccountsFragment.setArguments(bundle);
return displayAccountsFragment; return displayAccountsFragment;
case 3:
displayStatusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PINS);
bundle.putString("targetedId", userId);
bundle.putBoolean("hideHeader",true);
bundle.putBoolean("showMediaOnly",showMediaOnly);
bundle.putString("hideHeaderValue",String.valueOf(instanceValue));
displayStatusFragment.setArguments(bundle);
return displayStatusFragment;
} }
return null; return null;
} }

View File

@ -240,7 +240,7 @@ public class StatusListAdapter extends BaseAdapter implements OnPostActionInterf
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null); String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
// Get the pins, as early as we can // Get the pins, as early as we can
new RetrieveFeedsAsyncTask(context, RetrieveFeedsAsyncTask.Type.PINS, userId,null, false, new RetrieveFeedsAsyncTask(context, RetrieveFeedsAsyncTask.Type.PINS, userId, null, false,
StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
//Display a preview for accounts that have replied *if enabled and only for home timeline* //Display a preview for accounts that have replied *if enabled and only for home timeline*

View File

@ -165,6 +165,8 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, showMediaOnly, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, showMediaOnly, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else if( type == RetrieveFeedsAsyncTask.Type.TAG) else if( type == RetrieveFeedsAsyncTask.Type.TAG)
asyncTask = new RetrieveFeedsAsyncTask(context, type, tag, targetedId, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, tag, targetedId, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else if ( type == RetrieveFeedsAsyncTask.Type.PINS)
asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, false, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else else
asyncTask = new RetrieveFeedsAsyncTask(context, type, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
@ -190,6 +192,8 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, showMediaOnly, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, showMediaOnly, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else if( type == RetrieveFeedsAsyncTask.Type.TAG) else if( type == RetrieveFeedsAsyncTask.Type.TAG)
asyncTask = new RetrieveFeedsAsyncTask(context, type, tag, targetedId, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, tag, targetedId, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else if ( type == RetrieveFeedsAsyncTask.Type.PINS)
asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, false, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else else
asyncTask = new RetrieveFeedsAsyncTask(context, type, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} }
@ -202,6 +206,8 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, showMediaOnly, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, showMediaOnly, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else if( type == RetrieveFeedsAsyncTask.Type.TAG) else if( type == RetrieveFeedsAsyncTask.Type.TAG)
asyncTask = new RetrieveFeedsAsyncTask(context, type, tag, targetedId, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, tag, targetedId, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else if ( type == RetrieveFeedsAsyncTask.Type.PINS)
asyncTask = new RetrieveFeedsAsyncTask(context, type, targetedId, max_id, false, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else else
asyncTask = new RetrieveFeedsAsyncTask(context, type, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); asyncTask = new RetrieveFeedsAsyncTask(context, type, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else { }else {

View File

@ -214,6 +214,7 @@
<string name="status_cnt">Toots \n %d</string> <string name="status_cnt">Toots \n %d</string>
<string name="following_cnt">Following \n %d</string> <string name="following_cnt">Following \n %d</string>
<string name="followers_cnt">Followers \n %d</string> <string name="followers_cnt">Followers \n %d</string>
<string name="pins_cnt">Pinned \n %d</string>
<string name="authorize">Authorize</string> <string name="authorize">Authorize</string>
<string name="reject">Reject</string> <string name="reject">Reject</string>
@ -248,6 +249,7 @@
<!-- HEADER --> <!-- HEADER -->
<string name="following">Following</string> <string name="following">Following</string>
<string name="followers">Followers</string> <string name="followers">Followers</string>
<string name="pinned_toots">Pinned</string>
<!-- TOAST --> <!-- TOAST -->
<string name="client_error">Unable to get client id!</string> <string name="client_error">Unable to get client id!</string>
<string name="no_internet">No Internet connection!</string> <string name="no_internet">No Internet connection!</string>