AddContactActivity.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:9k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2008 Esmertec AG.
  3.  * Copyright (C) 2008 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.app;
  18. import static android.provider.Contacts.ContactMethods.CONTENT_EMAIL_URI;
  19. import android.app.Activity;
  20. import android.content.ContentResolver;
  21. import android.content.Context;
  22. import android.content.Intent;
  23. import android.database.Cursor;
  24. import android.database.DatabaseUtils;
  25. import android.os.Bundle;
  26. import android.os.IBinder;
  27. import android.os.RemoteException;
  28. import android.provider.Im;
  29. import android.provider.Contacts.ContactMethods;
  30. import android.text.Editable;
  31. import android.text.TextUtils;
  32. import android.text.TextWatcher;
  33. import android.text.util.Rfc822Token;
  34. import android.text.util.Rfc822Tokenizer;
  35. import android.util.Log;
  36. import android.view.View;
  37. import android.widget.Button;
  38. import android.widget.MultiAutoCompleteTextView;
  39. import android.widget.ResourceCursorAdapter;
  40. import android.widget.TextView;
  41. import com.android.im.IContactList;
  42. import com.android.im.IContactListManager;
  43. import com.android.im.IImConnection;
  44. import com.android.im.R;
  45. import com.android.im.engine.ImErrorInfo;
  46. import com.android.im.plugin.BrandingResourceIDs;
  47. import com.android.im.plugin.ImpsConfigNames;
  48. import com.android.im.service.ImServiceConstants;
  49. import java.util.List;
  50. public class AddContactActivity extends Activity {
  51.     private MultiAutoCompleteTextView mAddressList;
  52.     Button mInviteButton;
  53.     ImApp mApp;
  54.     SimpleAlertHandler mHandler;
  55.     private long mProviderId;
  56.     private String mListName;
  57.     private String mDefaultDomain;
  58.     @Override
  59.     protected void onCreate(Bundle savedInstanceState) {
  60.         super.onCreate(savedInstanceState);
  61.         mApp = ImApp.getApplication(this);
  62.         mHandler = new SimpleAlertHandler(this);
  63.         resolveIntent(getIntent());
  64.         setContentView(R.layout.add_contact_activity);
  65.         BrandingResources brandingRes = mApp.getBrandingResource(mProviderId);
  66.         setTitle(brandingRes.getString(BrandingResourceIDs.STRING_ADD_CONTACT_TITLE));
  67.         TextView label = (TextView) findViewById(R.id.input_contact_label);
  68.         label.setText(brandingRes.getString(BrandingResourceIDs.STRING_LABEL_INPUT_CONTACT));
  69.         mAddressList = (MultiAutoCompleteTextView) findViewById(R.id.email);
  70.         mAddressList.setAdapter(new EmailAddressAdapter(this));
  71.         mAddressList.setTokenizer(new Rfc822Tokenizer());
  72.         mAddressList.addTextChangedListener(mTextWatcher);
  73.         mInviteButton = (Button) findViewById(R.id.invite);
  74.         mInviteButton.setText(brandingRes.getString(BrandingResourceIDs.STRING_BUTTON_ADD_CONTACT));
  75.         mInviteButton.setOnClickListener(mButtonHandler);
  76.         mInviteButton.setEnabled(false);
  77.     }
  78.     private void resolveIntent(Intent intent) {
  79.         mProviderId = intent.getLongExtra(ImServiceConstants.EXTRA_INTENT_PROVIDER_ID, -1);
  80.         mListName = intent.getStringExtra(ImServiceConstants.EXTRA_INTENT_LIST_NAME);
  81.         mDefaultDomain = Im.ProviderSettings.getStringValue(getContentResolver(),
  82.                 mProviderId, ImpsConfigNames.DEFAULT_DOMAIN);
  83.     }
  84.     void inviteBuddies() {
  85.         Rfc822Token[] recipients = Rfc822Tokenizer.tokenize(mAddressList.getText());
  86.         try {
  87.             IImConnection conn = mApp.getConnection(mProviderId);
  88.             IContactList list = getContactList(conn);
  89.             if (list == null) {
  90.                 Log.e(ImApp.LOG_TAG, "<AddContactActivity> can't find given contact list:" + mListName);
  91.                 finish();
  92.             } else {
  93.                 boolean fail = false;
  94.                 for (Rfc822Token recipient : recipients) {
  95.                     String username = recipient.getAddress();
  96.                     if (mDefaultDomain != null && username.indexOf('@') == -1) {
  97.                         username = username + "@" + mDefaultDomain;
  98.                     }
  99.                     if (Log.isLoggable(ImApp.LOG_TAG, Log.DEBUG)){
  100.                         log("addContact:" + username);
  101.                     }
  102.                     int res = list.addContact(username);
  103.                     if (res != ImErrorInfo.NO_ERROR) {
  104.                         fail = true;
  105.                         mHandler.showAlert(R.string.error,
  106.                                 ErrorResUtils.getErrorRes(getResources(), res, username));
  107.                     }
  108.                 }
  109.                 // close the screen if there's no error.
  110.                 if (!fail) {
  111.                     finish();
  112.                 }
  113.             }
  114.         } catch (RemoteException ex) {
  115.             Log.e(ImApp.LOG_TAG, "<AddContactActivity> inviteBuddies: caught " + ex);
  116.         }
  117.     }
  118.     private IContactList getContactList(IImConnection conn) {
  119.         if (conn == null) {
  120.             return null;
  121.         }
  122.         try {
  123.             IContactListManager contactListMgr = conn.getContactListManager();
  124.             if (!TextUtils.isEmpty(mListName)) {
  125.                 return contactListMgr.getContactList(mListName);
  126.             } else {
  127.                 // Use the default list
  128.                 List<IBinder> lists = contactListMgr.getContactLists();
  129.                 for (IBinder binder : lists) {
  130.                     IContactList list = IContactList.Stub.asInterface(binder);
  131.                     if (list.isDefault()) {
  132.                         return list;
  133.                     }
  134.                 }
  135.                 // No default list, use the first one as default list
  136.                 if (!lists.isEmpty()) {
  137.                     return IContactList.Stub.asInterface(lists.get(0));
  138.                 }
  139.                 return null;
  140.             }
  141.         } catch (RemoteException e) {
  142.             // If the service has died, there is no list for now.
  143.             return null;
  144.         }
  145.     }
  146.     private View.OnClickListener mButtonHandler = new View.OnClickListener() {
  147.         public void onClick(View v) {
  148.             mApp.callWhenServiceConnected(mHandler, new Runnable() {
  149.                 public void run() {
  150.                     inviteBuddies();
  151.                 }
  152.             });
  153.         }
  154.     };
  155.     private TextWatcher mTextWatcher = new TextWatcher() {
  156.         public void afterTextChanged(Editable s) {
  157.             mInviteButton.setEnabled(s.length() != 0);
  158.         }
  159.         public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  160.             // noop
  161.         }
  162.         public void onTextChanged(CharSequence s, int start, int before, int count) {
  163.             // noop
  164.         }
  165.     };
  166.     private static void log(String msg) {
  167.         Log.d(ImApp.LOG_TAG, "<AddContactActivity> " + msg);
  168.     }
  169.     static class EmailAddressAdapter extends ResourceCursorAdapter {
  170.         public static final int DATA_INDEX = 1;
  171.         private static final String SORT_ORDER = "people.name, contact_methods.data";
  172.         private ContentResolver mContentResolver;
  173.         private static final String[] PROJECTION = {
  174.             ContactMethods._ID,     // 0
  175.             ContactMethods.DATA     // 1
  176.         };
  177.         public EmailAddressAdapter(Context context) {
  178.             super(context, android.R.layout.simple_dropdown_item_1line, null);
  179.             mContentResolver = context.getContentResolver();
  180.         }
  181.         @Override
  182.         public final String convertToString(Cursor cursor) {
  183.             return cursor.getString(DATA_INDEX);
  184.         }
  185.         @Override
  186.         public final void bindView(View view, Context context, Cursor cursor) {
  187.             ((TextView) view).setText(cursor.getString(DATA_INDEX));
  188.         }
  189.         @Override
  190.         public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
  191.             String where = null;
  192.             if (constraint != null) {
  193.                 String filter = DatabaseUtils.sqlEscapeString(constraint.toString() + '%');
  194.                 StringBuilder s = new StringBuilder();
  195.                 s.append("(people.name LIKE ");
  196.                 s.append(filter);
  197.                 s.append(") OR (contact_methods.data LIKE ");
  198.                 s.append(filter);
  199.                 s.append(")");
  200.                 where = s.toString();
  201.             }
  202.             return mContentResolver.query(CONTENT_EMAIL_URI, PROJECTION, where, null, SORT_ORDER);
  203.         }
  204.     }
  205. }