1 /*
2  * Copyright (C) 2010 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.contacts.common.list;
17 
18 import android.provider.ContactsContract.Directory;
19 
20 import com.android.common.widget.CompositeCursorAdapter;
21 
22 /**
23  * Model object for a {@link Directory} row.
24  */
25 public final class DirectoryPartition extends CompositeCursorAdapter.Partition {
26 
27     public static final int STATUS_NOT_LOADED = 0;
28     public static final int STATUS_LOADING = 1;
29     public static final int STATUS_LOADED = 2;
30 
31     public static final int RESULT_LIMIT_DEFAULT = -1;
32 
33     private long mDirectoryId;
34     private String mContentUri;
35     private String mDirectoryType;
36     private String mDisplayName;
37     private int mStatus;
38     private boolean mPriorityDirectory;
39     private boolean mPhotoSupported;
40     private int mResultLimit = RESULT_LIMIT_DEFAULT;
41     private boolean mDisplayNumber = true;
42 
43     private String mLabel;
44 
DirectoryPartition(boolean showIfEmpty, boolean hasHeader)45     public DirectoryPartition(boolean showIfEmpty, boolean hasHeader) {
46         super(showIfEmpty, hasHeader);
47     }
48 
49     /**
50      * Directory ID, see {@link Directory}.
51      */
getDirectoryId()52     public long getDirectoryId() {
53         return mDirectoryId;
54     }
55 
setDirectoryId(long directoryId)56     public void setDirectoryId(long directoryId) {
57         this.mDirectoryId = directoryId;
58     }
59 
60     /**
61      * Directory type resolved from {@link Directory#PACKAGE_NAME} and
62      * {@link Directory#TYPE_RESOURCE_ID};
63      */
getDirectoryType()64     public String getDirectoryType() {
65         return mDirectoryType;
66     }
67 
setDirectoryType(String directoryType)68     public void setDirectoryType(String directoryType) {
69         this.mDirectoryType = directoryType;
70     }
71 
72     /**
73      * See {@link Directory#DISPLAY_NAME}.
74      */
getDisplayName()75     public String getDisplayName() {
76         return mDisplayName;
77     }
78 
setDisplayName(String displayName)79     public void setDisplayName(String displayName) {
80         this.mDisplayName = displayName;
81     }
82 
getStatus()83     public int getStatus() {
84         return mStatus;
85     }
86 
setStatus(int status)87     public void setStatus(int status) {
88         mStatus = status;
89     }
90 
isLoading()91     public boolean isLoading() {
92         return mStatus == STATUS_NOT_LOADED || mStatus == STATUS_LOADING;
93     }
94 
95     /**
96      * Returns true if this directory should be loaded before non-priority directories.
97      */
isPriorityDirectory()98     public boolean isPriorityDirectory() {
99         return mPriorityDirectory;
100     }
101 
setPriorityDirectory(boolean priorityDirectory)102     public void setPriorityDirectory(boolean priorityDirectory) {
103         mPriorityDirectory = priorityDirectory;
104     }
105 
106     /**
107      * Returns true if this directory supports photos.
108      */
isPhotoSupported()109     public boolean isPhotoSupported() {
110         return mPhotoSupported;
111     }
112 
setPhotoSupported(boolean flag)113     public void setPhotoSupported(boolean flag) {
114         this.mPhotoSupported = flag;
115     }
116 
117     /**
118      * Max number of results for this directory. Defaults to {@link #RESULT_LIMIT_DEFAULT} which
119      * implies using the adapter's
120      * {@link com.android.contacts.common.list.ContactListAdapter#getDirectoryResultLimit()}
121      */
getResultLimit()122     public int getResultLimit() {
123         return mResultLimit;
124     }
125 
setResultLimit(int resultLimit)126     public void setResultLimit(int resultLimit) {
127         mResultLimit = resultLimit;
128     }
129 
130     /**
131      * Used by extended directories to specify a custom content URI. Extended directories MUST have
132      * a content URI
133      */
getContentUri()134     public String getContentUri() {
135         return mContentUri;
136     }
137 
setContentUri(String contentUri)138     public void setContentUri(String contentUri) {
139         mContentUri = contentUri;
140     }
141 
142     /**
143      * A label to display in the header next to the display name.
144      */
getLabel()145     public String getLabel() {
146         return mLabel;
147     }
148 
setLabel(String label)149     public void setLabel(String label) {
150         mLabel = label;
151     }
152 
153     @Override
toString()154     public String toString() {
155         return "DirectoryPartition{" +
156                 "mDirectoryId=" + mDirectoryId +
157                 ", mContentUri='" + mContentUri + '\'' +
158                 ", mDirectoryType='" + mDirectoryType + '\'' +
159                 ", mDisplayName='" + mDisplayName + '\'' +
160                 ", mStatus=" + mStatus +
161                 ", mPriorityDirectory=" + mPriorityDirectory +
162                 ", mPhotoSupported=" + mPhotoSupported +
163                 ", mResultLimit=" + mResultLimit +
164                 ", mLabel='" + mLabel + '\'' +
165                 '}';
166     }
167 
168     /**
169      * Whether or not to display the phone number in app that have that option - Dialer. If false,
170      * Phone Label should be used instead of Phone Number.
171      */
isDisplayNumber()172     public boolean isDisplayNumber() {
173         return mDisplayNumber;
174     }
175 
setDisplayNumber(boolean displayNumber)176     public void setDisplayNumber(boolean displayNumber) {
177         mDisplayNumber = displayNumber;
178     }
179 }
180