blob: 14215ecdef07ba27593e753058df650eca434587 [file] [log] [blame]
/*
* 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;
}
}