Commit 1c53c2df authored by Hussein's avatar Hussein

Merge branch 'task/P4A-466' into develop

parents 6424fe23 a24e6e81
......@@ -18,16 +18,18 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.fsck.k9.Account;
import com.fsck.k9.K9;
import com.fsck.k9.R;
import com.fsck.k9.activity.compose.RecipientAdapter;
import com.fsck.k9.activity.compose.Recipient;
import com.fsck.k9.pEp.PEpProvider;
import com.fsck.k9.pEp.ui.PEpContactBadge;
import com.fsck.k9.view.RecipientSelectView.Recipient;
import com.fsck.k9.ui.contacts.ContactPictureLoader;
import com.fsck.k9.view.ThemeUtils;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
public class AlternateRecipientAdapter extends BaseAdapter {
private static final int NUMBER_OF_FIXED_LIST_ITEMS = 2;
......@@ -36,19 +38,29 @@ public class AlternateRecipientAdapter extends BaseAdapter {
private final Context context;
private final AlternateRecipientListener listener;
private final Account account;
private final ContactPictureLoader contactPictureLoader;
private AlternateRecipientListener listener;
private Account account;
private List<Recipient> recipients;
private Recipient currentRecipient;
private final PEpProvider pEp;
public AlternateRecipientAdapter(Context context, AlternateRecipientListener listener, Account account) {
@Inject
public AlternateRecipientAdapter(@Named("AppContext") Context context,
@Named("MainUI") PEpProvider pEp,
ContactPictureLoader contactPictureLoader
) {
super();
this.context = context;
this.pEp = pEp;
this.contactPictureLoader = contactPictureLoader;
}
public void setUp(AlternateRecipientListener listener, Account account) {
this.listener = listener;
pEp = ((K9) context.getApplicationContext()).getpEpProvider();
this.account = account;
}
public void setCurrentRecipient(Recipient currentRecipient) {
......@@ -110,7 +122,7 @@ public class AlternateRecipientAdapter extends BaseAdapter {
}
public View newView(ViewGroup parent) {
View view = LayoutInflater.from(context).inflate(R.layout.recipient_alternate_item, parent, false);
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recipient_alternate_item, parent, false);
RecipientTokenHolder holder = new RecipientTokenHolder(view);
view.setTag(holder);
......@@ -128,17 +140,17 @@ public class AlternateRecipientAdapter extends BaseAdapter {
holder.setShowAsHeader(true);
holder.headerName.setText(recipient.getNameOrUnknown(context));
if (!TextUtils.isEmpty(recipient.addressLabel)) {
holder.headerAddressLabel.setText(recipient.addressLabel);
if (!TextUtils.isEmpty(recipient.getAddressLabel())) {
holder.headerAddressLabel.setText(recipient.getAddressLabel());
holder.headerAddressLabel.setVisibility(View.VISIBLE);
} else {
holder.headerAddressLabel.setVisibility(View.GONE);
}
RecipientAdapter.setContactPhotoOrPlaceholder(context, holder.headerPhoto, recipient);
contactPictureLoader.setContactPicture(holder.headerPhoto, recipient.getAddress());
holder.headerPhoto.assignContactUri(recipient.getContactLookupUri());
if (account != null) {
holder.headerPhoto.setPepRating(pEp.getRating(recipient.address), account.ispEpPrivacyProtected());
holder.headerPhoto.setPepRating(pEp.getRating(recipient.getAddress()), account.ispEpPrivacyProtected());
}
holder.headerRemove.setOnClickListener(new OnClickListener() {
......@@ -153,10 +165,10 @@ public class AlternateRecipientAdapter extends BaseAdapter {
RecipientTokenHolder holder = (RecipientTokenHolder) view.getTag();
holder.setShowAsHeader(false);
String address = recipient.address.getAddress();
String address = recipient.getAddress().getAddress();
holder.itemAddress.setText(address);
if (!TextUtils.isEmpty(recipient.addressLabel)) {
holder.itemAddressLabel.setText(recipient.addressLabel);
if (!TextUtils.isEmpty(recipient.getAddressLabel())) {
holder.itemAddressLabel.setText(recipient.getAddressLabel());
holder.itemAddressLabel.setVisibility(View.VISIBLE);
} else {
holder.itemAddressLabel.setVisibility(View.GONE);
......
......@@ -8,8 +8,7 @@ import com.fsck.k9.activity.compose.RecipientMvpView.CryptoSpecialModeDisplayTyp
import com.fsck.k9.activity.compose.RecipientMvpView.CryptoStatusDisplayType;
import com.fsck.k9.activity.compose.RecipientPresenter.CryptoMode;
import org.openintents.openpgp.OpenPgpApiManager.OpenPgpProviderState;
import com.fsck.k9.view.RecipientSelectView.Recipient;
import com.fsck.k9.view.RecipientSelectView.RecipientCryptoStatus;
import com.fsck.k9.activity.compose.RecipientSelectView.RecipientCryptoStatus;
/** This is an immutable object which contains all relevant metadata entered
* during e-mail composition to apply cryptographic operations before sending
......@@ -205,7 +204,7 @@ public class ComposeCryptoStatus {
boolean hasRecipients = !recipients.isEmpty();
for (Recipient recipient : recipients) {
RecipientCryptoStatus cryptoStatus = recipient.getCryptoStatus();
recipientAddresses.add(recipient.address.getAddress());
recipientAddresses.add(recipient.getAddress().getAddress());
if (cryptoStatus.isAvailable()) {
if (cryptoStatus == RecipientCryptoStatus.AVAILABLE_UNTRUSTED) {
allKeysVerified = false;
......
package com.fsck.k9.activity.compose;
import android.content.Context;
import android.net.Uri;
import android.provider.ContactsContract.Contacts;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.fsck.k9.R;
import com.fsck.k9.mail.Address;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class Recipient implements Serializable {
@Nullable // null means the address is not associated with a contact
private final Long contactId;
private final String contactLookupKey;
@NonNull
private Address address;
private String addressLabel;
@NonNull
private RecipientSelectView.RecipientCryptoStatus cryptoStatus;
public Recipient(@NonNull Address address) {
this.address = address;
this.contactId = null;
this.cryptoStatus = RecipientSelectView.RecipientCryptoStatus.UNDEFINED;
this.contactLookupKey = null;
}
public Recipient(String name, String email, String addressLabel, long contactId, String lookupKey) {
this.address = new Address(email, name);
this.contactId = contactId;
this.addressLabel = addressLabel;
this.cryptoStatus = RecipientSelectView.RecipientCryptoStatus.UNDEFINED;
this.contactLookupKey = lookupKey;
}
@NonNull
public Address getAddress() {
return address;
}
public void setAddress(@NonNull Address address) {
this.address = address;
}
public String getAddressLabel() {
return addressLabel;
}
void setAddressLabel(String addressLabel) {
this.addressLabel = addressLabel;
}
String getDisplayNameOrAddress() {
String displayName = getDisplayName();
if (displayName != null) {
return displayName;
}
return address.getAddress();
}
boolean isValidEmailAddress() {
return (address.getAddress() != null);
}
String getDisplayNameOrUnknown(Context context) {
String displayName = getDisplayName();
if (displayName != null) {
return displayName;
}
return context.getString(R.string.unknown_recipient);
}
public String getNameOrUnknown(Context context) {
String name = address.getPersonal();
if (name != null) {
return name;
}
return context.getString(R.string.unknown_recipient);
}
private String getDisplayName() {
if (TextUtils.isEmpty(address.getPersonal())) {
return null;
}
String displayName = address.getPersonal();
if (addressLabel != null) {
displayName += " (" + addressLabel + ")";
}
return displayName;
}
@NonNull
public RecipientSelectView.RecipientCryptoStatus getCryptoStatus() {
return cryptoStatus;
}
public void setCryptoStatus(@NonNull RecipientSelectView.RecipientCryptoStatus cryptoStatus) {
this.cryptoStatus = cryptoStatus;
}
@Nullable
public Uri getContactLookupUri() {
if (contactId == null) {
return null;
}
return Contacts.getLookupUri(contactId, contactLookupKey);
}
@Override
public boolean equals(Object o) {
// Equality is entirely up to the address
return o instanceof Recipient && address.equals(((Recipient) o).address);
}
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
}
}
\ No newline at end of file
......@@ -21,21 +21,27 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.fsck.k9.R;
import com.fsck.k9.helper.ContactPicture;
import com.fsck.k9.view.RecipientSelectView.Recipient;
import com.fsck.k9.view.RecipientSelectView.RecipientCryptoStatus;
import com.fsck.k9.ui.contacts.ContactPictureLoader;
import com.fsck.k9.activity.compose.RecipientSelectView.RecipientCryptoStatus;
import com.fsck.k9.view.ThemeUtils;
import javax.inject.Inject;
import javax.inject.Named;
public class RecipientAdapter extends BaseAdapter implements Filterable {
private final Context context;
private List<Recipient> recipients;
private String highlight;
private ContactPictureLoader contactPictureLoader;
public RecipientAdapter(Context context) {
@Inject
public RecipientAdapter(@Named("AppContext") Context context,
ContactPictureLoader contactPictureLoader) {
super();
this.context = context;
this.contactPictureLoader = contactPictureLoader;
}
public void setRecipients(List<Recipient> recipients) {
......@@ -88,10 +94,10 @@ public class RecipientAdapter extends BaseAdapter implements Filterable {
holder.name.setText(highlightText(recipient.getDisplayNameOrUnknown(context)));
String address = recipient.address.getAddress();
String address = recipient.getAddress().getAddress();
holder.email.setText(highlightText(address));
setContactPhotoOrPlaceholder(context, holder.photo, recipient);
contactPictureLoader.setContactPicture(holder.photo, recipient.getAddress());
Integer cryptoStatusRes = null, cryptoStatusColor = null;
RecipientCryptoStatus cryptoStatus = recipient.getCryptoStatus();
......@@ -124,20 +130,6 @@ public class RecipientAdapter extends BaseAdapter implements Filterable {
}
}
public static void setContactPhotoOrPlaceholder(Context context, ImageView imageView, Recipient recipient) {
// TODO don't use two different mechanisms for loading!
if (recipient.photoThumbnailUri != null) {
// Glide.with(context).load(recipient.photoThumbnailUri)
// // for some reason, this fixes loading issues.
// .placeholder(null)
// .dontAnimate()
// .into(imageView);
imageView.setImageURI(recipient.photoThumbnailUri);
} else {
ContactPicture.getContactPictureLoader(context).loadContactPicture(recipient.address, imageView);
}
}
@Override
public Filter getFilter() {
return new Filter() {
......
......@@ -15,8 +15,7 @@ import androidx.loader.content.AsyncTaskLoader;
import com.fsck.k9.R;
import com.fsck.k9.mail.Address;
import com.fsck.k9.view.RecipientSelectView.Recipient;
import com.fsck.k9.view.RecipientSelectView.RecipientCryptoStatus;
import com.fsck.k9.activity.compose.RecipientSelectView.RecipientCryptoStatus;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -335,9 +334,6 @@ public class RecipientLoader extends AsyncTaskLoader<List<Recipient>> {
Recipient recipient = new Recipient(name, email, addressLabel, contactId, lookupKey);
if (recipient.isValidEmailAddress()) {
Uri photoUri = cursor.isNull(INDEX_PHOTO_URI) ? null : Uri.parse(cursor.getString(INDEX_PHOTO_URI));
recipient.photoThumbnailUri = photoUri;
recipientMap.put(email, recipient);
recipients.add(recipient);
}
......
......@@ -26,8 +26,7 @@ import com.fsck.k9.pEp.PePUIArtefactCache;
import com.fsck.k9.pEp.ui.ActionRecipientSelectView;
import com.fsck.k9.pEp.ui.privacy.status.PEpStatus;
import com.fsck.k9.pEp.ui.tools.FeedbackTools;
import com.fsck.k9.view.RecipientSelectView.Recipient;
import com.fsck.k9.view.RecipientSelectView.TokenListener;
import com.fsck.k9.activity.compose.RecipientSelectView.TokenListener;
import java.util.ArrayList;
import java.util.Arrays;
......
......@@ -11,7 +11,6 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
......@@ -37,7 +36,6 @@ import com.fsck.k9.message.MessageBuilder;
import com.fsck.k9.message.PgpMessageBuilder;
import com.fsck.k9.pEp.PEpProvider;
import com.fsck.k9.pEp.infrastructure.Poller;
import com.fsck.k9.view.RecipientSelectView.Recipient;
import org.openintents.openpgp.OpenPgpApiManager;
import org.openintents.openpgp.OpenPgpApiManager.OpenPgpApiManagerCallback;
......
package com.fsck.k9.activity.compose
import android.R
import android.view.View
import android.widget.TextView
import com.fsck.k9.Account
import com.fsck.k9.activity.compose.RecipientSelectView
import com.fsck.k9.pEp.ui.PEpContactBadge
import com.fsck.k9.ui.contacts.ContactPictureLoader
import foundation.pEp.jniadapter.Rating
class RecipientTokenViewHolder internal constructor(
view: View,
private val contactPictureLoader: ContactPictureLoader,
private val account: Account,
private val cryptoProvider: String?) {
private val name: TextView = view.findViewById(R.id.text1)
private val contactPhoto: PEpContactBadge = view.findViewById(com.fsck.k9.R.id.contact_photo)
private val cryptoStatusRed: View = view.findViewById(com.fsck.k9.R.id.contact_crypto_status_red)
private val cryptoStatusOrange: View = view.findViewById(com.fsck.k9.R.id.contact_crypto_status_orange)
private val cryptoStatusGreen: View = view.findViewById(com.fsck.k9.R.id.contact_crypto_status_green)
private lateinit var recipient: Recipient
fun bind(recipient: Recipient) {
this.recipient = recipient
name.text = recipient.displayNameOrAddress
contactPictureLoader.setContactPicture(contactPhoto, recipient.address)
}
fun updateRating(rating: Rating) {
contactPhoto.setPepRating(rating, account.ispEpPrivacyProtected())
val hasCryptoProvider = cryptoProvider != null
if (!hasCryptoProvider) {
cryptoStatusRed.visibility = View.GONE
cryptoStatusOrange.visibility = View.GONE
cryptoStatusGreen.visibility = View.GONE
} else
when (recipient.cryptoStatus) {
RecipientSelectView.RecipientCryptoStatus.UNAVAILABLE -> {
cryptoStatusRed.visibility = View.VISIBLE
cryptoStatusOrange.visibility = View.GONE
cryptoStatusGreen.visibility = View.GONE
}
RecipientSelectView.RecipientCryptoStatus.AVAILABLE_UNTRUSTED -> {
cryptoStatusRed.visibility = View.GONE
cryptoStatusOrange.visibility = View.VISIBLE
cryptoStatusGreen.visibility = View.GONE
}
RecipientSelectView.RecipientCryptoStatus.AVAILABLE_TRUSTED -> {
cryptoStatusRed.visibility = View.GONE
cryptoStatusOrange.visibility = View.GONE
cryptoStatusGreen.visibility = View.VISIBLE
}
RecipientSelectView.RecipientCryptoStatus.UNDEFINED -> {
cryptoStatusRed.visibility = View.GONE
cryptoStatusOrange.visibility = View.GONE
cryptoStatusGreen.visibility = View.GONE
}
}
}
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import com.fsck.k9.ui.contacts.ContactPictureLoader;
import com.fsck.k9.pEp.ui.fragments.PEpFragment;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
......@@ -51,11 +52,9 @@ import com.fsck.k9.R;
import com.fsck.k9.activity.ActivityListener;
import com.fsck.k9.activity.ChooseFolder;
import com.fsck.k9.activity.FolderInfoHolder;
import com.fsck.k9.activity.K9Activity;
import com.fsck.k9.activity.MessageList;
import com.fsck.k9.activity.MessageReference;
import com.fsck.k9.activity.compose.MessageActions;
import com.fsck.k9.activity.misc.ContactPictureLoader;
import com.fsck.k9.cache.EmailProviderCache;
import com.fsck.k9.controller.MessagingController;
import com.fsck.k9.fragment.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
......@@ -69,7 +68,6 @@ import com.fsck.k9.fragment.MessageListFragmentComparators.ReverseIdComparator;
import com.fsck.k9.fragment.MessageListFragmentComparators.SenderComparator;
import com.fsck.k9.fragment.MessageListFragmentComparators.SubjectComparator;
import com.fsck.k9.fragment.MessageListFragmentComparators.UnreadComparator;
import com.fsck.k9.helper.ContactPicture;
import com.fsck.k9.helper.MergeCursorWithUniqueId;
import com.fsck.k9.helper.MessageHelper;
import com.fsck.k9.helper.Utility;
......@@ -268,7 +266,7 @@ public class MessageListFragment extends PEpFragment implements ConfirmationDial
* make sure we don't access member variables before initialization is complete.
*/
private boolean initialized = false;
ContactPictureLoader contactsPictureLoader;
private LocalBroadcastManager localBroadcastManager;
private BroadcastReceiver cacheBroadcastReceiver;
private IntentFilter cacheIntentFilter;
......@@ -286,6 +284,8 @@ public class MessageListFragment extends PEpFragment implements ConfirmationDial
private SelectedItemActionModeCallback selectedMessageActionModeCallback = new SelectedItemActionModeCallback();
@Inject
ContactPictureLoader contactsPictureLoader;
@Inject
ToolBarCustomizer toolBarCustomizer;
@Inject
ResourcesProvider resourcesProvider;
......@@ -503,9 +503,6 @@ public class MessageListFragment extends PEpFragment implements ConfirmationDial
checkboxes = K9.messageListCheckboxes();
if (K9.showContactPicture()) {
contactsPictureLoader = ContactPicture.getContactPictureLoader(getActivity());
}
restoreInstanceState(savedInstanceState);
decodeArguments();
......
......@@ -231,12 +231,12 @@ public class MessageViewHolder implements View.OnClickListener {
}
private void updateContactBadge(Address counterpartyAddress) {
if (fragment.contactsPictureLoader == null) {
if (!K9.showContactPicture()) {
contactBadge.setVisibility(GONE);
} else if (counterpartyAddress != null) {
Utility.setContactForBadge(contactBadge, counterpartyAddress);
// contactBadge.setPadding(0, 0, 0, 0);
fragment.contactsPictureLoader.loadContactPicture(counterpartyAddress, contactBadge);
fragment.contactsPictureLoader.setContactPicture(contactBadge, counterpartyAddress);
} else {
contactBadge.assignContactUri(null);
contactBadge.setImageResource(R.drawable.ic_contact_picture);
......
package com.fsck.k9.helper;
import android.content.Context;
import android.util.TypedValue;
import androidx.core.content.ContextCompat;
import com.fsck.k9.K9;
import com.fsck.k9.R;
import com.fsck.k9.activity.misc.ContactPictureLoader;
public class ContactPicture {
public static ContactPictureLoader getContactPictureLoader(Context context) {
final int defaultBgColor;
if (!K9.isColorizeMissingContactPictures()) {
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.contactPictureFallbackDefaultBackgroundColor,
outValue, true);
defaultBgColor = outValue.data;
} else {
defaultBgColor = 0;
}
return new ContactPictureLoader(context, defaultBgColor);
}
public static ContactPictureLoader getGrayPictureLoader(Context context) {
return new ContactPictureLoader(context, ContextCompat.getColor(context, R.color.gray));
}
}
package com.fsck.k9.pEp.infrastructure.components;
import android.app.Application;
import android.content.Context;
import com.fsck.k9.activity.AlternateRecipientAdapter;
import com.fsck.k9.activity.K9Activity;
import com.fsck.k9.pEp.infrastructure.modules.ApplicationModule;
import com.fsck.k9.pEp.infrastructure.threading.PostExecutionThread;
import com.fsck.k9.pEp.infrastructure.threading.ThreadExecutor;
import com.fsck.k9.pEp.ui.PepColoredActivity;
import com.fsck.k9.pEp.ui.fragments.AccountSetupBasicsFragment;
import com.fsck.k9.pEp.ui.fragments.AccountSetupIncomingFragment;
import com.fsck.k9.pEp.ui.fragments.PEpFragment;
import com.fsck.k9.view.MessageHeader;
import com.fsck.k9.activity.compose.RecipientSelectView;
import javax.inject.Named;
import javax.inject.Singleton;
......@@ -33,4 +33,11 @@ public interface ApplicationComponent {
@Named("AppContext")
Context getContext();
// TODO: 05/05/2020 check if this belongs here.
void inject(MessageHeader messageHeader);
void inject(RecipientSelectView recipientSelectView);
void inject(AlternateRecipientAdapter alternateRecipientAdapter);
}
......@@ -32,11 +32,13 @@ import com.fsck.k9.pEp.ui.privacy.status.PEpTrustwords;
import com.fsck.k9.ui.messageview.MessageViewFragment;
import dagger.Component;
import security.pEp.ui.intro.IntroFirstFragment;
import security.pEp.ui.intro.IntroFourthFragment;
import security.pEp.ui.permissions.PermissionsActivity;
@PerActivity
@Component(dependencies = ApplicationComponent.class, modules = {
ActivityModule.class, PEpModule.class
ActivityModule.class, PEpModule.class,
})
public interface PEpComponent extends ActivityComponent {
......@@ -95,4 +97,8 @@ public interface PEpComponent extends ActivityComponent {
void inject(ChooseAccountTypeFragment fragment);
void inject(SettingsActivity activity);
void inject(IntroFirstFragment frag);
void inject(IntroFourthFragment frag);
}
\ No newline at end of file
......@@ -5,6 +5,8 @@ import android.app.Application;
import android.content.Context;
import com.fsck.k9.K9;
import com.fsck.k9.Preferences;
import com.fsck.k9.pEp.PEpProvider;
import com.fsck.k9.pEp.infrastructure.threading.JobExecutor;
import com.fsck.k9.pEp.infrastructure.threading.PostExecutionThread;
import com.fsck.k9.pEp.infrastructure.threading.ThreadExecutor;
......@@ -15,6 +17,8 @@ import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import security.pEp.permissions.PermissionChecker;
import security.pEp.ui.permissions.PEpPermissionChecker;
@Module
public class ApplicationModule {
......@@ -32,13 +36,33 @@ public class ApplicationModule {
return application.getApplicationContext();
}
@Provides @Singleton
@Provides
@Singleton
ThreadExecutor provideThreadExecutor(JobExecutor jobExecutor) {
return jobExecutor;
}
@Provides @Singleton
@Provides
@Singleton
PostExecutionThread providePostExecutionThread(UIThread uiThread) {
return uiThread;
}
//FIXME Reorganize modules, to avoid duplicating dependencies! (this are here and on pEpModule
@Provides
public PermissionChecker providepEpPermissionChecker() {
return new PEpPermissionChecker(application.getApplicationContext());
}
@Provides
public Preferences providePreferences() {
return Preferences.getPreferences(application);
}
@Provides
@Named("MainUI")
public PEpProvider providepEpProvider() {
return application.getpEpProvider();
}
}
......@@ -5,7 +5,7 @@ import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import com.fsck.k9.view.RecipientSelectView;
import com.fsck.k9.activity.compose.RecipientSelectView;
import org.jetbrains.annotations.NotNull;
......
......@@ -54,6 +54,8 @@ public class PEpStatus extends PepColoredActivity implements PEpStatusView {
@Inject PEpStatusPresenter presenter;
@Inject PEpStatusRendererBuilder rendererBuilder;
@Bind(R.id.my_recycler_view)
RecyclerView recipientsView;
......@@ -172,8 +174,7 @@ public class PEpStatus extends PepColoredActivity implements PEpStatusView {
recipientsLayoutManager = new LinearLayoutManager(this);
((LinearLayoutManager) recipientsLayoutManager).setOrientation(LinearLayoutManager.VERTICAL);
recipientsView.setLayoutManager(recipientsLayoutManager);
RendererBuilder<PEpIdentity> rendererBuilder =
new PEpStatusRendererBuilder(