diff options
author | tedchoc@chromium.org <tedchoc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-24 03:33:56 +0000 |
---|---|---|
committer | tedchoc@chromium.org <tedchoc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-24 03:33:56 +0000 |
commit | fd2594460c467d550522c48b6ec013b498bf683d (patch) | |
tree | bf2e1fcccd2eafcbd477a6999c801a2217135491 | |
parent | 0c1d59230ff24e20b8f0cb715b9196465c38a51d (diff) | |
download | chromium_src-fd2594460c467d550522c48b6ec013b498bf683d.zip chromium_src-fd2594460c467d550522c48b6ec013b498bf683d.tar.gz chromium_src-fd2594460c467d550522c48b6ec013b498bf683d.tar.bz2 |
Remove promo send email from tab android.
Move the functionality into helper that we can use for issuing android
intents.
BUG=136785
TEST=run 'make browser'
Review URL: https://chromiumcodereview.appspot.com/10809061
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148036 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/android/java/src/org/chromium/chrome/browser/IntentHelper.java | 69 | ||||
-rw-r--r-- | chrome/browser/android/intent_helper.cc | 44 | ||||
-rw-r--r-- | chrome/browser/android/intent_helper.h | 26 | ||||
-rw-r--r-- | chrome/browser/android/tab_android.h | 8 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 7 |
5 files changed, 144 insertions, 10 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHelper.java new file mode 100644 index 0000000..89975c6 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHelper.java @@ -0,0 +1,69 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.content.Context; +import android.content.Intent; +import android.text.Html; +import android.text.TextUtils; +import android.util.Patterns; + +import org.chromium.base.CalledByNative; + +import java.util.HashSet; +import java.util.Set; +import java.util.regex.Pattern; + +/** + * Helper for issuing intents to the android framework. + */ +public abstract class IntentHelper { + + private IntentHelper() {} + + /** + * Triggers a send email intent. If no application has registered to receive these intents, + * this will fail silently. + * + * @param context The context for issuing the intent. + * @param email The email address to send to. + * @param subject The subject of the email. + * @param body The body of the email. + * @param chooserTitle The title of the activity chooser. + */ + @CalledByNative + static void sendEmail( + Context context, String email, String subject, String body, String chooserTitle) { + Set<String> possibleEmails = new HashSet<String>(); + + if (!TextUtils.isEmpty(email)) { + possibleEmails.add(email); + } else { + Pattern emailPattern = Patterns.EMAIL_ADDRESS; + Account[] accounts = AccountManager.get(context).getAccounts(); + for (Account account : accounts) { + if (emailPattern.matcher(account.name).matches()) { + possibleEmails.add(account.name); + } + } + } + + Intent send = new Intent(Intent.ACTION_SEND); + send.setType("message/rfc822"); + if (possibleEmails.size() != 0) { + send.putExtra(Intent.EXTRA_EMAIL, + possibleEmails.toArray(new String[possibleEmails.size()])); + } + send.putExtra(Intent.EXTRA_SUBJECT, subject); + send.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(body)); + try { + context.startActivity(Intent.createChooser(send, chooserTitle)); + } catch (android.content.ActivityNotFoundException ex) { + // If no app handles it, do nothing. + } + } +} diff --git a/chrome/browser/android/intent_helper.cc b/chrome/browser/android/intent_helper.cc new file mode 100644 index 0000000..20beab0 --- /dev/null +++ b/chrome/browser/android/intent_helper.cc @@ -0,0 +1,44 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/android/intent_helper.h" + +#include <jni.h> + +#include "base/android/jni_android.h" +#include "base/android/jni_string.h" +#include "base/android/scoped_java_ref.h" +#include "jni/IntentHelper_jni.h" + +using base::android::AttachCurrentThread; +using base::android::ConvertUTF16ToJavaString; + +namespace chrome { +namespace android { + +void SendEmail(const string16& d_email, + const string16& d_subject, + const string16& d_body, + const string16& d_chooser_title) { + JNIEnv* env = AttachCurrentThread(); + ScopedJavaLocalRef<jstring> j_email = ConvertUTF16ToJavaString(env, d_email); + ScopedJavaLocalRef<jstring> j_subject = + ConvertUTF16ToJavaString(env, d_subject); + ScopedJavaLocalRef<jstring> j_body = ConvertUTF16ToJavaString(env, d_body); + ScopedJavaLocalRef<jstring> j_chooser_title = + ConvertUTF16ToJavaString(env, d_chooser_title); + Java_IntentHelper_sendEmail(env, + base::android::GetApplicationContext(), + j_email.obj(), + j_subject.obj(), + j_body.obj(), + j_chooser_title.obj()); +} + +bool RegisterIntentHelper(JNIEnv* env) { + return RegisterNativesImpl(env); +} + +} // namespace android +} // namespace chrome diff --git a/chrome/browser/android/intent_helper.h b/chrome/browser/android/intent_helper.h new file mode 100644 index 0000000..fdcd2e4 --- /dev/null +++ b/chrome/browser/android/intent_helper.h @@ -0,0 +1,26 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ANDROID_INTENT_HELPER_H_ +#define CHROME_BROWSER_ANDROID_INTENT_HELPER_H_ + +#include <jni.h> + +#include "base/string16.h" + +namespace chrome { +namespace android { + +// Triggers a send email intent. +void SendEmail(const string16& data_email, + const string16& data_subject, + const string16& data_body, + const string16& data_chooser_title); + +bool RegisterIntentHelper(JNIEnv* env); + +} // namespace android +} // namespace chrome + +#endif // CHROME_BROWSER_ANDROID_INTENT_HELPER_H_ diff --git a/chrome/browser/android/tab_android.h b/chrome/browser/android/tab_android.h index 403514e..ab8549a 100644 --- a/chrome/browser/android/tab_android.h +++ b/chrome/browser/android/tab_android.h @@ -60,14 +60,6 @@ class TabAndroid { const GURL& url, const string16& title, const SkBitmap& skbitmap, int r_value, int g_value, int b_value) = 0; - // TODO(felipeg,tedchoc): Remove this when possible. - // http://crbug.com/138216 - // Called when the mobile promo action asks to send email. - virtual void PromoSendEmail(const string16& data_email, - const string16& data_subj, - const string16& data_body, - const string16& data_inv) = 0; - protected: virtual ~TabAndroid(); diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index c080cee..b639c3e 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -104,14 +104,16 @@ 'browser/accessibility/accessibility_events.h', 'browser/accessibility/invert_bubble_prefs.cc', 'browser/accessibility/invert_bubble_prefs.h', + 'browser/alternate_nav_url_fetcher.cc', + 'browser/alternate_nav_url_fetcher.h', 'browser/android/chrome_startup_flags.cc', 'browser/android/chrome_startup_flags.h', + 'browser/android/intent_helper.cc', + 'browser/android/intent_helper.h', 'browser/android/process_utils.cc', 'browser/android/process_utils.h', 'browser/android/tab_android.cc', 'browser/android/tab_android.h', - 'browser/alternate_nav_url_fetcher.cc', - 'browser/alternate_nav_url_fetcher.h', 'browser/app_controller_mac.h', 'browser/app_controller_mac.mm', 'browser/app_icon_win.cc', @@ -5471,6 +5473,7 @@ 'target_name': 'chrome_browser_jni_headers', 'type': 'none', 'sources': [ + 'android/java/src/org/chromium/chrome/browser/IntentHelper.java', 'android/java/src/org/chromium/chrome/browser/ProcessUtils.java', ], 'variables': { |