示例#1
0
  /**
   * @param url
   * @param context
   * @param requireNewTask set this to true if context is not an Activity
   * @param bypassParser
   * @param useExternalBrowser
   */
  public static void launchBrowser(
      Context context,
      String url,
      String threadUrl,
      boolean requireNewTask,
      boolean bypassParser,
      boolean useExternalBrowser,
      boolean saveHistory) {

    try {
      if (saveHistory) {
        Browser.updateVisitedHistory(context.getContentResolver(), url, true);
      }
    } catch (Exception ex) {
      if (Constants.LOGGING) Log.i(TAG, "Browser.updateVisitedHistory error", ex);
    }

    Uri uri = Uri.parse(url);

    if (!bypassParser) {
      if (Util.isRedditUri(uri)) {
        String path = uri.getPath();
        Matcher matcher = COMMENT_LINK.matcher(path);
        if (matcher.matches()) {
          if (matcher.group(3) != null || matcher.group(2) != null) {
            CacheInfo.invalidateCachedThread(context);
            Intent intent = new Intent(context, CommentsListActivity.class);
            intent.setData(uri);
            intent.putExtra(Constants.EXTRA_NUM_COMMENTS, Constants.DEFAULT_COMMENT_DOWNLOAD_LIMIT);
            if (requireNewTask) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            Activity ac = (Activity) context;
            ac.startActivityForResult(intent, 0);
            return;
          }
        }
        matcher = REDDIT_LINK.matcher(path);
        if (matcher.matches()) {
          CacheInfo.invalidateCachedSubreddit(context);
          Intent intent = new Intent(context, ThreadsListActivity.class);
          intent.setData(uri);
          if (requireNewTask) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          Activity ac = (Activity) context;
          ac.startActivityForResult(intent, 0);
          return;
        }
        matcher = USER_LINK.matcher(path);
        if (matcher.matches()) {
          Intent intent = new Intent(context, ProfileActivity.class);
          intent.setData(uri);
          if (requireNewTask) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          Activity ac = (Activity) context;
          ac.startActivityForResult(intent, 0);
          return;
        }
      } else if (Util.isRedditShortenedUri(uri)) {
        String path = uri.getPath();
        if (path.equals("") || path.equals("/")) {
          CacheInfo.invalidateCachedSubreddit(context);
          Intent intent = new Intent(context, ThreadsListActivity.class);
          intent.setData(uri);
          if (requireNewTask) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          Activity ac = (Activity) context;
          ac.startActivityForResult(intent, 0);
        } else {
          // Assume it points to a thread aka CommentsList
          CacheInfo.invalidateCachedThread(context);
          Intent intent = new Intent(context, CommentsListActivity.class);
          intent.setData(uri);
          intent.putExtra(Constants.EXTRA_NUM_COMMENTS, Constants.DEFAULT_COMMENT_DOWNLOAD_LIMIT);
          if (requireNewTask) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          Activity ac = (Activity) context;
          ac.startActivityForResult(intent, 0);
        }
        return;
      }
    }
    uri = Util.optimizeMobileUri(uri);

    // Some URLs should always be opened externally, if BrowserActivity doesn't support their
    // content.
    if (Util.isYoutubeUri(uri) || Util.isAndroidMarketUri(uri)) useExternalBrowser = true;

    if (useExternalBrowser) {
      Intent browser = new Intent(Intent.ACTION_VIEW, uri);
      browser.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
      if (requireNewTask) browser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      Activity ac = (Activity) context;
      ac.startActivityForResult(browser, 0);
    } else {
      Intent browser = new Intent(context, BrowserActivity.class);
      browser.setData(uri);
      if (threadUrl != null) browser.putExtra(Constants.EXTRA_THREAD_URL, threadUrl);
      if (requireNewTask) browser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      Activity ac = (Activity) context;
      ac.startActivityForResult(browser, 0);
    }
  }