PreferenceActivity.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:8k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2007-2008 Esmertec AG.
  3.  * Copyright (C) 2007-2008 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.app;
  18. import java.util.HashMap;
  19. import android.app.Activity;
  20. import android.content.ContentValues;
  21. import android.content.Intent;
  22. import android.database.Cursor;
  23. import android.os.Bundle;
  24. import android.provider.Im;
  25. import android.util.Log;
  26. import android.view.View;
  27. import android.widget.Button;
  28. import android.widget.EditText;
  29. import android.widget.RadioGroup;
  30. import com.android.im.R;
  31. import com.android.im.imps.ImpsConnectionConfig.CirMethod;
  32. import com.android.im.imps.ImpsConnectionConfig.EncodingType;
  33. import com.android.im.imps.ImpsConnectionConfig.TransportType;
  34. import com.android.im.plugin.ImConfigNames;
  35. import com.android.im.plugin.ImpsConfigNames;
  36. public class PreferenceActivity extends Activity {
  37.     RadioGroup mRgDataChannel;
  38.     RadioGroup mRgDataEncoding;
  39.     RadioGroup mRgCirChannel;
  40.     EditText mEdtHost;
  41.     EditText mEdtMsisdn;
  42.     long mProviderId;
  43.     String mProviderName;
  44.     HashMap<String, String> mPref;
  45.     static final void log(String log) {
  46.          Log.d(ImApp.LOG_TAG, "<PreferenceActivity> " + log);
  47.     }
  48.     @Override
  49.     public void onCreate(Bundle icicle) {
  50.         super.onCreate(icicle);
  51.         resolveIntent();
  52.         setTitle(getString(R.string.preference_title, mProviderName));
  53.         setContentView(R.layout.preference_activity);
  54.         mRgDataChannel  = (RadioGroup) findViewById(R.id.rgDataChannel);
  55.         mRgDataEncoding = (RadioGroup) findViewById(R.id.rgDataEncoding);
  56.         mRgCirChannel   = (RadioGroup) findViewById(R.id.rgCirChannel);
  57.         mEdtHost        = (EditText) findViewById(R.id.etHost);
  58.         mEdtMsisdn      = (EditText) findViewById(R.id.etMsisdn);
  59.         String dataChannel = getPreference(ImpsConfigNames.DATA_CHANNEL,
  60.                 TransportType.HTTP.name());
  61.         if (TransportType.HTTP.name().equals(dataChannel)) {
  62.             mRgDataChannel.check(R.id.DATA_HTTP);
  63.         } else if (TransportType.SMS.name().equals(dataChannel)) {
  64.             mRgDataChannel.check(R.id.DATA_SMS);
  65.         }
  66.         String cirChannel = getPreference(ImpsConfigNames.CIR_CHANNEL,
  67.                 CirMethod.STCP.name());
  68.         if (CirMethod.STCP.name().equals(cirChannel)) {
  69.             mRgCirChannel.check(R.id.CIR_STCP);
  70.         } else if (CirMethod.SHTTP.name().equals(cirChannel)) {
  71.             mRgCirChannel.check(R.id.CIR_SHTTP);
  72.         } else if (CirMethod.SSMS.name().equals(cirChannel)) {
  73.             mRgCirChannel.check(R.id.CIR_SSMS);
  74.         }
  75.         String dataEncoding = getPreference(ImpsConfigNames.DATA_ENCODING,
  76.                 EncodingType.XML.name());
  77.         if (EncodingType.XML.name().equals(dataEncoding)) {
  78.             mRgDataEncoding.check(R.id.ENC_XML);
  79.         } else if (EncodingType.WBXML.name().equals(dataEncoding)) {
  80.             mRgDataEncoding.check(R.id.ENC_WBXML);
  81.         } else if (EncodingType.SMS.name().equals(dataEncoding)) {
  82.             mRgDataEncoding.check(R.id.ENC_SMS);
  83.         }
  84.         mEdtHost.setText(getPreference(ImpsConfigNames.HOST, "http://"));
  85.         mEdtMsisdn.setText(getPreference(ImpsConfigNames.MSISDN, ""));
  86.         final Button btnSave = (Button) findViewById(R.id.btnSave);
  87.         btnSave.setOnClickListener(new Button.OnClickListener() {
  88.             public void onClick(View v) {
  89.                 savePreferences();
  90.             }
  91.         });
  92.     }
  93.     private String getPreference(String prefName, String defaultValue) {
  94.         String value = mPref.get(prefName);
  95.         return value == null ? defaultValue : value;
  96.     }
  97.     void resolveIntent() {
  98.         Intent i = getIntent();
  99.         if(i.getData() == null){
  100.             Log.w(ImApp.LOG_TAG, "No data passed to PreferenceActivity");
  101.             finish();
  102.         } else {
  103.             Cursor c = getContentResolver().query(i.getData(),
  104.                     new String[]{Im.Provider._ID, Im.Provider.NAME}, null, null, null);
  105.             if (c == null || !c.moveToFirst()) {
  106.                 Log.w(ImApp.LOG_TAG, "Can't query data from given URI.");
  107.                 finish();
  108.             } else {
  109.                 mProviderId   = c.getLong(0);
  110.                 mProviderName = c.getString(1);
  111.                 c.close();
  112.                 mPref = Im.ProviderSettings.queryProviderSettings(getContentResolver(), mProviderId);
  113.             }
  114.         }
  115.     }
  116.     void savePreferences() {
  117.         TransportType dataChannel;
  118.         switch (mRgDataChannel.getCheckedRadioButtonId()) {
  119.         case R.id.DATA_HTTP:
  120.             dataChannel = TransportType.HTTP;
  121.             break;
  122.         case R.id.DATA_SMS:
  123.             dataChannel = TransportType.SMS;
  124.             break;
  125.         default:
  126.             Log.w(ImApp.LOG_TAG, "Unexpected dataChannel button ID; defaulting to HTTP");
  127.             dataChannel = TransportType.HTTP;
  128.             break;
  129.         }
  130.         CirMethod cirChannel;
  131.         switch (mRgCirChannel.getCheckedRadioButtonId()) {
  132.         case R.id.CIR_STCP:
  133.             cirChannel = CirMethod.STCP;
  134.             break;
  135.         case R.id.CIR_SHTTP:
  136.             cirChannel = CirMethod.SHTTP;
  137.             break;
  138.         case R.id.CIR_SSMS:
  139.             cirChannel = CirMethod.SSMS;
  140.             break;
  141.         default:
  142.             Log.w(ImApp.LOG_TAG, "Unexpected cirChannel button ID; defaulting to STCP");
  143.             cirChannel = CirMethod.STCP;
  144.             break;
  145.         }
  146.         EncodingType dataEncoding;
  147.         switch (mRgDataEncoding.getCheckedRadioButtonId()) {
  148.         case R.id.ENC_WBXML:
  149.             dataEncoding = EncodingType.WBXML;
  150.             break;
  151.         case R.id.ENC_XML:
  152.             dataEncoding = EncodingType.XML;
  153.             break;
  154.         case R.id.ENC_SMS:
  155.             dataEncoding = EncodingType.SMS;
  156.             break;
  157.         default:
  158.             Log.w(ImApp.LOG_TAG, "Unexpected dataEncoding button ID; defaulting to WBXML");
  159.             dataEncoding = EncodingType.WBXML;
  160.             break;
  161.         }
  162.         String host = mEdtHost.getText().toString();
  163.         String msisdn = mEdtMsisdn.getText().toString();
  164.         if (Log.isLoggable(ImApp.LOG_TAG, Log.DEBUG)){
  165.             log("set connection preference, DataChannel: " + dataChannel
  166.                     + ", CirChannel: " + cirChannel
  167.                     + ", DataEncoding: " + dataEncoding
  168.                     + ", Host: " + host
  169.                     + ", MSISDN: " + msisdn);
  170.         }
  171.         ContentValues[] valuesList = new ContentValues[7];
  172.         valuesList[0] = getValues(ImConfigNames.PROTOCOL_NAME, "IMPS");
  173.         valuesList[1] = getValues(ImpsConfigNames.DATA_CHANNEL, dataChannel.name());
  174.         valuesList[2] = getValues(ImpsConfigNames.DATA_ENCODING, dataEncoding.name());
  175.         valuesList[3] = getValues(ImpsConfigNames.CIR_CHANNEL, cirChannel.name());
  176.         valuesList[4] = getValues(ImpsConfigNames.HOST, host);
  177.         valuesList[6] = getValues(ImpsConfigNames.MSISDN, msisdn);
  178.         getContentResolver().bulkInsert(Im.ProviderSettings.CONTENT_URI, valuesList);
  179.         finish();
  180.     }
  181.     private ContentValues getValues(String name, String value) {
  182.         ContentValues values = new ContentValues();
  183.         values.put(Im.ProviderSettings.PROVIDER, mProviderId);
  184.         values.put(Im.ProviderSettings.NAME, name);
  185.         values.put(Im.ProviderSettings.VALUE, value);
  186.         return values;
  187.     }
  188. }