JoinContactActivity.java revision e8a9517483cfa0c4d521b834d872a8cb05482bad
1501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov/* 2e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov * Copyright (C) 2009 The Android Open Source Project 3501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * 4501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * you may not use this file except in compliance with the License. 6501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * You may obtain a copy of the License at 7501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * 8501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 9501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * 10501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 11501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 12501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * See the License for the specific language governing permissions and 14501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * limitations under the License. 15501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov */ 16501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 17501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikovpackage com.android.contacts; 18501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 196e2009d58fdcf098cab033729d4a3b2444c2181cDmitri Plotnikov 20e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport com.android.contacts.list.ContactEntryListFragment; 21e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport com.android.contacts.list.ContactsRequest; 2259fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikovimport com.android.contacts.list.JoinContactListFragment; 23e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport com.android.contacts.list.OnContactPickerActionListener; 24e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport com.android.contacts.ui.ContactsPreferencesActivity; 25807a0fe5e54980b1cd8e97590d5b465ca9d6dea5Dmitri Plotnikov 26e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.app.Activity; 27e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.app.FragmentTransaction; 28501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikovimport android.content.Intent; 29501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikovimport android.net.Uri; 30e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovimport android.os.Bundle; 31501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikovimport android.provider.ContactsContract; 32e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport android.provider.Settings; 33e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport android.provider.ContactsContract.Contacts; 34501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikovimport android.util.Log; 35e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport android.view.Menu; 36e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport android.view.MenuInflater; 37e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikovimport android.view.MenuItem; 38501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 39501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov/** 40501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * An activity that shows a list of contacts that can be joined with the target contact. 41501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov */ 42e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikovpublic class JoinContactActivity extends Activity { 43501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 44501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov private static final String TAG = "JoinContactActivity"; 45501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 46501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov /** 47501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * The action for the join contact activity. 48501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * <p> 49501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * Input: extra field {@link #EXTRA_TARGET_CONTACT_ID} is the aggregate ID. 50501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * TODO: move to {@link ContactsContract}. 51501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov */ 52501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov public static final String JOIN_CONTACT = "com.android.contacts.action.JOIN_CONTACT"; 53501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 54501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov /** 55501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * Used with {@link #JOIN_CONTACT} to give it the target for aggregation. 56501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * <p> 57501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov * Type: LONG 58501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov */ 59501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov public static final String EXTRA_TARGET_CONTACT_ID = "com.android.contacts.action.CONTACT_ID"; 60501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 61501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov private long mTargetContactId; 62501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 63e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov private JoinContactListFragment mListFragment; 64e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 65501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov @Override 66e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov protected void onCreate(Bundle savedInstanceState) { 67e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov super.onCreate(savedInstanceState); 68e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov 69e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov Intent intent = getIntent(); 70501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov mTargetContactId = intent.getLongExtra(EXTRA_TARGET_CONTACT_ID, -1); 71501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov if (mTargetContactId == -1) { 72501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov Log.e(TAG, "Intent " + intent.getAction() + " is missing required extra: " 73501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov + EXTRA_TARGET_CONTACT_ID); 74501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov setResult(RESULT_CANCELED); 75501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov finish(); 76e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov return; 77501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov } 7859fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikov 79e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov mListFragment = new JoinContactListFragment(); 80e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov mListFragment.setTargetContactId(mTargetContactId); 81e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov mListFragment.setOnContactPickerActionListener(new OnContactPickerActionListener() { 82e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void onPickContactAction(Uri contactUri) { 83e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov Intent intent = new Intent(null, contactUri); 84e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov setResult(RESULT_OK, intent); 85e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov finish(); 86501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov } 87501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 88e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void onSearchAllContactsAction(String string) { 89501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov } 90501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 91e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void onShortcutIntentCreated(Intent intent) { 92501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov } 93501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 94e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov public void onCreateNewContactAction() { 95e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov } 96e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov }); 97501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov 98e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov FragmentTransaction transaction = openFragmentTransaction(); 99e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov transaction.add(android.R.id.content, mListFragment); 100e4d32d92b10c1c1ce89c7a3ee4111a030e6afcf9Dmitri Plotnikov transaction.commit(); 101501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov } 102e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 103e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 104e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov public boolean onCreateOptionsMenu(Menu menu) { 105e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov MenuInflater inflater = getMenuInflater(); 106e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov inflater.inflate(R.menu.search, menu); 107e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov return true; 108e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 109e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 110e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 111e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov public boolean onOptionsItemSelected(MenuItem item) { 112e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov switch (item.getItemId()) { 113e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov case R.id.menu_search: { 114e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov onSearchRequested(); 115e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov return true; 116e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 117e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 118e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov return false; 119e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 120e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 121e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 122e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData, 123e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov boolean globalSearch) { 124e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov if (globalSearch) { 125e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch); 126e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } else { 127e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov mListFragment.startSearch(initialQuery); 128e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 129e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 130e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov 131e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov @Override 132e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov protected void onActivityResult(int requestCode, int resultCode, Intent data) { 133e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov if (requestCode == ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER 134e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov && resultCode == RESULT_OK) { 135e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov mListFragment.onPickerResult(data); 136e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 137e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov } 138501b7eac6f85c4100fbd1b00d7c7841fe6472e7cDmitri Plotnikov} 139