How to use the new Android M feature of “Text Selection” to be offered from outside of your app?

First, to clarify the question: On an M emulator, if you highlight text, you will see the new floating action mode. If you click the overflow icon, you will see “API DEMOS” show up:

M Developer Preview Emulator

Clicking that brings up an activity from the API Demos app, showing the highlighted text:

Another M Developer Preview Emulator

Replacing the value in the field and clicking the button puts your replacement text in as a replacement for whatever you had highlighted.

WARNING: The following explanation is from inspecting the API Demos code and the M Developer Preview documentation. It is very possible that this will change before M ships for realz. YMMV, unless you use the metric system, in which case YKMV.

The activity in question, that is receiving the text, supports ACTION_PROCESS_TEXT as the Intent action. EXTRA_PROCESS_TEXT will hold some text, or EXTRA_PROCESS_TEXT_READONLY will hold it if the text is read-only. The activity will be invoked via startActivityForResult(). The result Intent can have its own EXTRA_PROCESS_TEXT value, which will be the replacement text.

So, to the specific questions:

What should be added in code (and manifest) to be able to handle the selected text from outside the app ?

See above. Note that the API Demos activity (ProcessText) has this <intent-filter>:

        <intent-filter >
            <action android:name="android.intent.action.PROCESS_TEXT"/>
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />

The documentation does not discuss a MIME type. I have not run any experiments to determine if the MIME type is required, and what else we might get (text/html for stuff that has spans?).

Is it possible to limit the selection to certain types of texts ? For example, offer to show the app only if the text type is a valid phone number ?

That wouldn’t seem to be possible given the documentation. That being said, it’s certainly a reasonable idea (e.g., advertise a regex, or multiple regexes, via metadata in the manifest that the text must match).

Leave a Comment