📄 accountactivity.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 com.android.im.R;import com.android.im.plugin.BrandingResourceIDs;import android.app.Activity;import android.app.AlertDialog;import android.content.ContentResolver;import android.content.ContentUris;import android.content.ContentValues;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.graphics.drawable.Drawable;import android.net.Uri;import android.os.Bundle;import android.provider.Im;import android.text.Editable;import android.text.SpannableStringBuilder;import android.text.Spanned;import android.text.SpannableString;import android.text.TextUtils;import android.text.TextWatcher;import android.text.method.LinkMovementMethod;import android.text.style.URLSpan;import android.text.util.Linkify;import android.util.Log;import android.view.View;import android.view.Window;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import android.widget.CompoundButton.OnCheckedChangeListener;public class AccountActivity extends Activity { private static final String ACCOUNT_URI_KEY = "accountUri"; static final int REQUEST_SIGN_IN = RESULT_FIRST_USER + 1; private static final String[] ACCOUNT_PROJECTION = { Im.Account._ID, Im.Account.PROVIDER, Im.Account.USERNAME, Im.Account.PASSWORD, Im.Account.KEEP_SIGNED_IN, }; private static final int ACCOUNT_PROVIDER_COLUMN = 1; private static final int ACCOUNT_USERNAME_COLUMN = 2; private static final int ACCOUNT_PASSWORD_COLUMN = 3; private static final int ACCOUNT_KEEP_SIGNED_IN_COLUMN = 4; Uri mAccountUri; EditText mEditName; EditText mEditPass; CheckBox mRememberPass; CheckBox mKeepSignIn; Button mBtnSignIn; String mToAddress; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); getWindow().requestFeature(Window.FEATURE_LEFT_ICON); setContentView(R.layout.account_activity); mEditName = (EditText)findViewById(R.id.edtName); mEditPass = (EditText)findViewById(R.id.edtPass); mRememberPass = (CheckBox)findViewById(R.id.rememberPassword); mKeepSignIn = (CheckBox)findViewById(R.id.keepSignIn); mBtnSignIn = (Button)findViewById(R.id.btnSignIn); mRememberPass.setOnCheckedChangeListener(new OnCheckedChangeListener(){ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { updateWidgetState(); } }); ImApp app = ImApp.getApplication(this); Intent i = getIntent(); String action = i.getAction(); mToAddress = i.getStringExtra(ImApp.EXTRA_INTENT_SEND_TO_USER); final String origUserName; final long providerId; final ProviderDef provider; if(Intent.ACTION_INSERT.equals(action)) { origUserName = ""; providerId = ContentUris.parseId(i.getData()); provider = app.getProvider(providerId); setTitle(getResources().getString(R.string.add_account, provider.mFullName)); } else if(Intent.ACTION_EDIT.equals(action)) { ContentResolver cr = getContentResolver(); Uri uri = i.getData(); if ((uri == null) || !Im.Account.CONTENT_ITEM_TYPE.equals(cr.getType(uri))) { Log.w(ImApp.LOG_TAG, "<AccountActivity>Bad data"); return; } Cursor cursor = cr.query(uri, ACCOUNT_PROJECTION, null, null, null); if (cursor == null) { finish(); return; } if (!cursor.moveToFirst()) { cursor.close(); finish(); return; } setTitle(R.string.sign_in); providerId = cursor.getLong(ACCOUNT_PROVIDER_COLUMN); provider = app.getProvider(providerId); origUserName = cursor.getString(ACCOUNT_USERNAME_COLUMN); mEditName.setText(origUserName); mEditPass.setText(cursor.getString(ACCOUNT_PASSWORD_COLUMN)); mRememberPass.setChecked(!cursor.isNull(ACCOUNT_PASSWORD_COLUMN)); boolean keepSignIn = cursor.getInt(ACCOUNT_KEEP_SIGNED_IN_COLUMN) == 1; mKeepSignIn.setChecked(keepSignIn); cursor.close(); } else { Log.w(ImApp.LOG_TAG, "<AccountActivity> unknown intent action " + action); finish(); return; } final BrandingResources brandingRes = app.getBrandingResource(providerId); mKeepSignIn.setOnClickListener(new OnClickListener() { public void onClick(View v) { CheckBox keepSignIn = (CheckBox) v; if ( keepSignIn.isChecked() ) { String msg = brandingRes.getString(BrandingResourceIDs.STRING_TOAST_CHECK_AUTO_SIGN_IN); Toast.makeText(AccountActivity.this, msg, Toast.LENGTH_LONG).show(); } } }); mRememberPass.setOnClickListener(new OnClickListener() { public void onClick(View v) { CheckBox keepSignIn = (CheckBox) v; if ( keepSignIn.isChecked() ) { String msg = brandingRes.getString(BrandingResourceIDs.STRING_TOAST_CHECK_SAVE_PASSWORD); Toast.makeText(AccountActivity.this, msg, Toast.LENGTH_LONG).show(); } } }); Drawable logo = brandingRes.getDrawable(BrandingResourceIDs.DRAWABLE_LOGO); getWindow().setFeatureDrawable(Window.FEATURE_LEFT_ICON, logo); TextView labelUsername = (TextView)findViewById(R.id.label_username); labelUsername.setText(brandingRes.getString(BrandingResourceIDs.STRING_LABEL_USERNAME)); mEditName.addTextChangedListener(mTextWatcher); mEditPass.addTextChangedListener(mTextWatcher); mBtnSignIn.setOnClickListener(new OnClickListener() { public void onClick(View v) { String username = mEditName.getText().toString(); final String pass = mEditPass.getText().toString(); final boolean rememberPass = mRememberPass.isChecked(); ContentResolver cr = getContentResolver(); long accountId = ImApp.insertOrUpdateAccount(cr, providerId, username, rememberPass ? pass : null); mAccountUri = ContentUris.withAppendedId(Im.Account.CONTENT_URI, accountId); if (!origUserName.equals(username) && shouldShowTermOfUse(brandingRes)) { comfirmTermsOfUse(brandingRes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { signIn(rememberPass, pass); } }); } else { signIn(rememberPass, pass); } } void signIn(boolean rememberPass, String pass) { Intent intent = new Intent(AccountActivity.this, SigningInActivity.class); intent.setData(mAccountUri); if (!rememberPass) { intent.putExtra(ImApp.EXTRA_INTENT_PASSWORD, pass); } if (mToAddress != null) { intent.putExtra(ImApp.EXTRA_INTENT_SEND_TO_USER, mToAddress); } startActivityForResult(intent, REQUEST_SIGN_IN); } }); // Make link for signing up. String text = brandingRes.getString(BrandingResourceIDs.STRING_LABEL_SIGN_UP); SpannableStringBuilder builder = new SpannableStringBuilder(text); builder.setSpan(new URLSpan(provider.mSignUpUrl), 0, builder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); TextView signUp = (TextView)findViewById(R.id.signUp); signUp.setText(builder); signUp.setMovementMethod(LinkMovementMethod.getInstance()); updateWidgetState(); } void comfirmTermsOfUse(BrandingResources res, DialogInterface.OnClickListener accept) { SpannableString message = new SpannableString( res.getString(BrandingResourceIDs.STRING_TOU_MESSAGE)); Linkify.addLinks(message, Linkify.ALL); new AlertDialog.Builder(this) .setIcon(android.R.drawable.ic_dialog_alert) .setTitle(res.getString(BrandingResourceIDs.STRING_TOU_TITLE)) .setMessage(message) .setPositiveButton(res.getString(BrandingResourceIDs.STRING_TOU_DECLINE), null) .setNegativeButton(res.getString(BrandingResourceIDs.STRING_TOU_ACCEPT), accept) .show(); } boolean shouldShowTermOfUse(BrandingResources res) { return !TextUtils.isEmpty(res.getString(BrandingResourceIDs.STRING_TOU_MESSAGE)); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mAccountUri = savedInstanceState.getParcelable(ACCOUNT_URI_KEY); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable(ACCOUNT_URI_KEY, mAccountUri); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (requestCode == REQUEST_SIGN_IN) { if (resultCode == RESULT_OK) { boolean keepSignIn = mKeepSignIn.isChecked(); updateKeepSignedIn(keepSignIn); finish(); } else { // sign in failed, disable keep sign in, clear the password. mKeepSignIn.setChecked(false); updateKeepSignedIn(false); mEditPass.setText(""); ContentValues values = new ContentValues(); values.put(Im.Account.PASSWORD, (String) null); getContentResolver().update(mAccountUri, values, null, null); } } } void updateKeepSignedIn(boolean keepSignIn) { ContentValues values = new ContentValues(); values.put(Im.Account.KEEP_SIGNED_IN, keepSignIn ? 1 : 0); getContentResolver().update(mAccountUri, values, null, null); } void updateWidgetState() { boolean goodUsername = mEditName.getText().length() > 0; boolean goodPassword = mEditPass.getText().length() > 0; boolean hasNameAndPassword = goodUsername && goodPassword; mEditPass.setEnabled(goodUsername); mEditPass.setFocusable(goodUsername); mEditPass.setFocusableInTouchMode(goodUsername); // enable keep sign in only when remember password is checked. boolean rememberPass = mRememberPass.isChecked(); if (rememberPass && !hasNameAndPassword) { mRememberPass.setChecked(false); rememberPass = false; } mRememberPass.setEnabled(hasNameAndPassword); mRememberPass.setFocusable(hasNameAndPassword); if (!rememberPass) { mKeepSignIn.setChecked(false); } mKeepSignIn.setEnabled(rememberPass); mKeepSignIn.setFocusable(rememberPass); mBtnSignIn.setEnabled(hasNameAndPassword); mBtnSignIn.setFocusable(hasNameAndPassword); } private final TextWatcher mTextWatcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int before, int after) { } public void onTextChanged(CharSequence s, int start, int before, int after) { updateWidgetState(); } public void afterTextChanged(Editable s) { } };}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -