blob: 36f59819e1fc2b3216901df9a323db6960f3d0b9 [file] [log] [blame]
/*
* 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));
}
}