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

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 android.widget.LinearLayout;
  19. import android.widget.ImageView;
  20. import android.widget.TextView;
  21. import android.content.Context;
  22. import android.content.ContentResolver;
  23. import android.content.res.Resources;
  24. import android.database.Cursor;
  25. import android.provider.Im;
  26. import android.view.View;
  27. import android.os.RemoteException;
  28. import com.android.im.engine.Presence;
  29. import com.android.im.plugin.BrandingResourceIDs;
  30. import com.android.im.IImConnection;
  31. import com.android.im.R;
  32. public class ProviderListItem extends LinearLayout {
  33.     private ImApp mApp;
  34.     private ChooseAccountActivity mActivity;
  35.     private ImageView mProviderIcon;
  36.     private ImageView mStatusIcon;
  37.     private TextView mLine1;
  38.     private TextView mLine2;
  39.     private TextView mChatView;
  40.     private int mProviderIdColumn;
  41.     private int mProviderNameColumn;
  42.     private int mProviderFullnameColumn;
  43.     private int mActiveAccountIdColumn;
  44.     private int mActiveAccountUserNameColumn;
  45.     public ProviderListItem(Context context, ChooseAccountActivity activity) {
  46.         super(context);
  47.         mActivity = activity;
  48.         mApp = ImApp.getApplication(activity);
  49.     }
  50.     public void init(Cursor c) {
  51.         mProviderIcon = (ImageView) findViewById(R.id.providerIcon);
  52.         mStatusIcon = (ImageView) findViewById(R.id.statusIcon);
  53.         mLine1 = (TextView) findViewById(R.id.line1);
  54.         mLine2 = (TextView) findViewById(R.id.line2);
  55.         mChatView = (TextView) findViewById(R.id.conversations);
  56.         mProviderIdColumn = c.getColumnIndexOrThrow(Im.Provider._ID);
  57.         mProviderNameColumn = c.getColumnIndexOrThrow(Im.Provider.NAME);
  58.         mProviderFullnameColumn = c.getColumnIndexOrThrow(Im.Provider.FULLNAME);
  59.         mActiveAccountIdColumn = c.getColumnIndexOrThrow(
  60.                 Im.Provider.ACTIVE_ACCOUNT_ID);
  61.         mActiveAccountUserNameColumn = c.getColumnIndexOrThrow(
  62.                 Im.Provider.ACTIVE_ACCOUNT_USERNAME);
  63.     }
  64.     public void bindView(Cursor cursor) {
  65.         Resources r = getResources();
  66.         ImageView providerIcon = mProviderIcon;
  67.         ImageView statusIcon = mStatusIcon;
  68.         TextView line1 = mLine1;
  69.         TextView line2 = mLine2;
  70.         TextView chatView = mChatView;
  71.         int providerId = cursor.getInt(mProviderIdColumn);
  72.         String providerDisplayName = cursor.getString(mProviderFullnameColumn);
  73.         BrandingResources brandingRes = mApp.getBrandingResource(providerId);
  74.         providerIcon.setImageDrawable(
  75.                 brandingRes.getDrawable(BrandingResourceIDs.DRAWABLE_LOGO));
  76.         if (!cursor.isNull(mActiveAccountIdColumn)) {
  77.             line1.setVisibility(View.VISIBLE);
  78.             line1.setText(r.getString(R.string.account_title, providerDisplayName));
  79.             line2.setText(cursor.getString(mActiveAccountUserNameColumn));
  80.             long accountId = cursor.getLong(mActiveAccountIdColumn);
  81.             if (mActivity.isSigningIn(accountId)) {
  82.                 statusIcon.setVisibility(View.GONE);
  83.                 chatView.setVisibility(View.VISIBLE);
  84.                 chatView.setText(R.string.signing_in_wait);
  85.             } else if (mActivity.isSignedIn(accountId)) {
  86.                 int presenceIconId = getPresenceIconId(accountId);
  87.                 statusIcon.setImageDrawable(
  88.                         brandingRes.getDrawable(presenceIconId));
  89.                 statusIcon.setVisibility(View.VISIBLE);
  90.                 ContentResolver cr = mActivity.getContentResolver();
  91.                 int count = getConversationCount(cr, accountId);
  92.                 if (count > 0) {
  93.                     chatView.setVisibility(View.VISIBLE);
  94.                     if (count == 1) {
  95.                         chatView.setText(R.string.one_conversation);
  96.                     } else {
  97.                         chatView.setText(r.getString(R.string.conversations, count));
  98.                     }
  99.                 } else {
  100.                     chatView.setVisibility(View.GONE);
  101.                 }
  102.             } else {
  103.                 statusIcon.setVisibility(View.GONE);
  104.                 chatView.setVisibility(View.GONE);
  105.             }
  106.         } else {
  107.             // No active account, show add account
  108.             line1.setVisibility(View.GONE);
  109.             statusIcon.setVisibility(View.GONE);
  110.             chatView.setVisibility(View.GONE);
  111.             line2.setText(providerDisplayName);
  112.         }
  113.     }
  114.     private int getConversationCount(ContentResolver cr, long accountId) {
  115.         try {
  116.             IImConnection conn = mApp.getConnectionByAccount(accountId);
  117.             return (conn == null) ? 0 : conn.getChatSessionCount();
  118.         } catch (RemoteException e) {
  119.             return 0;
  120.         }
  121.     }
  122.     private int getPresenceIconId(long accountId) {
  123.         try {
  124.             IImConnection conn = mApp.getConnectionByAccount(accountId);
  125.             if (conn != null) {
  126.                 Presence p = conn.getUserPresence();
  127.                 if (p != null) {
  128.                     int status = PresenceUtils.convertStatus(p.getStatus());
  129.                     return PresenceUtils.getStatusIconId(status);
  130.                 }
  131.             }
  132.             return BrandingResourceIDs.DRAWABLE_PRESENCE_OFFLINE;
  133.         } catch (RemoteException e) {
  134.             return BrandingResourceIDs.DRAWABLE_PRESENCE_INVISIBLE;
  135.         }
  136.     }
  137. }