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