• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 package com.android.settings.slices;
18 
19 import android.annotation.IntDef;
20 import android.net.Uri;
21 import android.text.TextUtils;
22 
23 import java.lang.annotation.Retention;
24 import java.lang.annotation.RetentionPolicy;
25 import java.util.List;
26 
27 /**
28  * Data class representing a slice stored by {@link SlicesIndexer}.
29  * Note that {@link #mKey} is treated as a primary key for this class and determines equality.
30  */
31 public class SliceData {
32 
33     /**
34      * Flags indicating the UI type of the Slice.
35      */
36     @IntDef({SliceType.INTENT, SliceType.SWITCH, SliceType.SLIDER})
37     @Retention(RetentionPolicy.SOURCE)
38     public @interface SliceType {
39         /**
40          * Only supports content intent.
41          */
42         int INTENT = 0;
43 
44         /**
45          * Supports toggle action.
46          */
47         int SWITCH = 1;
48 
49         /**
50          * Supports progress bar.
51          */
52         int SLIDER = 2;
53     }
54 
55     private final String mKey;
56 
57     private final String mTitle;
58 
59     private final String mSummary;
60 
61     private final CharSequence mScreenTitle;
62 
63     private final String mKeywords;
64 
65     private final int mIconResource;
66 
67     private final String mFragmentClassName;
68 
69     private final Uri mUri;
70 
71     private final String mPreferenceController;
72 
73     @SliceType
74     private final int mSliceType;
75 
76     private final boolean mIsPlatformDefined;
77 
getKey()78     public String getKey() {
79         return mKey;
80     }
81 
getTitle()82     public String getTitle() {
83         return mTitle;
84     }
85 
getSummary()86     public String getSummary() {
87         return mSummary;
88     }
89 
getScreenTitle()90     public CharSequence getScreenTitle() {
91         return mScreenTitle;
92     }
93 
getKeywords()94     public String getKeywords() {
95         return mKeywords;
96     }
97 
getIconResource()98     public int getIconResource() {
99         return mIconResource;
100     }
101 
getFragmentClassName()102     public String getFragmentClassName() {
103         return mFragmentClassName;
104     }
105 
getUri()106     public Uri getUri() {
107         return mUri;
108     }
109 
getPreferenceController()110     public String getPreferenceController() {
111         return mPreferenceController;
112     }
113 
getSliceType()114     public int getSliceType() {
115         return mSliceType;
116     }
117 
isPlatformDefined()118     public boolean isPlatformDefined() {
119         return mIsPlatformDefined;
120     }
121 
SliceData(Builder builder)122     private SliceData(Builder builder) {
123         mKey = builder.mKey;
124         mTitle = builder.mTitle;
125         mSummary = builder.mSummary;
126         mScreenTitle = builder.mScreenTitle;
127         mKeywords = builder.mKeywords;
128         mIconResource = builder.mIconResource;
129         mFragmentClassName = builder.mFragmentClassName;
130         mUri = builder.mUri;
131         mPreferenceController = builder.mPrefControllerClassName;
132         mSliceType = builder.mSliceType;
133         mIsPlatformDefined = builder.mIsPlatformDefined;
134     }
135 
136     @Override
hashCode()137     public int hashCode() {
138         return mKey.hashCode();
139     }
140 
141     @Override
equals(Object obj)142     public boolean equals(Object obj) {
143         if (!(obj instanceof SliceData)) {
144             return false;
145         }
146         SliceData newObject = (SliceData) obj;
147         return TextUtils.equals(mKey, newObject.mKey);
148     }
149 
150     static class Builder {
151         private String mKey;
152 
153         private String mTitle;
154 
155         private String mSummary;
156 
157         private CharSequence mScreenTitle;
158 
159         private String mKeywords;
160 
161         private int mIconResource;
162 
163         private String mFragmentClassName;
164 
165         private Uri mUri;
166 
167         private String mPrefControllerClassName;
168 
169         private int mSliceType;
170 
171         private boolean mIsPlatformDefined;
172 
setKey(String key)173         public Builder setKey(String key) {
174             mKey = key;
175             return this;
176         }
177 
setTitle(String title)178         public Builder setTitle(String title) {
179             mTitle = title;
180             return this;
181         }
182 
setSummary(String summary)183         public Builder setSummary(String summary) {
184             mSummary = summary;
185             return this;
186         }
187 
setScreenTitle(CharSequence screenTitle)188         public Builder setScreenTitle(CharSequence screenTitle) {
189             mScreenTitle = screenTitle;
190             return this;
191         }
192 
setKeywords(String keywords)193         public Builder setKeywords(String keywords) {
194             mKeywords = keywords;
195             return this;
196         }
197 
setIcon(int iconResource)198         public Builder setIcon(int iconResource) {
199             mIconResource = iconResource;
200             return this;
201         }
202 
setPreferenceControllerClassName(String controllerClassName)203         public Builder setPreferenceControllerClassName(String controllerClassName) {
204             mPrefControllerClassName = controllerClassName;
205             return this;
206         }
207 
setFragmentName(String fragmentClassName)208         public Builder setFragmentName(String fragmentClassName) {
209             mFragmentClassName = fragmentClassName;
210             return this;
211         }
212 
setUri(Uri uri)213         public Builder setUri(Uri uri) {
214             mUri = uri;
215             return this;
216         }
217 
setSliceType(@liceType int sliceType)218         public Builder setSliceType(@SliceType int sliceType) {
219             mSliceType = sliceType;
220             return this;
221         }
222 
setPlatformDefined(boolean isPlatformDefined)223         public Builder setPlatformDefined(boolean isPlatformDefined) {
224             mIsPlatformDefined = isPlatformDefined;
225             return this;
226         }
227 
build()228         public SliceData build() {
229             if (TextUtils.isEmpty(mKey)) {
230                 throw new InvalidSliceDataException("Key cannot be empty");
231             }
232 
233             if (TextUtils.isEmpty(mTitle)) {
234                 throw new InvalidSliceDataException("Title cannot be empty");
235             }
236 
237             if (TextUtils.isEmpty(mFragmentClassName)) {
238                 throw new InvalidSliceDataException("Fragment Name cannot be empty");
239             }
240 
241             if (TextUtils.isEmpty(mPrefControllerClassName)) {
242                 throw new InvalidSliceDataException("Preference Controller cannot be empty");
243             }
244 
245             return new SliceData(this);
246         }
247 
getKey()248         public String getKey() {
249             return mKey;
250         }
251     }
252 
253     public static class InvalidSliceDataException extends RuntimeException {
254 
InvalidSliceDataException(String message)255         public InvalidSliceDataException(String message) {
256             super(message);
257         }
258     }
259 }