📄 chooseaccountactivity.java
字号:
/* * Copyright (C) 2008 Esmertec AG. * Copyright (C) 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 android.app.ListActivity;import android.content.ContentUris;import android.content.Context;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.util.AttributeSet;import android.view.ContextMenu;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.view.LayoutInflater;import android.view.ContextMenu.ContextMenuInfo;import android.widget.AdapterView;import android.widget.ListView;import android.widget.CursorAdapter;import com.android.im.IImConnection;import com.android.im.R;import com.android.im.engine.ImConnection;import com.android.im.plugin.BrandingResourceIDs;import com.android.im.service.ImServiceConstants;public class ChooseAccountActivity extends ListActivity implements View.OnCreateContextMenuListener { private static final int ID_SIGN_IN = Menu.FIRST + 1; private static final int ID_SIGN_OUT = Menu.FIRST + 2; private static final int ID_EDIT_ACCOUNT = Menu.FIRST + 3; private static final int ID_REMOVE_ACCOUNT = Menu.FIRST + 4; private static final int ID_SIGN_OUT_ALL = Menu.FIRST + 5; private static final int ID_ADD_ACCOUNT = Menu.FIRST + 6; private static final int ID_VIEW_CONTACT_LIST = Menu.FIRST + 7; private static final int ID_SETTINGS = Menu.FIRST + 8; ImApp mApp; MyHandler mHandler; private ProviderAdapter mAdapter; private Cursor mProviderCursor; private static final String[] PROVIDER_PROJECTION = { Im.Provider._ID, Im.Provider.NAME, Im.Provider.FULLNAME, Im.Provider.ACTIVE_ACCOUNT_ID, Im.Provider.ACTIVE_ACCOUNT_USERNAME, Im.Provider.ACTIVE_ACCOUNT_PW, }; static final int PROVIDER_ID_COLUMN = 0; static final int PROVIDER_NAME_COLUMN = 1; static final int PROVIDER_FULLNAME_COLUMN = 2; static final int ACTIVE_ACCOUNT_ID_COLUMN = 3; static final int ACTIVE_ACCOUNT_USERNAME_COLUMN = 4; static final int ACTIVE_ACCOUNT_PW_COLUMN = 5; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setTitle(R.string.choose_account_title); mApp = ImApp.getApplication(this); mHandler = new MyHandler(); mApp.registerForBroadcastEvent(ImApp.EVENT_SERVICE_CONNECTED, mHandler); mApp.registerForConnEvents(mHandler); mApp.startImServiceIfNeed(); // (for open source) for now exclude GTalk on the landing page until we can load // it in an abstract way String selection = "providers.name != ?"; String[] selectionArgs = new String[] { Im.ProviderNames.GTALK }; mProviderCursor = managedQuery(Im.Provider.CONTENT_URI_WITH_ACCOUNT, PROVIDER_PROJECTION, selection, selectionArgs, Im.Provider.DEFAULT_SORT_ORDER); mAdapter = new ProviderAdapter(this, mProviderCursor); mApp.callWhenServiceConnected(mHandler, new Runnable() { public void run() { setListAdapter(mAdapter); } }); registerForContextMenu(getListView()); } private boolean allAccountsSignedOut() { if (!mProviderCursor.moveToFirst()) return true; do { long accountId = mProviderCursor.getLong(ACTIVE_ACCOUNT_ID_COLUMN); if (isSignedIn(accountId)) return false; } while (mProviderCursor.moveToNext()) ; return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); menu.findItem(ID_SIGN_OUT_ALL).setVisible(!allAccountsSignedOut()); return true; } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, ID_SIGN_OUT_ALL, 0, R.string.menu_sign_out_all) .setIcon(android.R.drawable.ic_menu_close_clear_cancel); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case ID_SIGN_OUT_ALL: // Sign out MSN/AIM/YAHOO account if (mApp.serviceConnected()) { for (IImConnection conn : mApp.getActiveConnections()) { try { conn.logout(); } catch (RemoteException e) { } } } return true; } return super.onOptionsItemSelected(item); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) { Log.e(ImApp.LOG_TAG, "bad menuInfo", e); return; } Cursor providerCursor = (Cursor) getListAdapter().getItem(info.position); menu.setHeaderTitle(providerCursor.getString(PROVIDER_FULLNAME_COLUMN)); if (providerCursor.isNull(ACTIVE_ACCOUNT_ID_COLUMN)) { menu.add(0, ID_ADD_ACCOUNT, 0, R.string.menu_add_account); return; } long providerId = providerCursor.getLong(PROVIDER_ID_COLUMN); long accountId = providerCursor.getLong(ACTIVE_ACCOUNT_ID_COLUMN); boolean isLoggingIn = isSigningIn(accountId); boolean isLoggedIn = isSignedIn(accountId); if (!isLoggedIn) { menu.add(0, ID_SIGN_IN, 0, R.string.sign_in) .setIcon(R.drawable.ic_menu_login); } else { BrandingResources brandingRes = mApp.getBrandingResource(providerId); menu.add(0, ID_VIEW_CONTACT_LIST, 0, brandingRes.getString(BrandingResourceIDs.STRING_MENU_CONTACT_LIST)); menu.add(0, ID_SIGN_OUT, 0, R.string.menu_sign_out) .setIcon(android.R.drawable.ic_menu_close_clear_cancel); } if (!isLoggingIn && !isLoggedIn) { menu.add(0, ID_EDIT_ACCOUNT, 0, R.string.menu_edit_account) .setIcon(android.R.drawable.ic_menu_edit); menu.add(0, ID_REMOVE_ACCOUNT, 0, R.string.menu_remove_account) .setIcon(android.R.drawable.ic_menu_delete); } // always add a settings menu item menu.add(0, ID_SETTINGS, 0, R.string.menu_settings); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); } catch (ClassCastException e) { Log.e(ImApp.LOG_TAG, "bad menuInfo", e); return false; } int position = info.position; long providerId = info.id; switch (item.getItemId()) { case ID_EDIT_ACCOUNT: { Cursor c = (Cursor)mAdapter.getItem(position); if (c != null) { Intent i = new Intent(ChooseAccountActivity.this, AccountActivity.class); i.setAction(Intent.ACTION_EDIT); i.setData(ContentUris.withAppendedId(Im.Account.CONTENT_URI, c.getLong(ACTIVE_ACCOUNT_ID_COLUMN))); c.close(); startActivity(i); } return true;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -