15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.chrome.browser;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.accounts.Account;
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.accounts.AccountManager;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Context;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Intent;
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.net.Uri;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.text.Html;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.text.TextUtils;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.util.Patterns;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.CalledByNative;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import java.io.File;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.HashSet;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.Set;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.regex.Pattern;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Helper for issuing intents to the android framework.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public abstract class IntentHelper {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private IntentHelper() {}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Triggers a send email intent.  If no application has registered to receive these intents,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * this will fail silently.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     *
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param context The context for issuing the intent.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param email The email address to send to.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param subject The subject of the email.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param body The body of the email.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @param chooserTitle The title of the activity chooser.
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @param fileToAttach The file name of the attachment.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @CalledByNative
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    static void sendEmail(Context context, String email, String subject, String body,
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            String chooserTitle, String fileToAttach) {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Set<String> possibleEmails = new HashSet<String>();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (!TextUtils.isEmpty(email)) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            possibleEmails.add(email);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } else {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            Pattern emailPattern = Patterns.EMAIL_ADDRESS;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            Account[] accounts = AccountManager.get(context).getAccounts();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            for (Account account : accounts) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                if (emailPattern.matcher(account.name).matches()) {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    possibleEmails.add(account.name);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Intent send = new Intent(Intent.ACTION_SEND);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        send.setType("message/rfc822");
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (possibleEmails.size() != 0) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            send.putExtra(Intent.EXTRA_EMAIL,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    possibleEmails.toArray(new String[possibleEmails.size()]));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        send.putExtra(Intent.EXTRA_SUBJECT, subject);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        send.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(body));
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (!TextUtils.isEmpty(fileToAttach)) {
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            File fileIn = new File(fileToAttach);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            send.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(fileIn));
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        try {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            Intent chooser = Intent.createChooser(send, chooserTitle);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            // we start this activity outside the main activity.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            context.startActivity(chooser);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } catch (android.content.ActivityNotFoundException ex) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            // If no app handles it, do nothing.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
81