I have multiple email account installed on Android. But when I launch the Intent I see only three of them. I've added also the browsers installed. But still I can see only three options. Is there a way to show all the options available?
This is the code I'm using:
fun openEmailPicker(){
val packageManager = activity.packageManager
val resInfoEmail = extractResInfoFromIntent("mailto:", packageManager)
val resInfoBrowser = extractResInfoFromIntent("http://www.gmail.com", packageManager)
if (resInfoEmail.size > 0) {
val openInChooser = buildHeader(resInfoEmail, packageManager)
val emailIntents = createIntentLIst(1, resInfoEmail, packageManager)
val browserIntents = createIntentLIst(0, resInfoBrowser, packageManager)
browserIntents.addAll(emailIntents)
openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, browserIntents.toTypedArray())
startActivity(openInChooser)
}
}
private fun buildHeader(resInfo: MutableList<ResolveInfo>, packageManager: PackageManager): Intent {
val resolveInfo = resInfo[0]
val intentChooser = packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName)
return Intent.createChooser(intentChooser, getString(R.string.select_to_open_email))
}
private fun createIntentLIst(from: Int, resInfo: MutableList<ResolveInfo>, packageManager: PackageManager): MutableList<LabeledIntent> {
val intentList: MutableList<LabeledIntent> = ArrayList()
for (index in from until resInfo.size) {
extractLabelToLabeledIntent(resInfo, index, packageManager, intentList)
}
return intentList
}
private fun extractLabelToLabeledIntent(resInfo: MutableList<ResolveInfo>, i: Int, pm: PackageManager, intentList: MutableList<LabeledIntent>) {
val resolveInfo = resInfo[i]
val packageName = resolveInfo.activityInfo.packageName
val intent = pm.getLaunchIntentForPackage(packageName)
intentList.add(LabeledIntent(intent, packageName, resolveInfo.loadLabel(pm), resolveInfo.icon))
}
private fun extractResInfoFromIntent(URI: String, packageManager: PackageManager): MutableList<ResolveInfo> {
val emailIntent = Intent(Intent.ACTION_VIEW, Uri.parse(URI))
return packageManager.queryIntentActivities(emailIntent, 0)
}
