RemoteInputCompatJellybean.java revision 2bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7
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; 22ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazenimport android.os.Bundle; 23ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 24ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazenclass RemoteInputCompatJellybean { 25ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** Label used to denote the clip data type used for remote input transport */ 26ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results"; 27ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 28ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen /** Extra added to a clip data intent object to hold the results bundle. */ 29ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData"; 30ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 31ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen private static final String KEY_RESULT_KEY = "resultKey"; 32ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen private static final String KEY_LABEL = "label"; 33ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen private static final String KEY_CHOICES = "choices"; 34ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen private static final String KEY_ALLOW_FREE_FORM_INPUT = "allowFreeFormInput"; 35ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen private static final String KEY_EXTRAS = "extras"; 36ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 372bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen static RemoteInputCompatBase.RemoteInput fromBundle(Bundle data, 382bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen RemoteInputCompatBase.RemoteInput.Factory factory) { 39ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return factory.build(data.getString(KEY_RESULT_KEY), 40ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen data.getCharSequence(KEY_LABEL), 41ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen data.getCharSequenceArray(KEY_CHOICES), 42ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen data.getBoolean(KEY_ALLOW_FREE_FORM_INPUT), 43ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen data.getBundle(KEY_EXTRAS)); 44ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 45ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 46ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen static Bundle toBundle(RemoteInputCompatBase.RemoteInput remoteInput) { 47ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen Bundle data = new Bundle(); 48ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen data.putString(KEY_RESULT_KEY, remoteInput.getResultKey()); 49ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen data.putCharSequence(KEY_LABEL, remoteInput.getLabel()); 50ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen data.putCharSequenceArray(KEY_CHOICES, remoteInput.getChoices()); 51ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen data.putBoolean(KEY_ALLOW_FREE_FORM_INPUT, remoteInput.getAllowFreeFormInput()); 52ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen data.putBundle(KEY_EXTRAS, remoteInput.getExtras()); 53ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return data; 54ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 55ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 562bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen static RemoteInputCompatBase.RemoteInput[] fromBundleArray(Bundle[] bundles, 572bb98d48fdaf79a2bbd9d247da81a2bb9834dfc7Griff Hazen RemoteInputCompatBase.RemoteInput.Factory factory) { 58ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (bundles == null) { 59ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return null; 60ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 61ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen RemoteInputCompatBase.RemoteInput[] remoteInputs = factory.newArray(bundles.length); 62ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen for (int i = 0; i < bundles.length; i++) { 63ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen remoteInputs[i] = fromBundle(bundles[i], factory); 64ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 65ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return remoteInputs; 66ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 67ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 68ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen static Bundle[] toBundleArray(RemoteInputCompatBase.RemoteInput[] remoteInputs) { 69ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (remoteInputs == null) { 70ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return null; 71ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 72ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen Bundle[] bundles = new Bundle[remoteInputs.length]; 73ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen for (int i = 0; i < remoteInputs.length; i++) { 74ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen bundles[i] = toBundle(remoteInputs[i]); 75ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 76ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return bundles; 77ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 78ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 79ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen static Bundle getResultsFromIntent(Intent intent) { 80ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen ClipData clipData = intent.getClipData(); 81ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (clipData == null) { 82ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return null; 83ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 84ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen ClipDescription clipDescription = clipData.getDescription(); 85ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (!clipDescription.hasMimeType(ClipDescription.MIMETYPE_TEXT_INTENT)) { 86ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return null; 87ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 88ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (clipDescription.getLabel().equals(RESULTS_CLIP_LABEL)) { 89ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return clipData.getItemAt(0).getIntent().getExtras().getParcelable(EXTRA_RESULTS_DATA); 90ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 91ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen return null; 92ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 93ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen 94ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen static void addResultsToIntent(RemoteInputCompatBase.RemoteInput[] remoteInputs, Intent intent, 95ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen Bundle results) { 96ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen Bundle resultsBundle = new Bundle(); 97ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen for (RemoteInputCompatBase.RemoteInput remoteInput : remoteInputs) { 98ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen Object result = results.get(remoteInput.getResultKey()); 99ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen if (result instanceof CharSequence) { 100ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen resultsBundle.putCharSequence(remoteInput.getResultKey(), (CharSequence) result); 101ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 102ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 103ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen Intent clipIntent = new Intent(); 104ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen clipIntent.putExtra(EXTRA_RESULTS_DATA, resultsBundle); 105ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen intent.setClipData(ClipData.newIntent(RESULTS_CLIP_LABEL, clipIntent)); 106ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen } 107ce16e4276c2f61109a23b3f6707cfcd87b07c735Griff Hazen} 108