1 /*
2  * Copyright (C) 2017 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  */
17 
18 package com.android.settings.intelligence.search;
19 
20 import androidx.annotation.IntDef;
21 import android.content.Intent;
22 import android.os.Parcel;
23 import android.os.Parcelable;
24 
25 import java.lang.annotation.Retention;
26 import java.lang.annotation.RetentionPolicy;
27 
28 /**
29  * A interface for search results types. Examples include Inline results, third party apps
30  * or any future possibilities.
31  */
32 public class ResultPayload implements Parcelable {
33     protected final Intent mIntent;
34 
35     @IntDef({PayloadType.INTENT, PayloadType.INLINE_SLIDER, PayloadType.INLINE_SWITCH,
36             PayloadType.INLINE_LIST, PayloadType.SAVED_QUERY})
37     @Retention(RetentionPolicy.SOURCE)
38     public @interface PayloadType {
39         /**
40          * Resulting page will be started using an mIntent
41          */
42         int INTENT = 0;
43 
44         /**
45          * Result is a inline widget, using a slider widget as UI.
46          */
47         int INLINE_SLIDER = 1;
48 
49         /**
50          * Result is a inline widget, using a toggle widget as UI.
51          */
52         int INLINE_SWITCH = 2;
53 
54         /**
55          * Result is an inline list-select, with an undefined UI.
56          */
57         int INLINE_LIST = 3;
58 
59         /**
60          * Result is a recently saved query.
61          */
62         int SAVED_QUERY = 4;
63     }
64 
65     /**
66      * Enumerates the possible values for the Availability of a setting.
67      */
68     @IntDef({Availability.AVAILABLE,
69             Availability.DISABLED_DEPENDENT_SETTING,
70             Availability.DISABLED_DEPENDENT_APP,
71             Availability.DISABLED_UNSUPPORTED,
72             Availability.RESOURCE_CONTENTION,
73             Availability.INTENT_ONLY,
74             Availability.DISABLED_FOR_USER,})
75     @Retention(RetentionPolicy.SOURCE)
76     public @interface Availability {
77         /**
78          * The setting is available.
79          */
80         int AVAILABLE = 0;
81 
82         /**
83          * The setting has a dependency in settings app which is currently disabled, blocking
84          * access.
85          */
86         int DISABLED_DEPENDENT_SETTING = 1;
87 
88         /**
89          * The setting is not supported by the device.
90          */
91         int DISABLED_UNSUPPORTED = 2;
92 
93         /**
94          * The setting you are trying to change is being used by another application and cannot
95          * be changed until it is released by said application.
96          */
97         int RESOURCE_CONTENTION = 3;
98 
99         /**
100          * The setting is disabled because corresponding app is disabled.
101          */
102         int DISABLED_DEPENDENT_APP = 4;
103 
104         /**
105          * This setting is supported on the device but cannot be changed inline.
106          */
107         int INTENT_ONLY = 5;
108 
109         /**
110          * The setting cannot be changed by the current user.
111          * ex: MobileNetworkTakeMeThereSetting should not be available to a secondary user.
112          */
113         int DISABLED_FOR_USER = 6;
114     }
115 
116     @IntDef({SettingsSource.UNKNOWN, SettingsSource.SYSTEM, SettingsSource.SECURE,
117             SettingsSource.GLOBAL})
118     @Retention(RetentionPolicy.SOURCE)
119     public @interface SettingsSource {
120         int UNKNOWN = 0;
121         int SYSTEM = 1;
122         int SECURE = 2;
123         int GLOBAL = 3;
124     }
125 
126 
ResultPayload(Parcel in)127     private ResultPayload(Parcel in) {
128         mIntent = in.readParcelable(ResultPayload.class.getClassLoader());
129     }
130 
ResultPayload(Intent intent)131     public ResultPayload(Intent intent) {
132         mIntent = intent;
133     }
134 
135     @ResultPayload.PayloadType
getType()136     public int getType() {
137         return PayloadType.INTENT;
138     }
139 
140     @Override
describeContents()141     public int describeContents() {
142         return 0;
143     }
144 
145     @Override
writeToParcel(Parcel dest, int flags)146     public void writeToParcel(Parcel dest, int flags) {
147         dest.writeParcelable(mIntent, flags);
148     }
149 
150     public static final Creator<ResultPayload> CREATOR = new Creator<ResultPayload>() {
151         @Override
152         public ResultPayload createFromParcel(Parcel in) {
153             return new ResultPayload(in);
154         }
155 
156         @Override
157         public ResultPayload[] newArray(int size) {
158             return new ResultPayload[size];
159         }
160     };
161 
getIntent()162     public Intent getIntent() {
163         return mIntent;
164     }
165 }
166