1 /*
2  * Copyright (C) 2015 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.contacts.editor;
18 
19 import com.android.contacts.common.model.RawContactDelta;
20 import com.android.contacts.common.model.ValuesDelta;
21 import com.android.contacts.common.model.account.AccountType;
22 import com.android.contacts.common.model.account.AccountType.EditField;
23 import com.android.contacts.common.model.dataitem.DataKind;
24 
25 import android.text.TextUtils;
26 
27 import java.util.ArrayList;
28 import java.util.List;
29 
30 /**
31  * Holder for the multi account raw contact data needed to back an editor input field.
32  */
33 public final class KindSectionData {
34 
35     private final AccountType mAccountType;
36     private final DataKind mDataKind;
37     private final RawContactDelta mRawContactDelta;
38 
KindSectionData(AccountType accountType, DataKind dataKind, RawContactDelta rawContactDelta)39     public KindSectionData(AccountType accountType, DataKind dataKind,
40             RawContactDelta rawContactDelta) {
41         mAccountType = accountType;
42         mDataKind = dataKind;
43         mRawContactDelta = rawContactDelta;
44     }
45 
getAccountType()46     public AccountType getAccountType() {
47         return mAccountType;
48     }
49 
50     /** Returns all ValuesDeltas for the data kind this section represents.*/
getValuesDeltas()51     public List<ValuesDelta> getValuesDeltas() {
52         final List<ValuesDelta> valuesDeltas = mRawContactDelta.getMimeEntries(mDataKind.mimeType);
53         return valuesDeltas == null ? new ArrayList<ValuesDelta>() : valuesDeltas;
54     }
55 
56     /** Returns visible and non deleted ValuesDeltas for the data kind this section represents. */
getVisibleValuesDeltas()57     public List<ValuesDelta> getVisibleValuesDeltas() {
58         final ArrayList<ValuesDelta> valuesDeltas = new ArrayList<> ();
59         for (ValuesDelta valuesDelta : getValuesDeltas()) {
60             // Same conditions as KindSectionView#rebuildFromState
61             if (valuesDelta.isVisible() && !valuesDelta.isDelete()) {
62                 valuesDeltas.add(valuesDelta);
63             }
64         }
65         return valuesDeltas;
66     }
67 
68     /** Returns non-empty ValuesDeltas for the data kind this section represents. */
getNonEmptyValuesDeltas()69     public List<ValuesDelta> getNonEmptyValuesDeltas() {
70         final ArrayList<ValuesDelta> valuesDeltas = new ArrayList<> ();
71         for (ValuesDelta valuesDelta : getValuesDeltas()) {
72             if (!isEmpty(valuesDelta)) {
73                 valuesDeltas.add(valuesDelta);
74             }
75         }
76         return valuesDeltas;
77     }
78 
79     /** Returns the super primary ValuesDelta for the data kind this section represents. */
getSuperPrimaryValuesDelta()80     public ValuesDelta getSuperPrimaryValuesDelta() {
81         for (ValuesDelta valuesDelta : getValuesDeltas()) {
82             if (valuesDelta.isSuperPrimary()) return valuesDelta;
83         }
84         return null;
85     }
86 
87     /** Returns the ValuesDelta with the given ID. */
getValuesDeltaById(Long id)88     public ValuesDelta getValuesDeltaById(Long id) {
89         for (ValuesDelta valuesDelta : getValuesDeltas()) {
90             if (valuesDelta.getId().equals(id)) return valuesDelta;
91         }
92         return null;
93     }
94 
95     /** Returns the first non empty ValuesDelta for the data kind this section represents. */
getFirstNonEmptyValuesDelta()96     public ValuesDelta getFirstNonEmptyValuesDelta() {
97         for (ValuesDelta valuesDelta : getValuesDeltas()) {
98             if (!isEmpty(valuesDelta)) return valuesDelta;
99         }
100         return null;
101     }
102 
isEmpty(ValuesDelta valuesDelta)103     private boolean isEmpty(ValuesDelta valuesDelta) {
104         if (mDataKind.fieldList != null) {
105             for (EditField editField : mDataKind.fieldList) {
106                 final String column = editField.column;
107                 final String value = valuesDelta.getAsString(column);
108                 if (!TextUtils.isEmpty(value)) return false;
109             }
110         }
111         return true;
112     }
113 
getDataKind()114     public DataKind getDataKind() {
115         return mDataKind;
116     }
117 
getRawContactDelta()118     public RawContactDelta getRawContactDelta() {
119         return mRawContactDelta;
120     }
121 }
122