1ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen/*
2ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Copyright (C) 2014 The Android Open Source Project
3ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen *
4ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Licensed under the Apache License, Version 2.0 (the "License");
5ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * you may not use this file except in compliance with the License.
6ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * You may obtain a copy of the License at
7ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen *
8ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen *      http://www.apache.org/licenses/LICENSE-2.0
9ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen *
10ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * Unless required by applicable law or agreed to in writing, software
11ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * distributed under the License is distributed on an "AS IS" BASIS,
12ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * See the License for the specific language governing permissions and
14ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen * limitations under the License.
15ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen */
16ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
17ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazenpackage android.support.v4.app;
18ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
19ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazenimport android.content.ClipData;
20ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazenimport android.content.ClipDescription;
21ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazenimport android.content.Intent;
2259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennanimport android.net.Uri;
23ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazenimport android.os.Bundle;
248f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viveretteimport android.support.annotation.RequiresApi;
25ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
2659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennanimport java.util.ArrayList;
2759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennanimport java.util.HashMap;
2859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennanimport java.util.HashSet;
2959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennanimport java.util.Map;
3059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennanimport java.util.Set;
3159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan
328f886fe8c7e23fe6ccb8734167c960c2ed3429c3Alan Viverette@RequiresApi(16)
33ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazenclass RemoteInputCompatJellybean {
34ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    /** Label used to denote the clip data type used for remote input transport */
35ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
36ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
37ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    /** Extra added to a clip data intent object to hold the results bundle. */
38ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
39ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
4059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    /** Extra added to a clip data intent object to hold the data results bundle. */
4159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    private static final String EXTRA_DATA_TYPE_RESULTS_DATA =
4259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            "android.remoteinput.dataTypeResultsData";
4359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan
44ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    private static final String KEY_RESULT_KEY = "resultKey";
45ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    private static final String KEY_LABEL = "label";
46ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    private static final String KEY_CHOICES = "choices";
47ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    private static final String KEY_ALLOW_FREE_FORM_INPUT = "allowFreeFormInput";
48ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    private static final String KEY_EXTRAS = "extras";
4959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    private static final String KEY_ALLOWED_DATA_TYPES = "allowedDataTypes";
50ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
512bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen    static RemoteInputCompatBase.RemoteInput fromBundle(Bundle data,
522bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen            RemoteInputCompatBase.RemoteInput.Factory factory) {
5359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        ArrayList<String> allowedDataTypesAsList = data.getStringArrayList(KEY_ALLOWED_DATA_TYPES);
5459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        Set<String> allowedDataTypes = new HashSet<>();
5559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (allowedDataTypesAsList != null) {
5659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            for (String type : allowedDataTypesAsList) {
5759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                allowedDataTypes.add(type);
5859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            }
5959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        }
60ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        return factory.build(data.getString(KEY_RESULT_KEY),
61ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen                data.getCharSequence(KEY_LABEL),
62ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen                data.getCharSequenceArray(KEY_CHOICES),
63ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen                data.getBoolean(KEY_ALLOW_FREE_FORM_INPUT),
6459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                data.getBundle(KEY_EXTRAS),
6559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                allowedDataTypes);
66ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    }
67ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
68ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    static Bundle toBundle(RemoteInputCompatBase.RemoteInput remoteInput) {
69ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        Bundle data = new Bundle();
70ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        data.putString(KEY_RESULT_KEY, remoteInput.getResultKey());
71ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        data.putCharSequence(KEY_LABEL, remoteInput.getLabel());
72ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        data.putCharSequenceArray(KEY_CHOICES, remoteInput.getChoices());
73ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        data.putBoolean(KEY_ALLOW_FREE_FORM_INPUT, remoteInput.getAllowFreeFormInput());
74ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        data.putBundle(KEY_EXTRAS, remoteInput.getExtras());
7559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan
7659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        Set<String> allowedDataTypes = remoteInput.getAllowedDataTypes();
7759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (allowedDataTypes != null && !allowedDataTypes.isEmpty()) {
7859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            ArrayList<String> allowedDataTypesAsList = new ArrayList<>(allowedDataTypes.size());
7959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            for (String type : allowedDataTypes) {
8059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                allowedDataTypesAsList.add(type);
8159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            }
8259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            data.putStringArrayList(KEY_ALLOWED_DATA_TYPES, allowedDataTypesAsList);
8359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        }
84ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        return data;
85ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    }
86ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
872bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen    static RemoteInputCompatBase.RemoteInput[] fromBundleArray(Bundle[] bundles,
882bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen            RemoteInputCompatBase.RemoteInput.Factory factory) {
89ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        if (bundles == null) {
90ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            return null;
91ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        }
92ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        RemoteInputCompatBase.RemoteInput[] remoteInputs = factory.newArray(bundles.length);
93ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        for (int i = 0; i < bundles.length; i++) {
94ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            remoteInputs[i] = fromBundle(bundles[i], factory);
95ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        }
96ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        return remoteInputs;
97ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    }
98ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
99ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    static Bundle[] toBundleArray(RemoteInputCompatBase.RemoteInput[] remoteInputs) {
100ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        if (remoteInputs == null) {
101ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            return null;
102ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        }
103ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        Bundle[] bundles = new Bundle[remoteInputs.length];
104ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        for (int i = 0; i < remoteInputs.length; i++) {
105ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            bundles[i] = toBundle(remoteInputs[i]);
106ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        }
107ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        return bundles;
108ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    }
109ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
110ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    static Bundle getResultsFromIntent(Intent intent) {
11159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        Intent clipDataIntent = getClipDataIntentFromIntent(intent);
11259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (clipDataIntent == null) {
113ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            return null;
114ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        }
11559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        return clipDataIntent.getExtras().getParcelable(EXTRA_RESULTS_DATA);
11659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    }
11759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan
11859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    static Map<String, Uri> getDataResultsFromIntent(Intent intent, String remoteInputResultKey) {
11959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        Intent clipDataIntent = getClipDataIntentFromIntent(intent);
12059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (clipDataIntent == null) {
121ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            return null;
122ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        }
12359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        Map<String, Uri> results = new HashMap<>();
12459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        Bundle extras = clipDataIntent.getExtras();
12559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        for (String key : extras.keySet()) {
12659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            if (key.startsWith(EXTRA_DATA_TYPE_RESULTS_DATA)) {
12759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                String mimeType = key.substring(EXTRA_DATA_TYPE_RESULTS_DATA.length());
12859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                if (mimeType == null || mimeType.isEmpty()) {
12959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                    continue;
13059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                }
13159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                Bundle bundle = clipDataIntent.getBundleExtra(key);
13259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                String uriStr = bundle.getString(remoteInputResultKey);
13359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                if (uriStr == null || uriStr.isEmpty()) {
13459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                    continue;
13559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                }
13659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                results.put(mimeType, Uri.parse(uriStr));
13759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            }
138ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        }
13959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        return results.isEmpty() ? null : results;
140ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    }
141ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen
142ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    static void addResultsToIntent(RemoteInputCompatBase.RemoteInput[] remoteInputs, Intent intent,
143ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            Bundle results) {
14459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        Intent clipDataIntent = getClipDataIntentFromIntent(intent);
14559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (clipDataIntent == null) {
14659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            clipDataIntent = new Intent();  // First time we've added a result.
14759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        }
14859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        Bundle resultsBundle = clipDataIntent.getBundleExtra(EXTRA_RESULTS_DATA);
14959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (resultsBundle == null) {
15059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            resultsBundle = new Bundle();
15159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        }
152ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        for (RemoteInputCompatBase.RemoteInput remoteInput : remoteInputs) {
153ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            Object result = results.get(remoteInput.getResultKey());
154ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            if (result instanceof CharSequence) {
155ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen                resultsBundle.putCharSequence(remoteInput.getResultKey(), (CharSequence) result);
156ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen            }
157ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen        }
15859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        clipDataIntent.putExtra(EXTRA_RESULTS_DATA, resultsBundle);
15959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        intent.setClipData(ClipData.newIntent(RESULTS_CLIP_LABEL, clipDataIntent));
16059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    }
16159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan
16259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    /**
16359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan     * Same as {@link #addResultsToIntent} but for setting data results.
16459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan     * @param remoteInput The remote input for which results are being provided
16559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan     * @param intent The intent to add remote input results to. The {@link ClipData}
16659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan     *               field of the intent will be modified to contain the results.
16759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan     * @param results A map of mime type to the Uri result for that mime type.
16859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan     */
16959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    public static void addDataResultToIntent(RemoteInput remoteInput, Intent intent,
17059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            Map<String, Uri> results) {
17159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        Intent clipDataIntent = getClipDataIntentFromIntent(intent);
17259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (clipDataIntent == null) {
17359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            clipDataIntent = new Intent();  // First time we've added a result.
17459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        }
17559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        for (Map.Entry<String, Uri> entry : results.entrySet()) {
17659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            String mimeType = entry.getKey();
17759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            Uri uri = entry.getValue();
17859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            if (mimeType == null) {
17959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                continue;
18059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            }
18159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            Bundle resultsBundle =
18259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                    clipDataIntent.getBundleExtra(getExtraResultsKeyForData(mimeType));
18359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            if (resultsBundle == null) {
18459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan                resultsBundle = new Bundle();
18559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            }
18659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            resultsBundle.putString(remoteInput.getResultKey(), uri.toString());
18759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            clipDataIntent.putExtra(getExtraResultsKeyForData(mimeType), resultsBundle);
18859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        }
18959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        intent.setClipData(ClipData.newIntent(RESULTS_CLIP_LABEL, clipDataIntent));
19059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    }
19159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan
19259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    private static String getExtraResultsKeyForData(String mimeType) {
19359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        return EXTRA_DATA_TYPE_RESULTS_DATA + mimeType;
19459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    }
19559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan
19659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan    private static Intent getClipDataIntentFromIntent(Intent intent) {
19759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        ClipData clipData = intent.getClipData();
19859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (clipData == null) {
19959d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            return null;
20059d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        }
20159d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        ClipDescription clipDescription = clipData.getDescription();
20259d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (!clipDescription.hasMimeType(ClipDescription.MIMETYPE_TEXT_INTENT)) {
20359d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            return null;
20459d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        }
20559d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        if (!clipDescription.getLabel().equals(RESULTS_CLIP_LABEL)) {
20659d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan            return null;
20759d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        }
20859d562bdab983469340a054bd3bc888034fa6bc8Shane Brennan        return clipData.getItemAt(0).getIntent();
209ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen    }
210ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen}
211