📄 contactlistactivity.java
字号:
/* * Copyright (C) 2007-2008 Esmertec AG. * Copyright (C) 2007-2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.android.im.app;import com.android.im.IImConnection;import com.android.im.R;import com.android.im.plugin.BrandingResourceIDs;import com.android.im.service.ImServiceConstants;import android.app.Activity;import android.content.ContentResolver;import android.content.ContentUris;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Message;import android.os.RemoteException;import android.provider.Im;import android.util.Log;import android.view.ContextMenu;import android.view.KeyEvent;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.view.Window;import android.view.ContextMenu.ContextMenuInfo;import android.widget.AdapterView;import android.widget.AdapterView.AdapterContextMenuInfo;import android.widget.ExpandableListView.ExpandableListContextMenuInfo;import java.util.Observable;import java.util.Observer;public class ContactListActivity extends Activity implements View.OnCreateContextMenuListener{ private static final int MENU_START_CONVERSATION = Menu.FIRST; private static final int MENU_VIEW_PROFILE = Menu.FIRST + 1; private static final int MENU_BLOCK_CONTACT = Menu.FIRST + 2; private static final int MENU_DELETE_CONTACT = Menu.FIRST + 3; private static final int MENU_END_CONVERSATION = Menu.FIRST + 4; private static final String FILTER_STATE_KEY = "Filtering"; ImApp mApp; long mProviderId; long mAccountId; IImConnection mConn; ContactListView mContactListView; ContactListFilterView mFilterView; SimpleAlertHandler mHandler; ContextMenuHandler mContextMenuHandler; boolean mIsFiltering; Im.ProviderSettings.QueryMap mSettingMap; boolean mDestroyed; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); getWindow().requestFeature(Window.FEATURE_LEFT_ICON); LayoutInflater inflate = getLayoutInflater(); mContactListView = (ContactListView) inflate.inflate( R.layout.contact_list_view, null); setContentView(mContactListView); Intent intent = getIntent(); mAccountId = intent.getLongExtra(ImServiceConstants.EXTRA_INTENT_ACCOUNT_ID, -1); if (mAccountId == -1) { finish(); return; } mApp = ImApp.getApplication(this); ContentResolver cr = getContentResolver(); Cursor c = cr.query(ContentUris.withAppendedId(Im.Account.CONTENT_URI, mAccountId), null, null, null, null); if (c == null) { finish(); return; } if (!c.moveToFirst()) { c.close(); finish(); return; } mProviderId = c.getLong(c.getColumnIndexOrThrow(Im.Account.PROVIDER)); mHandler = new MyHandler(this); String username = c.getString(c.getColumnIndexOrThrow(Im.Account.USERNAME)); BrandingResources brandingRes = mApp.getBrandingResource(mProviderId); setTitle(brandingRes.getString(BrandingResourceIDs.STRING_BUDDY_LIST_TITLE, username)); getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, brandingRes.getDrawable(BrandingResourceIDs.DRAWABLE_LOGO)); mSettingMap = new Im.ProviderSettings.QueryMap(getContentResolver(), mProviderId, true, null); mApp.callWhenServiceConnected(mHandler, new Runnable(){ public void run() { if (!mDestroyed) { mApp.dismissNotifications(mProviderId); mConn = mApp.getConnection(mProviderId); mContactListView.setConnection(mConn); mContactListView.setHideOfflineContacts(mSettingMap.getHideOfflineContacts()); } } }); mContextMenuHandler = new ContextMenuHandler(); mContactListView.getListView().setOnCreateContextMenuListener(this); mSettingMap.addObserver(new Observer() { public void update(Observable observed, Object updateData) { if (!mDestroyed) { mContactListView.setHideOfflineContacts(mSettingMap.getHideOfflineContacts()); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.contact_list_menu, menu); BrandingResources brandingRes = mApp.getBrandingResource(mProviderId); menu.findItem(R.id.menu_invite_user).setTitle( brandingRes.getString(BrandingResourceIDs.STRING_MENU_ADD_CONTACT)); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_invite_user: Intent i = new Intent(ContactListActivity.this, AddContactActivity.class); i.putExtra(ImServiceConstants.EXTRA_INTENT_PROVIDER_ID, mProviderId); i.putExtra(ImServiceConstants.EXTRA_INTENT_LIST_NAME, mContactListView.getSelectedContactList()); startActivity(i); return true; case R.id.menu_blocked_contacts: Uri.Builder builder = Im.BlockedList.CONTENT_URI.buildUpon(); ContentUris.appendId(builder, mProviderId); ContentUris.appendId(builder, mAccountId); startActivity(new Intent(Intent.ACTION_VIEW, builder.build())); return true; case R.id.menu_view_accounts: Intent intent = new Intent(this, ChooseAccountActivity.class); startActivity(intent); finish(); return true; case R.id.menu_settings: intent = new Intent(this, SettingActivity.class); intent.putExtra(ImServiceConstants.EXTRA_INTENT_PROVIDER_ID, mProviderId); startActivity(intent); return true; case R.id.menu_sign_out: try { mConn.logout(); } catch (RemoteException e) { } return true; } return super.onOptionsItemSelected(item); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(FILTER_STATE_KEY, mIsFiltering); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { boolean isFiltering = savedInstanceState.getBoolean(FILTER_STATE_KEY); if (isFiltering) { showFilterView(); } super.onRestoreInstanceState(savedInstanceState); } @Override public boolean dispatchKeyEvent(KeyEvent event) { int keyCode = event.getKeyCode(); boolean handled = false; if (mIsFiltering) { handled = mFilterView.dispatchKeyEvent(event); if (!handled && (KeyEvent.KEYCODE_BACK == keyCode) && (KeyEvent.ACTION_DOWN == event.getAction())) { showContactListView(); handled = true; } } else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -