Add alternate intents and refinement callbacks to ChooserActivity
Allow a calling app to supply an array of additional Intents to the system ChooserActivity. The chooser will present a merged list of targets that can handle any of the Intents supplied, including both the standard EXTRA_INTENT as well as any of the intents supplied in EXTRA_ALTERNATE_INTENTS. These are treated as ordered; EXTRA_INTENT is considered the first/primary Intent and EXTRA_ALTERNATE_INTENTS are sorted most important first. Targets are queried for all supplied Intents. If the same component is returned for more than one Intent, the target is associated with the most important Intent that matched. This allows calling apps to supply several different payloads for an action depending on what the intended targets are able to support. For example, an app performing ACTION_SEND may supply image/jpeg data to compatible targets or a hosted web link to targets that only support text/plain. The user will have the opportunity to pick from a single merged list of choices using the best available payload, and will not be bothered with the implementation details of how the payload will be delivered to the recipient. If the calling app wishes to provide further disambiguation or refinement after the user makes a choice, for example to let the user choose which of the source intents to send from the primary or alternates, show a progress dialog as a full-resolution version of a photo is downloaded from the server before being sent along or while reticulating splines, the caller can supply an IntentSender to ACTION_CHOOSER including the extra EXTRA_REFINEMENT_INTENT_SENDER. This should be the IntentSender obtained from a PendingIntent pointing at an activity to launch to perform the refinement. The refinement activity should report that it is finished by obtaining the ResultReceiver from EXTRA_RESULT_RECEIVER. Available intents to send to the selected target will be contained in EXTRA_INTENT and EXTRA_ALTERNATE_INTENTS. To complete the refinement and send the result along to the chosen target, the refinement activity should select one of the supplied intents and send it to the ResultReceiver in a Bundle with the key EXTRA_INTENT and the result code RESULT_OK. To cancel the refinement, and let the user select another choice, send RESULT_CANCEL. While refinement activities cannot modify the filterEquals-affecting fields of the Intent they return, they may modify extras to provide additional or altered details to the final recipient. These extras will be filled into the Intent sent to the final target. Change-Id: I7ad4739eadd1a0e307675847ccf47ea948918a3a
Loading
Please register or sign in to comment