/* * 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.mwebster.iemail.activity.setup; import com.mwebster.iemail.AccountBackupRestore; import com.mwebster.iemail.Email; import com.mwebster.iemail.ExchangeUtils; import com.mwebster.iemail.R; import com.mwebster.iemail.mail.Store; import com.mwebster.iemail.mail.store.ExchangeStore; import com.mwebster.iemail.provider.EmailContent; import com.mwebster.iemail.provider.EmailContent.Account; import android.accounts.AccountManagerCallback; import android.accounts.AccountManagerFuture; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.Spinner; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Button; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; public class AccountSetupColor extends Activity implements OnClickListener, SeekBar.OnSeekBarChangeListener { private static final String EXTRA_ACCOUNT = "account"; private static final String EXTRA_COLOR = "color"; private static final String EXTRA_EAS_FLOW = "easFlow"; private static final String TAG = "AccountSetupColor"; private static final int r = 0; private static final int g = 1; private static final int b = 2; private static final int RGB_COMP_COUNT = 3; private static String COMPONENT_NAMES[] = { "RED", "GREEN", "BLUE"}; final int RGB_SEEKBAR_MAX = 255; private static final int SLIDER_IDS[] = { R.id.color_R, R.id.color_G, R.id.color_B }; private static final int RGB_VAL_IDS[] = { R.id.color_R_val, R.id.color_G_val, R.id.color_B_val }; private View mSampleChip; // sample_chip private View mColorSample; // color_sample private TextView mHtmlCode; // color_html_code private TextView mRGBValue[]; // color_R_val private SeekBar mRGBSlider []; // color_R private Button mNext; private EmailContent.Account mAccount; private int mCurrentColor; private boolean mEasFlowMode; private boolean mEditMode; public static void actionSetColor(Activity fromActivity, EmailContent.Account account, boolean easFlowMode) { Intent i = new Intent(fromActivity, AccountSetupColor.class); i.putExtra(EXTRA_ACCOUNT, account); i.putExtra(EXTRA_EAS_FLOW, easFlowMode); fromActivity.startActivity(i); } public static void actionEditColorSettings(Activity fromActivity, EmailContent.Account account) { Intent i = new Intent(fromActivity, AccountSetupColor.class); i.setAction(Intent.ACTION_EDIT); i.putExtra(EXTRA_ACCOUNT, account); fromActivity.startActivity(i); } private void initComponents () { setContentView(R.layout.account_setup_color); mSampleChip = (View)findViewById(R.id.sample_chip); mColorSample = (View)findViewById(R.id.color_sample); mHtmlCode = (TextView)findViewById(R.id.color_html_code); mRGBValue = new TextView[RGB_COMP_COUNT]; mRGBSlider = new SeekBar[RGB_COMP_COUNT]; for (int i = r; i < RGB_COMP_COUNT; i++) { mRGBValue[i] = (TextView)findViewById(RGB_VAL_IDS[i]); mRGBSlider[i] = (SeekBar)findViewById(SLIDER_IDS[i]); initSeeKbar(mRGBSlider[i]); } mNext = (Button)findViewById(R.id.next); mNext.setOnClickListener(this); } private void initSeeKbar (SeekBar item) { item.setMax(RGB_SEEKBAR_MAX); item.setKeyProgressIncrement(1); if (!mEditMode) { item.setProgress((int)(Math.random() * RGB_SEEKBAR_MAX)); item.invalidate(); } item.setOnSeekBarChangeListener(this); } private void updateColor () { int rgb[] = new int [RGB_COMP_COUNT]; for (int i = r; i < RGB_COMP_COUNT; i++) { rgb[i] = mRGBSlider[i].getProgress(); mRGBValue[i].setText(rgb[i] + ""); } mCurrentColor = Color.argb(RGB_SEEKBAR_MAX, rgb[r], rgb[g], rgb[b]); mSampleChip.setBackgroundColor(mCurrentColor); mColorSample.setBackgroundColor(mCurrentColor); mHtmlCode.setTextColor(mCurrentColor); mHtmlCode.setText("0x" + Integer.toHexString(mCurrentColor).toUpperCase()); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initComponents (); mAccount = (EmailContent.Account) getIntent().getParcelableExtra(EXTRA_ACCOUNT); mEditMode = Intent.ACTION_EDIT.equals(getIntent().getAction()); if (mEditMode) { mAccount = Account.restoreAccountWithId(this, mAccount.mId); mCurrentColor = mAccount.getAccountColor(); } else { // Setup any additional items to support EAS & EAS flow mode mEasFlowMode = getIntent().getBooleanExtra(EXTRA_EAS_FLOW, false); } int rgb[] = {Color.red(mCurrentColor), Color.green(mCurrentColor), Color.blue(mCurrentColor)}; for (int i = r; i < RGB_COMP_COUNT; i++) { mRGBSlider[i].setProgress(rgb[i]); } updateColor (); } public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { updateColor (); } public void onStartTrackingTouch(SeekBar seekBar) { // do nothing } public void onStopTrackingTouch(SeekBar seekBar) { // do nothing } private void onDone() { updateColor (); mAccount.setAccountColor(mCurrentColor); if (mEditMode) { if (mAccount.isSaved()) { mAccount.update(this, mAccount.toContentValues()); } else { mAccount.save(this); } // Update the backup (side copy) of the accounts AccountBackupRestore.backupAccounts(this); finish(); } else { // Clear the incomplete flag now mAccount.mFlags &= ~Account.FLAGS_INCOMPLETE; AccountSettingsUtils.commitSettings(this, mAccount); Email.setServicesEnabled(this); AccountSetupNames.actionSetNames(this, mAccount.mId, mEasFlowMode); // Start up SyncManager (if it isn't already running) ExchangeUtils.startExchangeService(this); } } public void onClick(View v) { switch (v.getId()) { case R.id.next: onDone(); break; } } }