/* * 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 java.util.HashMap; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RadioGroup; import com.android.im.R; import com.android.im.imps.ImpsConnectionConfig.CirMethod; import com.android.im.imps.ImpsConnectionConfig.EncodingType; import com.android.im.imps.ImpsConnectionConfig.TransportType; import com.android.im.plugin.ImConfigNames; import com.android.im.plugin.ImpsConfigNames; import com.android.im.provider.Imps; public class PreferenceActivity extends Activity { RadioGroup mRgDataChannel; RadioGroup mRgDataEncoding; RadioGroup mRgCirChannel; EditText mEdtHost; EditText mEdtMsisdn; long mProviderId; String mProviderName; HashMap<String, String> mPref; static final void log(String log) { Log.d(ImApp.LOG_TAG, "<PreferenceActivity> " + log); } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); resolveIntent(); setTitle(getString(R.string.preference_title, mProviderName)); setContentView(R.layout.preference_activity); mRgDataChannel = (RadioGroup) findViewById(R.id.rgDataChannel); mRgDataEncoding = (RadioGroup) findViewById(R.id.rgDataEncoding); mRgCirChannel = (RadioGroup) findViewById(R.id.rgCirChannel); mEdtHost = (EditText) findViewById(R.id.etHost); mEdtMsisdn = (EditText) findViewById(R.id.etMsisdn); String dataChannel = getPreference(ImpsConfigNames.DATA_CHANNEL, TransportType.HTTP.name()); if (TransportType.HTTP.name().equals(dataChannel)) { mRgDataChannel.check(R.id.DATA_HTTP); } else if (TransportType.SMS.name().equals(dataChannel)) { mRgDataChannel.check(R.id.DATA_SMS); } String cirChannel = getPreference(ImpsConfigNames.CIR_CHANNEL, CirMethod.STCP.name()); if (CirMethod.STCP.name().equals(cirChannel)) { mRgCirChannel.check(R.id.CIR_STCP); } else if (CirMethod.SHTTP.name().equals(cirChannel)) { mRgCirChannel.check(R.id.CIR_SHTTP); } else if (CirMethod.SSMS.name().equals(cirChannel)) { mRgCirChannel.check(R.id.CIR_SSMS); } String dataEncoding = getPreference(ImpsConfigNames.DATA_ENCODING, EncodingType.XML.name()); if (EncodingType.XML.name().equals(dataEncoding)) { mRgDataEncoding.check(R.id.ENC_XML); } else if (EncodingType.WBXML.name().equals(dataEncoding)) { mRgDataEncoding.check(R.id.ENC_WBXML); } else if (EncodingType.SMS.name().equals(dataEncoding)) { mRgDataEncoding.check(R.id.ENC_SMS); } mEdtHost.setText(getPreference(ImpsConfigNames.HOST, "http://")); mEdtMsisdn.setText(getPreference(ImpsConfigNames.MSISDN, "")); final Button btnSave = (Button) findViewById(R.id.btnSave); btnSave.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { savePreferences(); } }); } private String getPreference(String prefName, String defaultValue) { String value = mPref.get(prefName); return value == null ? defaultValue : value; } void resolveIntent() { Intent i = getIntent(); if(i.getData() == null){ Log.w(ImApp.LOG_TAG, "No data passed to PreferenceActivity"); finish(); } else { Cursor c = getContentResolver().query(i.getData(), new String[]{Imps.Provider._ID, Imps.Provider.NAME}, null, null, null); if (c == null || !c.moveToFirst()) { Log.w(ImApp.LOG_TAG, "Can't query data from given URI."); finish(); } else { mProviderId = c.getLong(0); mProviderName = c.getString(1); c.close(); mPref = Imps.ProviderSettings.queryProviderSettings(getContentResolver(), mProviderId); } } } void savePreferences() { TransportType dataChannel; switch (mRgDataChannel.getCheckedRadioButtonId()) { case R.id.DATA_HTTP: dataChannel = TransportType.HTTP; break; case R.id.DATA_SMS: dataChannel = TransportType.SMS; break; default: Log.w(ImApp.LOG_TAG, "Unexpected dataChannel button ID; defaulting to HTTP"); dataChannel = TransportType.HTTP; break; } CirMethod cirChannel; switch (mRgCirChannel.getCheckedRadioButtonId()) { case R.id.CIR_STCP: cirChannel = CirMethod.STCP; break; case R.id.CIR_SHTTP: cirChannel = CirMethod.SHTTP; break; case R.id.CIR_SSMS: cirChannel = CirMethod.SSMS; break; default: Log.w(ImApp.LOG_TAG, "Unexpected cirChannel button ID; defaulting to STCP"); cirChannel = CirMethod.STCP; break; } EncodingType dataEncoding; switch (mRgDataEncoding.getCheckedRadioButtonId()) { case R.id.ENC_WBXML: dataEncoding = EncodingType.WBXML; break; case R.id.ENC_XML: dataEncoding = EncodingType.XML; break; case R.id.ENC_SMS: dataEncoding = EncodingType.SMS; break; default: Log.w(ImApp.LOG_TAG, "Unexpected dataEncoding button ID; defaulting to WBXML"); dataEncoding = EncodingType.WBXML; break; } String host = mEdtHost.getText().toString(); String msisdn = mEdtMsisdn.getText().toString(); if (Log.isLoggable(ImApp.LOG_TAG, Log.DEBUG)){ log("set connection preference, DataChannel: " + dataChannel + ", CirChannel: " + cirChannel + ", DataEncoding: " + dataEncoding + ", Host: " + host + ", MSISDN: " + msisdn); } ContentValues[] valuesList = new ContentValues[7]; valuesList[0] = getValues(ImConfigNames.PROTOCOL_NAME, "IMPS"); valuesList[1] = getValues(ImpsConfigNames.DATA_CHANNEL, dataChannel.name()); valuesList[2] = getValues(ImpsConfigNames.DATA_ENCODING, dataEncoding.name()); valuesList[3] = getValues(ImpsConfigNames.CIR_CHANNEL, cirChannel.name()); valuesList[4] = getValues(ImpsConfigNames.HOST, host); valuesList[6] = getValues(ImpsConfigNames.MSISDN, msisdn); getContentResolver().bulkInsert(Imps.ProviderSettings.CONTENT_URI, valuesList); finish(); } private ContentValues getValues(String name, String value) { ContentValues values = new ContentValues(); values.put(Imps.ProviderSettings.PROVIDER, mProviderId); values.put(Imps.ProviderSettings.NAME, name); values.put(Imps.ProviderSettings.VALUE, value); return values; } }