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.messaging.datamodel.data;
18 
19 import android.database.Cursor;
20 import android.support.v4.util.ArrayMap;
21 
22 import java.util.ArrayList;
23 import java.util.List;
24 
25 import com.android.messaging.util.OsUtil;
26 
27 /**
28  * A class that contains the list of all self participants potentially involved in a conversation.
29  * This class contains both active/inactive self entries when there is multi-SIM support.
30  */
31 public class SelfParticipantsData {
32     /**
33      * The map from self participant ids to self-participant data entries in the participants table.
34      * This includes both active, inactive and default (with subId ==
35      * {@link ParticipantData#DEFAULT_SELF_SUB_ID}) subscriptions.
36      */
37     private final ArrayMap<String, ParticipantData> mSelfParticipantMap;
38 
SelfParticipantsData()39     public SelfParticipantsData() {
40         mSelfParticipantMap = new ArrayMap<String, ParticipantData>();
41     }
42 
bind(final Cursor cursor)43     public void bind(final Cursor cursor) {
44         mSelfParticipantMap.clear();
45         if (cursor != null) {
46             while (cursor.moveToNext()) {
47                 final ParticipantData newParticipant = ParticipantData.getFromCursor(cursor);
48                 mSelfParticipantMap.put(newParticipant.getId(), newParticipant);
49             }
50         }
51     }
52 
53     /**
54      * Gets the list of self participants for all subscriptions.
55      * @param activeOnly if set, returns active self entries only (i.e. those with SIMs plugged in).
56      */
getSelfParticipants(final boolean activeOnly)57     public List<ParticipantData> getSelfParticipants(final boolean activeOnly) {
58          List<ParticipantData> list = new ArrayList<ParticipantData>();
59         for (final ParticipantData self : mSelfParticipantMap.values()) {
60             if (!activeOnly || self.isActiveSubscription()) {
61                 list.add(self);
62             }
63         }
64         return list;
65     }
66 
67     /**
68      * Gets the self participant corresponding to the given self id.
69      */
getSelfParticipantById(final String selfId)70     ParticipantData getSelfParticipantById(final String selfId) {
71         return mSelfParticipantMap.get(selfId);
72     }
73 
74     /**
75      * Returns if a given self id represents the default self.
76      */
isDefaultSelf(final String selfId)77     boolean isDefaultSelf(final String selfId) {
78         if (!OsUtil.isAtLeastL_MR1()) {
79             return true;
80         }
81         final ParticipantData self = getSelfParticipantById(selfId);
82         return self == null ? false : self.getSubId() == ParticipantData.DEFAULT_SELF_SUB_ID;
83     }
84 
getSelfParticipantsCountExcludingDefault(final boolean activeOnly)85     public int getSelfParticipantsCountExcludingDefault(final boolean activeOnly) {
86         int count = 0;
87         for (final ParticipantData self : mSelfParticipantMap.values()) {
88             if (!self.isDefaultSelf() && (!activeOnly || self.isActiveSubscription())) {
89                 count++;
90             }
91         }
92         return count;
93     }
94 
getDefaultSelfParticipant()95     public ParticipantData getDefaultSelfParticipant() {
96         for (final ParticipantData self : mSelfParticipantMap.values()) {
97             if (self.isDefaultSelf()) {
98                 return self;
99             }
100         }
101         return null;
102     }
103 
isLoaded()104     boolean isLoaded() {
105         return !mSelfParticipantMap.isEmpty();
106     }
107 }
108