package com.chrome.codereview; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Bundle; import android.text.TextUtils; import android.widget.Toast; import java.util.List; /** * Created by sergeyv on 18/4/14. */ public class IssueDetailActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getIntent().getAction() == Intent.ACTION_VIEW) { int issueId = issueId(getIntent()); if (issueId == -1) { failGracefully(); return; } getIntent().putExtra(IssueDetailsFragment.EXTRA_ISSUE_ID, issueId); } setContentView(R.layout.activity_issue_detail); } private void failGracefully() { Toast.makeText(this, getString(R.string.fail_to_open_link), Toast.LENGTH_LONG).show(); startOtherBestChoice(); finish(); } private int issueId(Intent intent) { List<String> segments = intent.getData().getPathSegments(); if (segments.size() != 1) { return -1; } String issueId = segments.get(0); try { return Integer.parseInt(issueId); } catch (Exception e) { return -1; } } private void startOtherBestChoice() { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(getIntent().getData()); PackageManager packageManager = getPackageManager(); ResolveInfo resolveInfo = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); if (resolveInfo != null && !TextUtils.equals(resolveInfo.activityInfo.packageName, getPackageName())) { startActivity(intent); return; } List<ResolveInfo> resolved = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); for (ResolveInfo info: resolved) { String packageName = info.activityInfo.packageName; if (!TextUtils.equals(packageName, getPackageName())) { intent.setPackage(packageName); startActivity(intent); return; } } } }