Home | History | Annotate | Download | only in activities
      1 /*
      2  * Copyright (C) 2009 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.contacts.activities;
     18 
     19 
     20 import com.android.contacts.ContactsActivity;
     21 import com.android.contacts.R;
     22 import com.android.contacts.list.ContactEntryListFragment;
     23 import com.android.contacts.list.JoinContactListFragment;
     24 import com.android.contacts.list.OnContactPickerActionListener;
     25 
     26 import android.app.ActionBar;
     27 import android.app.Fragment;
     28 import android.content.Intent;
     29 import android.net.Uri;
     30 import android.os.Bundle;
     31 import android.provider.ContactsContract;
     32 import android.util.Log;
     33 import android.view.MenuItem;
     34 
     35 /**
     36  * An activity that shows a list of contacts that can be joined with the target contact.
     37  */
     38 public class JoinContactActivity extends ContactsActivity {
     39 
     40     private static final String TAG = "JoinContactActivity";
     41 
     42     /**
     43      * The action for the join contact activity.
     44      * <p>
     45      * Input: extra field {@link #EXTRA_TARGET_CONTACT_ID} is the aggregate ID.
     46      * TODO: move to {@link ContactsContract}.
     47      */
     48     public static final String JOIN_CONTACT = "com.android.contacts.action.JOIN_CONTACT";
     49 
     50     /**
     51      * Used with {@link #JOIN_CONTACT} to give it the target for aggregation.
     52      * <p>
     53      * Type: LONG
     54      */
     55     public static final String EXTRA_TARGET_CONTACT_ID = "com.android.contacts.action.CONTACT_ID";
     56 
     57     private static final String KEY_TARGET_CONTACT_ID = "targetContactId";
     58 
     59     private long mTargetContactId;
     60 
     61     private JoinContactListFragment mListFragment;
     62 
     63     @Override
     64     public void onAttachFragment(Fragment fragment) {
     65         if (fragment instanceof JoinContactListFragment) {
     66             mListFragment = (JoinContactListFragment) fragment;
     67             setupActionListener();
     68         }
     69     }
     70 
     71     @Override
     72     protected void onCreate(Bundle savedInstanceState) {
     73         super.onCreate(savedInstanceState);
     74 
     75         Intent intent = getIntent();
     76         mTargetContactId = intent.getLongExtra(EXTRA_TARGET_CONTACT_ID, -1);
     77         if (mTargetContactId == -1) {
     78             Log.e(TAG, "Intent " + intent.getAction() + " is missing required extra: "
     79                     + EXTRA_TARGET_CONTACT_ID);
     80             setResult(RESULT_CANCELED);
     81             finish();
     82             return;
     83         }
     84 
     85         setContentView(R.layout.join_contact_picker);
     86         setTitle(R.string.titleJoinContactDataWith);
     87 
     88         if (mListFragment == null) {
     89             mListFragment = new JoinContactListFragment();
     90 
     91             getFragmentManager().beginTransaction()
     92                     .replace(R.id.list_container, mListFragment)
     93                     .commitAllowingStateLoss();
     94         }
     95 
     96         final ActionBar actionBar = getActionBar();
     97         if (actionBar != null) {
     98             actionBar.setDisplayShowHomeEnabled(true);
     99             actionBar.setDisplayHomeAsUpEnabled(true);
    100             actionBar.setDisplayShowTitleEnabled(true);
    101         }
    102     }
    103 
    104     private void setupActionListener() {
    105         mListFragment.setTargetContactId(mTargetContactId);
    106         mListFragment.setOnContactPickerActionListener(new OnContactPickerActionListener() {
    107             @Override
    108             public void onPickContactAction(Uri contactUri) {
    109                 Intent intent = new Intent(null, contactUri);
    110                 setResult(RESULT_OK, intent);
    111                 finish();
    112             }
    113 
    114             @Override
    115             public void onShortcutIntentCreated(Intent intent) {
    116             }
    117 
    118             @Override
    119             public void onCreateNewContactAction() {
    120             }
    121 
    122             @Override
    123             public void onEditContactAction(Uri contactLookupUri) {
    124             }
    125         });
    126     }
    127 
    128     @Override
    129     public boolean onOptionsItemSelected(MenuItem item) {
    130         switch (item.getItemId()) {
    131             case android.R.id.home:
    132                 // Go back to previous screen, intending "cancel"
    133                 setResult(RESULT_CANCELED);
    134                 finish();
    135                 return true;
    136         }
    137         return super.onOptionsItemSelected(item);
    138     }
    139 
    140     @Override
    141     protected void onSaveInstanceState(Bundle outState) {
    142         super.onSaveInstanceState(outState);
    143         outState.putLong(KEY_TARGET_CONTACT_ID, mTargetContactId);
    144     }
    145 
    146     @Override
    147     protected void onRestoreInstanceState(Bundle savedInstanceState) {
    148         super.onRestoreInstanceState(savedInstanceState);
    149         mTargetContactId = savedInstanceState.getLong(KEY_TARGET_CONTACT_ID);
    150     }
    151 
    152     @Override
    153     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    154         if (requestCode == ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER
    155                 && resultCode == RESULT_OK) {
    156             mListFragment.onPickerResult(data);
    157         }
    158     }
    159 }
    160