Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(599)

Side by Side Diff: components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BundleToPersistableBundleConverter.java

Issue 2714463002: [android] Add JobScheduler-based BackgroundTaskScheduler. (Closed)
Patch Set: Clean up background section of documentation Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.components.background_task_scheduler;
6
7 import android.annotation.TargetApi;
8 import android.os.Build;
9 import android.os.Bundle;
10 import android.os.PersistableBundle;
11 import android.support.annotation.NonNull;
12
13 import java.util.HashSet;
14 import java.util.Set;
15
16 /**
17 * Converts from {@link Bundle} to {@link PersistableBundle}.
18 *
19 * The {@link android.app.job.JobScheduler} API requires the use of {@link Persi stableBundle} in
20 * the {@link android.app.job.JobInfo}, but that was added in API 21 (Lollipop). This means that
21 * the API of the {@link BackgroundTaskScheduler} needs to take a {@link Bundle} , but convert it to
22 * a {@link PersistableBundle} in the case of using {@link android.app.job.JobSc heduler} as the
23 * backend for scheduling.
24 */
25 @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
Peter Beverloo 2017/02/24 18:07:10 nit: docs say API 21, annotation says 22. Is this
nyquist 2017/02/24 23:41:12 Yes :-( Updated comment.
26 class BundleToPersistableBundleConverter {
27 /**
28 * A Result which contains the resulting {@link PersistableBundle} after a c onversion, and also
29 * contains a set of all the failed keys.
30 */
31 static class Result {
32 @NonNull
33 private final PersistableBundle mBundle;
34 @NonNull
35 private final Set<String> mFailedKeys;
36
37 private Result(@NonNull PersistableBundle bundle, @NonNull Set<String> f ailedKeys) {
Peter Beverloo 2017/02/24 18:07:12 nit: Up to the Java crowd, but personally I find i
nyquist 2017/02/24 23:41:12 You have a good point. I guess I was just uncertai
38 mBundle = bundle;
39 mFailedKeys = failedKeys;
40 }
41
42 boolean hasErrors() {
43 return mFailedKeys.size() > 0;
44 }
45
46 @NonNull
47 PersistableBundle getPersistableBundle() {
48 return mBundle;
49 }
50
51 @NonNull
52 Set<String> getFailedKeys() {
53 return mFailedKeys;
54 }
55
56 String getFailedKeysErrorString() {
57 StringBuilder sb = new StringBuilder();
58 sb.append("{");
59 boolean first = true;
60 for (String key : mFailedKeys) {
61 if (!first) sb.append(", ");
62 first = false;
63
64 sb.append(key);
65 }
66 sb.append("}");
67 return sb.toString();
68 }
69 }
70
71 /**
72 * Copy all entries in the {@link Bundle} that can be part of a {@link Persi stableBundle}.
73 * @param bundle the {@link Bundle} to convert.
74 * @return a result object contain the resulting {@link PersistableBundle} a nd whether any of
75 * the keys failed.
76 */
77 static Result convert(Bundle bundle) {
78 PersistableBundle persistableBundle = new PersistableBundle();
79 Set<String> failedKeys = new HashSet<>();
80 for (String key : bundle.keySet()) {
81 Object obj = bundle.get(key);
82 if (obj instanceof Boolean) {
83 persistableBundle.putBoolean(key, (Boolean) obj);
84 } else if (obj instanceof boolean[]) {
85 persistableBundle.putBooleanArray(key, (boolean[]) obj);
86 } else if (obj instanceof Double) {
87 persistableBundle.putDouble(key, (Double) obj);
88 } else if (obj instanceof double[]) {
89 persistableBundle.putDoubleArray(key, (double[]) obj);
90 } else if (obj instanceof Integer) {
91 persistableBundle.putInt(key, (Integer) obj);
92 } else if (obj instanceof int[]) {
93 persistableBundle.putIntArray(key, (int[]) obj);
94 } else if (obj instanceof Long) {
95 persistableBundle.putLong(key, (Long) obj);
96 } else if (obj instanceof long[]) {
97 persistableBundle.putLongArray(key, (long[]) obj);
98 } else if (obj instanceof String) {
99 persistableBundle.putString(key, (String) obj);
100 } else if (obj instanceof String[]) {
101 persistableBundle.putStringArray(key, (String[]) obj);
102 } else {
Peter Beverloo 2017/02/24 20:29:44 This needs to be able to handle NULL values. I sug
nyquist 2017/02/24 23:41:12 Done. Also added test for this.
103 failedKeys.add(key);
104 }
105 }
106 return new Result(persistableBundle, failedKeys);
107 }
108 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698