1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.datamodel.data; 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.Context; 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.net.Uri; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.text.TextUtils; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.R; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Assert; 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.AvatarUriUtil; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.ArrayList; 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.List; 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.Locale; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * This is a UI facing data model component that holds a list of 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * {@link SubscriptionListData.SubscriptionListEntry}'s, one for each *active* subscriptions. 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * This is used to: 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 1) Show a list of SIMs in the SIM Selector 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 2) Show the currently selected SIM in the compose message view 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 3) Show SIM indicators on conversation message views 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * It builds on top of SelfParticipantsData and performs additional logic such as determining 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * the set of icons to use for the individual Subs. 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class SubscriptionListData { 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Represents a single sub that backs UI. 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static class SubscriptionListEntry { 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public final String selfParticipantId; 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public final Uri iconUri; 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public final Uri selectedIconUri; 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public final String displayName; 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public final int displayColor; 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public final String displayDestination; 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private SubscriptionListEntry(final String selfParticipantId, final Uri iconUri, 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Uri selectedIconUri, final String displayName, final int displayColor, 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String displayDestination) { 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this.selfParticipantId = selfParticipantId; 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this.iconUri = iconUri; 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this.selectedIconUri = selectedIconUri; 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this.displayName = displayName; 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this.displayColor = displayColor; 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this.displayDestination = displayDestination; 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static SubscriptionListEntry fromSelfParticipantData( 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ParticipantData selfParticipantData, final Context context) { 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Assert.isTrue(selfParticipantData.isSelf()); 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Assert.isTrue(selfParticipantData.isActiveSubscription()); 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int slotId = selfParticipantData.getDisplaySlotId(); 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String iconIdentifier = String.format(Locale.getDefault(), "%d", slotId); 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String subscriptionName = selfParticipantData.getSubscriptionName(); 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String displayName = TextUtils.isEmpty(subscriptionName) ? 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd context.getString(R.string.sim_slot_identifier, slotId) : subscriptionName; 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new SubscriptionListEntry(selfParticipantData.getId(), 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd AvatarUriUtil.createAvatarUri(selfParticipantData, iconIdentifier, 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd false /* selected */, false /* incoming */), 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd AvatarUriUtil.createAvatarUri(selfParticipantData, iconIdentifier, 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd true /* selected */, false /* incoming */), 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd displayName, selfParticipantData.getSubscriptionColor(), 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd selfParticipantData.getDisplayDestination()); 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final List<SubscriptionListEntry> mEntriesExcludingDefault; 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private SubscriptionListEntry mDefaultEntry; 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final Context mContext; 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public SubscriptionListData(final Context context) { 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mEntriesExcludingDefault = new ArrayList<SubscriptionListEntry>(); 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mContext = context; 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void bind(final List<ParticipantData> subs) { 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mEntriesExcludingDefault.clear(); 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDefaultEntry = null; 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final ParticipantData sub : subs) { 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final SubscriptionListEntry entry = 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd SubscriptionListEntry.fromSelfParticipantData(sub, mContext); 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!sub.isDefaultSelf()) { 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mEntriesExcludingDefault.add(entry); 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDefaultEntry = entry; 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public List<SubscriptionListEntry> getActiveSubscriptionEntriesExcludingDefault() { 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mEntriesExcludingDefault; 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public SubscriptionListEntry getActiveSubscriptionEntryBySelfId(final String selfId, 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final boolean excludeDefault) { 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (mDefaultEntry != null && TextUtils.equals(mDefaultEntry.selfParticipantId, selfId)) { 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return excludeDefault ? null : mDefaultEntry; 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final SubscriptionListEntry entry : mEntriesExcludingDefault) { 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (TextUtils.equals(entry.selfParticipantId, selfId)) { 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return entry; 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean hasData() { 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return !mEntriesExcludingDefault.isEmpty() || mDefaultEntry != null; 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 129