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 package com.android.messaging.datamodel.data; 17 18 import android.content.Context; 19 import android.net.Uri; 20 import android.text.TextUtils; 21 22 import com.android.messaging.R; 23 import com.android.messaging.util.Assert; 24 import com.android.messaging.util.AvatarUriUtil; 25 26 import java.util.ArrayList; 27 import java.util.List; 28 import java.util.Locale; 29 30 /** 31 * This is a UI facing data model component that holds a list of 32 * {@link SubscriptionListData.SubscriptionListEntry}'s, one for each *active* subscriptions. 33 * 34 * This is used to: 35 * 1) Show a list of SIMs in the SIM Selector 36 * 2) Show the currently selected SIM in the compose message view 37 * 3) Show SIM indicators on conversation message views 38 * 39 * It builds on top of SelfParticipantsData and performs additional logic such as determining 40 * the set of icons to use for the individual Subs. 41 */ 42 public class SubscriptionListData { 43 /** 44 * Represents a single sub that backs UI. 45 */ 46 public static class SubscriptionListEntry { 47 public final String selfParticipantId; 48 public final Uri iconUri; 49 public final Uri selectedIconUri; 50 public final String displayName; 51 public final int displayColor; 52 public final String displayDestination; 53 SubscriptionListEntry(final String selfParticipantId, final Uri iconUri, final Uri selectedIconUri, final String displayName, final int displayColor, final String displayDestination)54 private SubscriptionListEntry(final String selfParticipantId, final Uri iconUri, 55 final Uri selectedIconUri, final String displayName, final int displayColor, 56 final String displayDestination) { 57 this.selfParticipantId = selfParticipantId; 58 this.iconUri = iconUri; 59 this.selectedIconUri = selectedIconUri; 60 this.displayName = displayName; 61 this.displayColor = displayColor; 62 this.displayDestination = displayDestination; 63 } 64 fromSelfParticipantData( final ParticipantData selfParticipantData, final Context context)65 static SubscriptionListEntry fromSelfParticipantData( 66 final ParticipantData selfParticipantData, final Context context) { 67 Assert.isTrue(selfParticipantData.isSelf()); 68 Assert.isTrue(selfParticipantData.isActiveSubscription()); 69 final int slotId = selfParticipantData.getDisplaySlotId(); 70 final String iconIdentifier = String.format(Locale.getDefault(), "%d", slotId); 71 final String subscriptionName = selfParticipantData.getSubscriptionName(); 72 final String displayName = TextUtils.isEmpty(subscriptionName) ? 73 context.getString(R.string.sim_slot_identifier, slotId) : subscriptionName; 74 return new SubscriptionListEntry(selfParticipantData.getId(), 75 AvatarUriUtil.createAvatarUri(selfParticipantData, iconIdentifier, 76 false /* selected */, false /* incoming */), 77 AvatarUriUtil.createAvatarUri(selfParticipantData, iconIdentifier, 78 true /* selected */, false /* incoming */), 79 displayName, selfParticipantData.getSubscriptionColor(), 80 selfParticipantData.getDisplayDestination()); 81 } 82 } 83 84 private final List<SubscriptionListEntry> mEntriesExcludingDefault; 85 private SubscriptionListEntry mDefaultEntry; 86 private final Context mContext; 87 SubscriptionListData(final Context context)88 public SubscriptionListData(final Context context) { 89 mEntriesExcludingDefault = new ArrayList<SubscriptionListEntry>(); 90 mContext = context; 91 } 92 bind(final List<ParticipantData> subs)93 public void bind(final List<ParticipantData> subs) { 94 mEntriesExcludingDefault.clear(); 95 mDefaultEntry = null; 96 for (final ParticipantData sub : subs) { 97 final SubscriptionListEntry entry = 98 SubscriptionListEntry.fromSelfParticipantData(sub, mContext); 99 if (!sub.isDefaultSelf()) { 100 mEntriesExcludingDefault.add(entry); 101 } else { 102 mDefaultEntry = entry; 103 } 104 } 105 } 106 getActiveSubscriptionEntriesExcludingDefault()107 public List<SubscriptionListEntry> getActiveSubscriptionEntriesExcludingDefault() { 108 return mEntriesExcludingDefault; 109 } 110 getActiveSubscriptionEntryBySelfId(final String selfId, final boolean excludeDefault)111 public SubscriptionListEntry getActiveSubscriptionEntryBySelfId(final String selfId, 112 final boolean excludeDefault) { 113 if (mDefaultEntry != null && TextUtils.equals(mDefaultEntry.selfParticipantId, selfId)) { 114 return excludeDefault ? null : mDefaultEntry; 115 } 116 117 for (final SubscriptionListEntry entry : mEntriesExcludingDefault) { 118 if (TextUtils.equals(entry.selfParticipantId, selfId)) { 119 return entry; 120 } 121 } 122 return null; 123 } 124 hasData()125 public boolean hasData() { 126 return !mEntriesExcludingDefault.isEmpty() || mDefaultEntry != null; 127 } 128 } 129