diff options
author | lambroslambrou <lambroslambrou@chromium.org> | 2016-02-18 19:28:46 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-19 03:30:10 +0000 |
commit | 6d4979e251516af82a89ab15815fd2adb66b5714 (patch) | |
tree | b5df6f038f99d5d290a61abf6338daa894af7070 /remoting/android | |
parent | 16e9a352bd28981ba7d045f71364bc7e5f6f68b4 (diff) | |
download | chromium_src-6d4979e251516af82a89ab15815fd2adb66b5714.zip chromium_src-6d4979e251516af82a89ab15815fd2adb66b5714.tar.gz chromium_src-6d4979e251516af82a89ab15815fd2adb66b5714.tar.bz2 |
Android Chromoting: Pull out common code for starting new Activities.
Review URL: https://codereview.chromium.org/1673783005
Cr-Commit-Position: refs/heads/master@{#376360}
Diffstat (limited to 'remoting/android')
3 files changed, 31 insertions, 18 deletions
diff --git a/remoting/android/java/src/org/chromium/chromoting/Chromoting.java b/remoting/android/java/src/org/chromium/chromoting/Chromoting.java index f53926c..11aa445 100644 --- a/remoting/android/java/src/org/chromium/chromoting/Chromoting.java +++ b/remoting/android/java/src/org/chromium/chromoting/Chromoting.java @@ -133,9 +133,7 @@ public class Chromoting extends AppCompatActivity implements ConnectionListener, Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT); intent.putExtra(Settings.EXTRA_ACCOUNT_TYPES, new String[] { ACCOUNT_TYPE }); - if (intent.resolveActivity(getPackageManager()) != null) { - startActivity(intent); - } + ChromotingUtil.startActivitySafely(Chromoting.this, intent); finish(); } }); diff --git a/remoting/android/java/src/org/chromium/chromoting/ChromotingUtil.java b/remoting/android/java/src/org/chromium/chromoting/ChromotingUtil.java index 0f26ea7..3d2bb49 100644 --- a/remoting/android/java/src/org/chromium/chromoting/ChromotingUtil.java +++ b/remoting/android/java/src/org/chromium/chromoting/ChromotingUtil.java @@ -4,15 +4,19 @@ package org.chromium.chromoting; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.res.Resources; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.util.TypedValue; import android.view.Menu; import android.view.MenuItem; import org.chromium.base.ApiCompatibilityUtils; +import org.chromium.base.Log; /** Utility methods for chromoting code. */ public abstract class ChromotingUtil { @@ -68,4 +72,25 @@ public abstract class ChromotingUtil { throw new Resources.NotFoundException("Attribute not a color."); } } + + /** + * Starts a new Activity only if the system can resolve the given Intent. Useful for implicit + * intents where the system might not have an application that can handle it. + * @param context The parent context. + * @param intent The (implicit) intent to launch. + * @return True if the intent was resolved. + */ + public static boolean startActivitySafely(Context context, Intent intent) { + if (intent.resolveActivity(context.getPackageManager()) == null) { + Log.w(TAG, "Unable to resolve activity for: %s", intent); + return false; + } + context.startActivity(intent); + return true; + } + + /** Launches an external web browser or application. */ + public static boolean openUrl(Activity parentActivity, Uri uri) { + return startActivitySafely(parentActivity, new Intent(Intent.ACTION_VIEW, uri)); + } } diff --git a/remoting/android/java/src/org/chromium/chromoting/help/HelpActivity.java b/remoting/android/java/src/org/chromium/chromoting/help/HelpActivity.java index 7c79f97..73d9875 100644 --- a/remoting/android/java/src/org/chromium/chromoting/help/HelpActivity.java +++ b/remoting/android/java/src/org/chromium/chromoting/help/HelpActivity.java @@ -27,6 +27,7 @@ import android.webkit.WebView; import android.webkit.WebViewClient; import org.chromium.base.Log; +import org.chromium.chromoting.ChromotingUtil; import org.chromium.chromoting.R; import org.chromium.ui.UiUtils; @@ -62,18 +63,6 @@ public class HelpActivity extends AppCompatActivity { /** Constant used to send the feedback parcel to the system feedback service. */ private static final int SEND_FEEDBACK_INFO = Binder.FIRST_CALL_TRANSACTION; - /** Launches an external web browser or application. */ - private void openUrl(String url) { - Uri uri = Uri.parse(url); - Intent intent = new Intent(Intent.ACTION_VIEW, uri); - - // Verify that the device can launch an application for this intent, otherwise - // startActivity() may crash the application. - if (intent.resolveActivity(getPackageManager()) != null) { - startActivity(intent); - } - } - private void sendFeedback() { Intent intent = new Intent(Intent.ACTION_BUG_REPORT); intent.setComponent(new ComponentName(FEEDBACK_PACKAGE, FEEDBACK_CLASS)); @@ -148,13 +137,14 @@ public class HelpActivity extends AppCompatActivity { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // Make sure any links to other websites open up in an external browser. - String host = Uri.parse(url).getHost(); + Uri uri = Uri.parse(url); + String host = uri.getHost(); // Note that |host| might be null, so allow for this in the test for equality. if (initialHost.equals(host)) { return false; } - openUrl(url); + ChromotingUtil.openUrl(HelpActivity.this, uri); return true; } }); @@ -179,7 +169,7 @@ public class HelpActivity extends AppCompatActivity { return true; } if (id == R.id.actionbar_play_store) { - openUrl(PLAY_STORE_URL + getPackageName()); + ChromotingUtil.openUrl(this, Uri.parse(PLAY_STORE_URL + getPackageName())); return true; } if (id == R.id.actionbar_credits) { |