1 /* 2 * Copyright (C) 2012 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.mms.ui; 18 19 import android.app.ActionBar; 20 import android.app.ListActivity; 21 import android.content.Context; 22 import android.content.Intent; 23 import android.graphics.drawable.Drawable; 24 import android.os.Bundle; 25 import android.provider.ContactsContract.Profile; 26 import android.text.TextUtils; 27 import android.util.Log; 28 import android.view.ContextMenu; 29 import android.view.ContextMenu.ContextMenuInfo; 30 import android.view.LayoutInflater; 31 import android.view.Menu; 32 import android.view.MenuItem; 33 import android.view.View; 34 import android.view.ViewGroup; 35 import android.widget.ArrayAdapter; 36 import android.widget.ListView; 37 import android.widget.QuickContactBadge; 38 import android.widget.TextView; 39 40 import com.android.mms.R; 41 import com.android.mms.data.Contact; 42 import com.android.mms.data.ContactList; 43 import com.android.mms.data.Conversation; 44 45 /** 46 * Display a list of recipients for a group conversation. This activity expects to receive a 47 * threadId in the intent's extras. 48 */ 49 public class RecipientListActivity extends ListActivity { 50 private final static String TAG = "RecipientListActivity"; 51 52 private long mThreadId; 53 54 @Override 55 protected void onCreate(Bundle icicle) { 56 super.onCreate(icicle); 57 58 if (icicle != null) { 59 // Retrieve previously saved state of this activity. 60 mThreadId = icicle.getLong(ComposeMessageActivity.THREAD_ID); 61 } else { 62 mThreadId = getIntent().getLongExtra(ComposeMessageActivity.THREAD_ID, 0); 63 } 64 if (mThreadId == 0) { 65 Log.w(TAG, "No thread_id specified in extras or icicle. Finishing..."); 66 finish(); 67 return; 68 } 69 70 Conversation conv = Conversation.get(this, mThreadId, true); 71 if (conv == null) { 72 Log.w(TAG, "No conversation found for threadId: " + mThreadId + ". Finishing..."); 73 finish(); 74 return; 75 } 76 final ContactList contacts = conv.getRecipients(); 77 getListView().setAdapter(new RecipientListAdapter(this, R.layout.recipient_list_item, 78 contacts)); 79 80 ActionBar actionBar = getActionBar(); 81 actionBar.setDisplayHomeAsUpEnabled(true); 82 int cnt = contacts.size(); 83 actionBar.setSubtitle(getResources().getQuantityString(R.plurals.recipient_count, 84 cnt, cnt)); 85 } 86 87 @Override 88 protected void onSaveInstanceState(Bundle outState) { 89 outState.putLong(ComposeMessageActivity.THREAD_ID, mThreadId); 90 super.onSaveInstanceState(outState); 91 } 92 93 @Override 94 public boolean onOptionsItemSelected(MenuItem item) { 95 switch (item.getItemId()) { 96 case android.R.id.home: 97 finish(); 98 break; 99 case R.id.action_settings: 100 Intent intent = new Intent(this, MessagingPreferenceActivity.class); 101 startActivity(intent); 102 break; 103 } 104 return true; 105 } 106 107 @Override 108 public boolean onCreateOptionsMenu(Menu menu) { 109 getMenuInflater().inflate(R.menu.recipient_list_menu, menu); 110 return true; 111 } 112 113 private static class RecipientListAdapter extends ArrayAdapter<Contact> { 114 private final int mResourceId; 115 private final LayoutInflater mInflater; 116 private final Drawable mDefaultContactImage; 117 118 public RecipientListAdapter(Context context, int resource, 119 ContactList recipients) { 120 super(context, resource, recipients); 121 122 mResourceId = resource; 123 mInflater = LayoutInflater.from(context); 124 mDefaultContactImage = 125 context.getResources().getDrawable(R.drawable.ic_contact_picture); 126 } 127 128 @Override 129 public View getView(int position, View convertView, ViewGroup parent) { 130 final View listItemView = mInflater.inflate(mResourceId, null); 131 132 final TextView nameView = (TextView)listItemView.findViewById(R.id.name); 133 final TextView numberView = (TextView)listItemView.findViewById(R.id.number); 134 135 final Contact contact = getItem(position); 136 final String name = contact.getName(); 137 final String number = contact.getNumber(); 138 if (!name.equals(number)) { 139 nameView.setText(name); 140 numberView.setText(number); 141 } else { 142 nameView.setText(number); 143 numberView.setText(null); 144 } 145 146 QuickContactBadge badge = (QuickContactBadge)listItemView.findViewById(R.id.avatar); 147 if (contact.existsInDatabase()) { 148 badge.assignContactUri(contact.getUri()); 149 } else { 150 badge.assignContactFromPhone(contact.getNumber(), true); 151 } 152 final Drawable avatarDrawable = contact.getAvatar(getContext(), mDefaultContactImage); 153 badge.setImageDrawable(avatarDrawable); 154 155 return listItemView; 156 } 157 } 158 } 159