Search in sources :

Example 1 with ContactsCompletionView

use of i2p.bote.android.widget.ContactsCompletionView in project i2p.i2p-bote by i2p.

the class NewEmailFragment method onViewCreated.

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mSpinner = (Spinner) view.findViewById(R.id.sender_spinner);
    mMore = (ImageView) view.findViewById(R.id.more);
    mTo = (ContactsCompletionView) view.findViewById(R.id.to);
    mCc = (ContactsCompletionView) view.findViewById(R.id.cc);
    mBcc = (ContactsCompletionView) view.findViewById(R.id.bcc);
    mSubject = (EditText) view.findViewById(R.id.subject);
    mContent = (EditText) view.findViewById(R.id.message);
    mAttachments = (LinearLayout) view.findViewById(R.id.attachments);
    String quoteMsgFolder = getArguments().getString(QUOTE_MSG_FOLDER);
    String quoteMsgId = getArguments().getString(QUOTE_MSG_ID);
    QuoteMsgType quoteMsgType = (QuoteMsgType) getArguments().getSerializable(QUOTE_MSG_TYPE);
    boolean hide = I2PBote.getInstance().getConfiguration().getHideLocale();
    List<Person> toRecipients = new ArrayList<Person>();
    List<Person> ccRecipients = new ArrayList<Person>();
    String origSubject = null;
    String origContent = null;
    String origFrom = null;
    try {
        Email origEmail = BoteHelper.getEmail(quoteMsgFolder, quoteMsgId);
        if (origEmail != null) {
            mSenderKey = BoteHelper.extractEmailDestination(BoteHelper.getOneLocalRecipient(origEmail).toString());
            if (quoteMsgType == QuoteMsgType.REPLY) {
                String recipient = BoteHelper.getNameAndDestination(origEmail.getReplyAddress(I2PBote.getInstance().getIdentities()));
                toRecipients.add(extractPerson(recipient));
            } else if (quoteMsgType == QuoteMsgType.REPLY_ALL) {
                // What happens if an email is received by multiple local identities?
                for (Address address : origEmail.getAllAddresses(true)) {
                    Person person = extractPerson(address.toString());
                    if (person != null)
                        toRecipients.add(person);
                }
            }
            origSubject = origEmail.getSubject();
            origContent = origEmail.getText();
            origFrom = BoteHelper.getShortSenderName(origEmail.getOneFromAddress(), 50);
        }
    } catch (PasswordException e) {
        // Should not happen, we cannot get to this page without authenticating
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (GeneralSecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // Set up identities spinner
    IdentityAdapter identities = new IdentityAdapter(getActivity());
    mSpinner.setAdapter(identities);
    mSpinner.setSelection(mDefaultPos);
    // Set up Cc/Bcc button
    mMore.setImageDrawable(new IconicsDrawable(getActivity(), GoogleMaterial.Icon.gmd_unfold_more).colorRes(R.color.md_grey_600).sizeDp(24).paddingDp(3));
    mMore.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            mCc.setVisibility(mMoreVisible ? View.GONE : View.VISIBLE);
            mBcc.setVisibility(mMoreVisible ? View.GONE : View.VISIBLE);
            mMore.setImageDrawable(new IconicsDrawable(getActivity(), mMoreVisible ? GoogleMaterial.Icon.gmd_unfold_more : GoogleMaterial.Icon.gmd_unfold_less).colorRes(R.color.md_grey_600).sizeDp(24).paddingDp(mMoreVisible ? 3 : 4));
            mMoreVisible = !mMoreVisible;
        }
    });
    // Set up contacts auto-complete
    List<Person> contacts = new ArrayList<Person>();
    try {
        for (Contact contact : I2PBote.getInstance().getAddressBook().getAll()) {
            contacts.add(new Person(contact.getName(), contact.getBase64Dest(), BoteHelper.decodePicture(contact.getPictureBase64())));
        }
    } catch (PasswordException e) {
        // TODO handle
        e.printStackTrace();
    }
    mAdapter = new FilteredArrayAdapter<Person>(getActivity(), android.R.layout.simple_list_item_1, contacts) {

        @Override
        protected boolean keepObject(Person obj, String mask) {
            mask = mask.toLowerCase(Locale.US);
            return obj.getName().toLowerCase(Locale.US).startsWith(mask) || obj.getAddress().toLowerCase(Locale.US).startsWith(mask);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v;
            if (convertView == null)
                v = ((LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listitem_contact, parent, false);
            else
                v = convertView;
            setViewContent(v, position);
            return v;
        }

        private void setViewContent(View v, int position) {
            Person person = getItem(position);
            ((TextView) v.findViewById(R.id.contact_name)).setText(person.getName());
            ImageView picView = (ImageView) v.findViewById(R.id.contact_picture);
            Bitmap picture = person.getPicture();
            if (picture == null) {
                ViewGroup.LayoutParams lp = picView.getLayoutParams();
                picture = BoteHelper.getIdenticonForAddress(person.getAddress(), lp.width, lp.height);
            }
            picView.setImageBitmap(picture);
        }
    };
    mTo.setAdapter(mAdapter);
    mCc.setAdapter(mAdapter);
    mBcc.setAdapter(mAdapter);
    for (Person recipient : toRecipients) {
        mTo.addObject(recipient);
    }
    for (Person recipient : ccRecipients) {
        mCc.addObject(recipient);
    }
    if (origSubject != null) {
        String subjectPrefix;
        if (quoteMsgType == QuoteMsgType.FORWARD) {
            subjectPrefix = getResources().getString(hide ? R.string.subject_prefix_fwd_hide : R.string.subject_prefix_fwd);
        } else {
            subjectPrefix = getResources().getString(hide ? R.string.response_prefix_re_hide : R.string.response_prefix_re);
        }
        if (!origSubject.startsWith(subjectPrefix))
            origSubject = subjectPrefix + " " + origSubject;
        mSubject.setText(origSubject);
    }
    if (origContent != null) {
        StringBuilder quotation = new StringBuilder();
        quotation.append("\n\n");
        quotation.append(getResources().getString(hide ? R.string.response_quote_wrote_hide : R.string.response_quote_wrote, origFrom));
        String[] lines = origContent.split("\r?\n|\r");
        for (String line : lines) quotation = quotation.append("\n> ").append(line);
        mContent.setText(quotation);
    }
    if (savedInstanceState == null) {
        mTo.setPrefix(getResources().getString(R.string.email_to) + " ");
        mCc.setPrefix(getResources().getString(R.string.email_cc) + " ");
        mBcc.setPrefix(getResources().getString(R.string.email_bcc) + " ");
    }
    TextWatcher dirtyWatcher = new TextWatcher() {

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            mDirty = true;
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    };
    mSubject.addTextChangedListener(dirtyWatcher);
    mContent.addTextChangedListener(dirtyWatcher);
}
Also used : Email(i2p.bote.email.Email) Address(javax.mail.Address) InternetAddress(javax.mail.internet.InternetAddress) ArrayList(java.util.ArrayList) PasswordException(i2p.bote.fileencryption.PasswordException) Bitmap(android.graphics.Bitmap) TextWatcher(android.text.TextWatcher) Editable(android.text.Editable) ImageView(android.widget.ImageView) IconicsDrawable(com.mikepenz.iconics.IconicsDrawable) MessagingException(javax.mail.MessagingException) ViewGroup(android.view.ViewGroup) GeneralSecurityException(java.security.GeneralSecurityException) IOException(java.io.IOException) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) ContactsCompletionView(i2p.bote.android.widget.ContactsCompletionView) SuppressLint(android.annotation.SuppressLint) Contact(i2p.bote.packet.dht.Contact) Person(i2p.bote.android.util.Person)

Aggregations

SuppressLint (android.annotation.SuppressLint)1 Bitmap (android.graphics.Bitmap)1 Editable (android.text.Editable)1 TextWatcher (android.text.TextWatcher)1 View (android.view.View)1 ViewGroup (android.view.ViewGroup)1 ImageView (android.widget.ImageView)1 TextView (android.widget.TextView)1 IconicsDrawable (com.mikepenz.iconics.IconicsDrawable)1 Person (i2p.bote.android.util.Person)1 ContactsCompletionView (i2p.bote.android.widget.ContactsCompletionView)1 Email (i2p.bote.email.Email)1 PasswordException (i2p.bote.fileencryption.PasswordException)1 Contact (i2p.bote.packet.dht.Contact)1 IOException (java.io.IOException)1 GeneralSecurityException (java.security.GeneralSecurityException)1 ArrayList (java.util.ArrayList)1 Address (javax.mail.Address)1 MessagingException (javax.mail.MessagingException)1 InternetAddress (javax.mail.internet.InternetAddress)1