| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.support.v4.app; |
| |
| import android.content.ClipData; |
| import android.content.ClipDescription; |
| import android.content.Intent; |
| import android.os.Bundle; |
| |
| class RemoteInputCompatJellybean { |
| /** Label used to denote the clip data type used for remote input transport */ |
| public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results"; |
| |
| /** Extra added to a clip data intent object to hold the results bundle. */ |
| public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData"; |
| |
| private static final String KEY_RESULT_KEY = "resultKey"; |
| private static final String KEY_LABEL = "label"; |
| private static final String KEY_CHOICES = "choices"; |
| private static final String KEY_ALLOW_FREE_FORM_INPUT = "allowFreeFormInput"; |
| private static final String KEY_EXTRAS = "extras"; |
| |
| static RemoteInputCompatBase.RemoteInput fromBundle(Bundle data, |
| RemoteInputCompatBase.RemoteInput.Factory factory) { |
| return factory.build(data.getString(KEY_RESULT_KEY), |
| data.getCharSequence(KEY_LABEL), |
| data.getCharSequenceArray(KEY_CHOICES), |
| data.getBoolean(KEY_ALLOW_FREE_FORM_INPUT), |
| data.getBundle(KEY_EXTRAS)); |
| } |
| |
| static Bundle toBundle(RemoteInputCompatBase.RemoteInput remoteInput) { |
| Bundle data = new Bundle(); |
| data.putString(KEY_RESULT_KEY, remoteInput.getResultKey()); |
| data.putCharSequence(KEY_LABEL, remoteInput.getLabel()); |
| data.putCharSequenceArray(KEY_CHOICES, remoteInput.getChoices()); |
| data.putBoolean(KEY_ALLOW_FREE_FORM_INPUT, remoteInput.getAllowFreeFormInput()); |
| data.putBundle(KEY_EXTRAS, remoteInput.getExtras()); |
| return data; |
| } |
| |
| static RemoteInputCompatBase.RemoteInput[] fromBundleArray(Bundle[] bundles, |
| RemoteInputCompatBase.RemoteInput.Factory factory) { |
| if (bundles == null) { |
| return null; |
| } |
| RemoteInputCompatBase.RemoteInput[] remoteInputs = factory.newArray(bundles.length); |
| for (int i = 0; i < bundles.length; i++) { |
| remoteInputs[i] = fromBundle(bundles[i], factory); |
| } |
| return remoteInputs; |
| } |
| |
| static Bundle[] toBundleArray(RemoteInputCompatBase.RemoteInput[] remoteInputs) { |
| if (remoteInputs == null) { |
| return null; |
| } |
| Bundle[] bundles = new Bundle[remoteInputs.length]; |
| for (int i = 0; i < remoteInputs.length; i++) { |
| bundles[i] = toBundle(remoteInputs[i]); |
| } |
| return bundles; |
| } |
| |
| static Bundle getResultsFromIntent(Intent intent) { |
| ClipData clipData = intent.getClipData(); |
| if (clipData == null) { |
| return null; |
| } |
| ClipDescription clipDescription = clipData.getDescription(); |
| if (!clipDescription.hasMimeType(ClipDescription.MIMETYPE_TEXT_INTENT)) { |
| return null; |
| } |
| if (clipDescription.getLabel().equals(RESULTS_CLIP_LABEL)) { |
| return clipData.getItemAt(0).getIntent().getExtras().getParcelable(EXTRA_RESULTS_DATA); |
| } |
| return null; |
| } |
| |
| static void addResultsToIntent(RemoteInputCompatBase.RemoteInput[] remoteInputs, Intent intent, |
| Bundle results) { |
| Bundle resultsBundle = new Bundle(); |
| for (RemoteInputCompatBase.RemoteInput remoteInput : remoteInputs) { |
| Object result = results.get(remoteInput.getResultKey()); |
| if (result instanceof CharSequence) { |
| resultsBundle.putCharSequence(remoteInput.getResultKey(), (CharSequence) result); |
| } |
| } |
| Intent clipIntent = new Intent(); |
| clipIntent.putExtra(EXTRA_RESULTS_DATA, resultsBundle); |
| intent.setClipData(ClipData.newIntent(RESULTS_CLIP_LABEL, clipIntent)); |
| } |
| } |