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

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2007-2008 Esmertec AG.
  3.  * Copyright (C) 2007-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 android.app.AlertDialog;
  19. import android.app.ListActivity;
  20. import android.content.ContentUris;
  21. import android.content.Context;
  22. import android.content.DialogInterface;
  23. import android.content.Intent;
  24. import android.content.res.Resources;
  25. import android.database.Cursor;
  26. import android.net.Uri;
  27. import android.os.Bundle;
  28. import android.os.RemoteException;
  29. import android.provider.Im;
  30. import android.util.Log;
  31. import android.view.View;
  32. import android.view.Window;
  33. import android.widget.ListAdapter;
  34. import android.widget.ListView;
  35. import android.widget.ResourceCursorAdapter;
  36. import com.android.im.IContactListManager;
  37. import com.android.im.IImConnection;
  38. import com.android.im.R;
  39. import com.android.im.plugin.BrandingResourceIDs;
  40. public class BlockedContactsActivity extends ListActivity {
  41.     ImApp mApp;
  42.     SimpleAlertHandler mHandler;
  43.     private static final String[] PROJECTION = {
  44.         Im.BlockedList._ID,
  45.         Im.BlockedList.ACCOUNT,
  46.         Im.BlockedList.PROVIDER,
  47.         Im.BlockedList.NICKNAME,
  48.         Im.BlockedList.USERNAME,
  49.         Im.BlockedList.AVATAR_DATA,
  50.     };
  51.     static final int ACCOUNT_COLUMN  = 1;
  52.     static final int PROVIDER_COLUMN = 2;
  53.     static final int NICKNAME_COLUMN = 3;
  54.     static final int USERNAME_COLUMN = 4;
  55.     static final int AVATAR_COLUMN = 5;
  56.     @Override
  57.     protected void onCreate(Bundle icicle) {
  58.         super.onCreate(icicle);
  59.         requestWindowFeature(Window.FEATURE_LEFT_ICON);
  60.         setContentView(R.layout.blocked_contacts_activity);
  61.         mHandler = new SimpleAlertHandler(this);
  62.         mApp = ImApp.getApplication(this);
  63.         mApp.startImServiceIfNeed();
  64.         if (!resolveIntent()) {
  65.             finish();
  66.             return;
  67.         }
  68.     }
  69.     @Override
  70.     protected void onListItemClick(ListView l, View v, int position, long id) {
  71.         Cursor c = (Cursor) l.getAdapter().getItem(position);
  72.         if (c == null) {
  73.             mHandler.showAlert(R.string.error, R.string.select_contact);
  74.             return;
  75.         }
  76.         long providerId = c.getLong(PROVIDER_COLUMN);
  77.         String username = c.getString(USERNAME_COLUMN);
  78.         String nickname = c.getString(NICKNAME_COLUMN);
  79.         mApp.callWhenServiceConnected(mHandler, new UnblockAction(providerId, username, nickname));
  80.     }
  81.     private boolean resolveIntent() {
  82.         Intent i = getIntent();
  83.         Uri uri = i.getData();
  84.         if (uri == null) {
  85.             warning("No data to show");
  86.             return false;
  87.         }
  88.         long accountId = ContentUris.parseId(uri);
  89.         Uri accountUri = ContentUris.withAppendedId(Im.Account.CONTENT_URI, accountId);
  90.         Cursor accountCursor = getContentResolver().query(accountUri, null, null, null, null);
  91.         if (accountCursor == null) {
  92.             warning("Bad account");
  93.             return false;
  94.         }
  95.         if (!accountCursor.moveToFirst()) {
  96.             warning("Bad account");
  97.             accountCursor.close();
  98.             return false;
  99.         }
  100.         long providerId = accountCursor.getLong(
  101.                 accountCursor.getColumnIndexOrThrow(Im.Account.PROVIDER));
  102.         String username = accountCursor.getString(
  103.                 accountCursor.getColumnIndexOrThrow(Im.Account.USERNAME));
  104.         BrandingResources brandingRes = mApp.getBrandingResource(providerId);
  105.         getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON,
  106.                 brandingRes.getDrawable(BrandingResourceIDs.DRAWABLE_LOGO));
  107.         setTitle(getResources().getString(R.string.blocked_list_title, username));
  108.         accountCursor.close();
  109.         Cursor c = managedQuery(uri, PROJECTION, null, Im.BlockedList.DEFAULT_SORT_ORDER);
  110.         if (c == null) {
  111.             warning("Database error when query " + uri);
  112.             return false;
  113.         }
  114.         ListAdapter adapter = new BlockedContactsAdapter(c, this);
  115.         setListAdapter(adapter);
  116.         return true;
  117.     }
  118.     private static void warning(String msg) {
  119.         Log.w(ImApp.LOG_TAG, "<BlockContactsActivity> " + msg);
  120.     }
  121.     private static class BlockedContactsAdapter extends ResourceCursorAdapter {
  122.         public BlockedContactsAdapter(Cursor c, Context context) {
  123.             super(context, R.layout.blocked_contact_view, c);
  124.         }
  125.         @Override
  126.         public void bindView(View view, Context context, Cursor cursor) {
  127.             if (view instanceof BlockedContactView) {
  128.                 ((BlockedContactView) view).bind(cursor);
  129.             }
  130.         }
  131.     }
  132.     private class UnblockAction implements Runnable {
  133.         private long mProviderId;
  134.         String mUserName;
  135.         private String mNickName;
  136.         public UnblockAction(long providerId, String userName, String nickName) {
  137.             mProviderId = providerId;
  138.             mUserName = userName;
  139.             mNickName = nickName;
  140.         }
  141.         public void run() {
  142.             final IImConnection conn = mApp.getConnection(mProviderId);
  143.             if (conn == null) {
  144.                 mHandler.showAlert(R.string.error, R.string.disconnected);
  145.                 return;
  146.             }
  147.             DialogInterface.OnClickListener confirmListener = new DialogInterface.OnClickListener(){
  148.                 public void onClick(DialogInterface dialog, int whichButton) {
  149.                     try {
  150.                         IContactListManager manager = conn.getContactListManager();
  151.                         manager.unBlockContact(mUserName);
  152.                     } catch (RemoteException e) {
  153.                         mHandler.showServiceErrorAlert();
  154.                     }
  155.                 }
  156.             };
  157.             Resources r = getResources();
  158.             new AlertDialog.Builder(BlockedContactsActivity.this)
  159.                 .setTitle(R.string.confirm)
  160.                 .setMessage(r.getString(R.string.confirm_unblock_contact, mNickName))
  161.                 .setPositiveButton(R.string.yes, confirmListener) // default button
  162.                 .setNegativeButton(R.string.no, null)
  163.                 .setCancelable(false)
  164.                 .show();
  165.         }
  166.     }
  167. }