1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.launcher3.util;
17 
18 import android.content.ContentValues;
19 import android.content.Intent;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22 
23 import com.android.launcher3.ItemInfo;
24 import com.android.launcher3.widget.WidgetAddFlowHandler;
25 
26 /**
27  * Utility class to store information regarding a pending request made by launcher. This information
28  * can be saved across launcher instances.
29  */
30 public class PendingRequestArgs extends ItemInfo implements Parcelable {
31 
32     private static final int TYPE_NONE = 0;
33     private static final int TYPE_INTENT = 1;
34     private static final int TYPE_APP_WIDGET = 2;
35 
36     private final int mArg1;
37     private final int mObjectType;
38     private final Parcelable mObject;
39 
PendingRequestArgs(ItemInfo info)40     public PendingRequestArgs(ItemInfo info) {
41         mArg1 = 0;
42         mObjectType = TYPE_NONE;
43         mObject = null;
44 
45         copyFrom(info);
46     }
47 
PendingRequestArgs(int arg1, int objectType, Parcelable object)48     private PendingRequestArgs(int arg1, int objectType, Parcelable object) {
49         mArg1 = arg1;
50         mObjectType = objectType;
51         mObject = object;
52     }
53 
PendingRequestArgs(Parcel parcel)54     public PendingRequestArgs(Parcel parcel) {
55         readFromValues(ContentValues.CREATOR.createFromParcel(parcel));
56         user = parcel.readParcelable(null);
57 
58         mArg1 = parcel.readInt();
59         mObjectType = parcel.readInt();
60         mObject = parcel.readParcelable(null);
61     }
62 
63     @Override
describeContents()64     public int describeContents() {
65         return 0;
66     }
67 
68     @Override
writeToParcel(Parcel dest, int flags)69     public void writeToParcel(Parcel dest, int flags) {
70         ContentValues itemValues = new ContentValues();
71         writeToValues(new ContentWriter(itemValues, null));
72         itemValues.writeToParcel(dest, flags);
73         dest.writeParcelable(user, flags);
74 
75         dest.writeInt(mArg1);
76         dest.writeInt(mObjectType);
77         dest.writeParcelable(mObject, flags);
78     }
79 
getWidgetHandler()80     public WidgetAddFlowHandler getWidgetHandler() {
81         return mObjectType == TYPE_APP_WIDGET ? (WidgetAddFlowHandler) mObject : null;
82     }
83 
getWidgetId()84     public int getWidgetId() {
85         return mObjectType == TYPE_APP_WIDGET ? mArg1 : 0;
86     }
87 
getPendingIntent()88     public Intent getPendingIntent() {
89         return mObjectType == TYPE_INTENT ? (Intent) mObject : null;
90     }
91 
getRequestCode()92     public int getRequestCode() {
93         return mObjectType == TYPE_INTENT ? mArg1 : 0;
94     }
95 
forWidgetInfo( int appWidgetId, WidgetAddFlowHandler widgetHandler, ItemInfo info)96     public static PendingRequestArgs forWidgetInfo(
97             int appWidgetId, WidgetAddFlowHandler widgetHandler, ItemInfo info) {
98         PendingRequestArgs args =
99                 new PendingRequestArgs(appWidgetId, TYPE_APP_WIDGET, widgetHandler);
100         args.copyFrom(info);
101         return args;
102     }
103 
forIntent(int requestCode, Intent intent, ItemInfo info)104     public static PendingRequestArgs forIntent(int requestCode, Intent intent, ItemInfo info) {
105         PendingRequestArgs args = new PendingRequestArgs(requestCode, TYPE_INTENT, intent);
106         args.copyFrom(info);
107         return args;
108     }
109 
110     public static final Parcelable.Creator<PendingRequestArgs> CREATOR =
111             new Parcelable.Creator<PendingRequestArgs>() {
112                 public PendingRequestArgs createFromParcel(Parcel source) {
113                     return new PendingRequestArgs(source);
114                 }
115 
116                 public PendingRequestArgs[] newArray(int size) {
117                     return new PendingRequestArgs[size];
118                 }
119             };
120 }
121