Home | History | Annotate | Download | only in data
      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 
     39     public SelfParticipantsData() {
     40         mSelfParticipantMap = new ArrayMap<String, ParticipantData>();
     41     }
     42 
     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      */
     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      */
     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      */
     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 
     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 
     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 
    104     boolean isLoaded() {
    105         return !mSelfParticipantMap.isEmpty();
    106     }
    107 }
    108