/* * 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.phone; import java.util.ArrayList; import java.lang.Integer; import com.android.phone.R; import android.database.sqlite.SqliteWrapper; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.AsyncQueryHandler; import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.database.ContentObserver; import android.database.Cursor; import android.database.sqlite.SQLiteException; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.telephony.TelephonyManager; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Button; import android.widget.SimpleCursorAdapter; import android.content.ContentValues; import android.widget.CheckBox; import android.content.ContentUris; import android.content.DialogInterface.OnClickListener; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.RILConstants; import android.os.AsyncResult; import android.os.Message; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.preference.Preference; import android.content.pm.PackageManager.NameNotFoundException; import com.android.internal.telephony.gsm.SmsCBMessage; /** * Displays a list of the Cell Broadcast Sms. */ public class CellBroadcastSmsSettingActivity extends Activity { private static final Uri CBSMS_URI_SET = Uri .parse("content://sms/cbsmssetting"); private static final Uri CBSMS_URI_SETALL = Uri .parse("content://sms/cbsmssettingall"); private static final String TAG = "CellBroadcastSmsSettingActivity"; public static final int REQUEST_VIEW_CBSMS = 1; public static final int REQUEST_LANG = 2; public static final int REQUEST_TEST = 3; // String keys for preference lookup private static final int MENU_ADD = 0; private static final int MENU_DELETE = 1; private static final int MENU_TEST = 2; // Handler keys private static final int MESSAGE_ACTIVATE_CB_SMS = 1; private static final int MESSAGE_GET_CB_SMS_CONFIG = 2; private static final int MESSAGE_SET_CB_SMS_CONFIG = 4; // Member variables private Phone mPhone; private MyHandler mHandler; private static final int SHOW_LIST = 0; private static final int SHOW_EMPTY = 1; private static final int SHOW_BUSY = 2; private int mState; private int mListCount = 0; private static final int THREAD_LIST_QUERY_TOKEN = 1701; private static final int NO_OF_INTS_STRUCT_1 = 5; private ContentResolver mContentResolver; private Cursor mCursor = null; private ListView mSimList; private TextView mMessage; private MyListAdapter mListAdapter = null; private AsyncQueryHandler mQueryHandler = null; private int mPos = 0; private boolean mTestFlag = false; private CheckBox mCheckbox; private Button mButton; private String COLUMN_ID = "_id"; private String COLUMN_CHANNEL_ID = "channel_id"; private String COLUMN_CHANNEL_NAME = "channel_name"; private String COLUMN_CHANNEL_ENABLE = "enable"; private String ACTION = "add"; private String COLUMN_LANG = "lang"; private String COLUMN_MODE = "mode"; private int mLang; private int mEnable = 0; private boolean mSetall = false; private int[] mConfigDataComplete; private int[] mAllEnableChannel; private int[] mLangSet; private int mMode = 0; private int mTest =0; private final String[] PROJECTION = { COLUMN_ID, COLUMN_CHANNEL_ID, COLUMN_CHANNEL_NAME, COLUMN_CHANNEL_ENABLE }; private final String[] SET_PROJECTION = { COLUMN_ID, COLUMN_LANG, COLUMN_CHANNEL_ENABLE, COLUMN_MODE }; private static final int ENG_LANG = 0x1; private static final int FRENCH_LANG = 0x2; private static final int SPANISH_LANG = 0x4; private static final int JAPANESE_LANG = 0x8; private static final int KOREAN_LANG = 0x10; private static final int CHINESE_LANG = 0x20; private static final int HERBREW_LANG = 0x40; private static final int[] LangMap = { ENG_LANG, FRENCH_LANG, SPANISH_LANG, JAPANESE_LANG, KOREAN_LANG, CHINESE_LANG, HERBREW_LANG }; private static int MAX_LANG = 7; private static final int COMMA = 0x2c; private static final int QUOTES = 0x22; private static final int CR = 0xd; //Add for Dualsim private static final int PADDING = 0XFFFF; public static final int SIM_FULL_NOTIFICATION_ID = 234; private int mPhoneId = 0; private final ContentObserver simChangeObserver = new ContentObserver( new Handler()) { @Override public void onChange(boolean selfUpdate) { Log.i(TAG, "onChange"); refreshMessageList(); } }; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); Log.i(TAG, "onCreate"); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); mContentResolver = getContentResolver(); mQueryHandler = new QueryHandler(mContentResolver, this); setContentView(R.layout.cell_broadcast_set); mSimList = (ListView) findViewById(R.id.cb_set_list); mMessage = (TextView) findViewById(R.id.cb_set_text); mCheckbox = (CheckBox) findViewById(R.id.cb_set_checkbox); mPhoneId = getIntent().getExtras().getInt("phoneid"); mPhone = PhoneApp.getInstance().getPhone(mPhoneId); //mPhone = PhoneFactory.getDefaultPhone(); Log.i(TAG, "onCreate " + mPhone.getPhoneName()); mHandler = new MyHandler(); mCheckbox.setChecked(false); mCheckbox.setOnClickListener(mClicked); mButton = (Button) findViewById(R.id.lang_button); mButton.setHorizontalFadingEdgeEnabled(true); mButton.setOnClickListener(mClicked); //addCellBroadcastSmsSetting(); init(); boolean enable = (mEnable == 0) ? false : true; mCheckbox.setChecked(enable); // registerForContextMenu(mButton); mSimList.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (view != null) { Cursor cursor = (Cursor) mListAdapter.getItem(position); String channel_id = cursor.getString(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_ID)); String channel_name = cursor.getString(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_NAME)); mPos = cursor.getInt(cursor .getColumnIndexOrThrow(COLUMN_ID)); int enable = cursor.getInt(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_ENABLE)); // @temp Intent intent = new Intent( CellBroadcastSmsSettingActivity.this, CellBroadcastSmsSettingEditActivity.class); intent.putExtra(COLUMN_CHANNEL_ID, channel_id); intent.putExtra(COLUMN_CHANNEL_NAME, channel_name); intent.putExtra(COLUMN_CHANNEL_ENABLE, enable); intent.putExtra(COLUMN_LANG, mLang); // String posStr = ""; // posStr += position; // Log.i("onItemClick", "pos" + position); intent.putExtra("pos", mPos); //1 mPos = position; //Add for DualSIM intent.putExtra("phoneid", mPhoneId); startActivityForResult(intent, REQUEST_VIEW_CBSMS); } } }); } // TODO: Enable this once viewMessage is written. // private View.OnClickListener mClicked = new View.OnClickListener() { public void onClick(View v) { if (v == mButton) { // Authenticate the pin AFTER the contact information // is entered, and if we're not busy. Log.i(TAG, "OnClickListener"); Intent intent = new Intent( CellBroadcastSmsSettingActivity.this, CellBroadcastSmsSettingLangActivity.class); intent.putExtra(COLUMN_LANG, mLang); //Add for Dualsim Bundle mBundle = new Bundle(); mBundle.putInt("phoneid", mPhoneId); intent.putExtras(mBundle); startActivityForResult(intent, REQUEST_LANG); } else if (v == mCheckbox) { mEnable = (mCheckbox.isChecked() == false) ? 0 : 1; updeteSettingAll(); } } }; private boolean querySetting() { // Cursor cursor = SqliteWrapper.query(this, getContentResolver(), // CBSMS_URI_SETALL, SET_PROJECTION, null, null, null); Cursor cursor = SqliteWrapper.query(this, getContentResolver(), CBSMS_URI_SETALL, SET_PROJECTION, COLUMN_ID+"="+mPhoneId, null, null); if (cursor != null) { Log.i(TAG, "cursor != null"); try { while (cursor.moveToNext()) { int lang = cursor.getInt(cursor .getColumnIndexOrThrow(COLUMN_LANG)); mEnable = cursor.getInt(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_ENABLE)); mLang = cursor.getInt(cursor .getColumnIndexOrThrow(COLUMN_LANG)); mMode = cursor.getInt(cursor .getColumnIndexOrThrow(COLUMN_MODE)); Log.i(TAG, "COLUMN_LANG :" + lang + "mEnable:" + mEnable + "mLang: " + mLang + "mMode :"+ mMode); mSetall = true; } } finally { cursor.close(); } } else { mSetall = false; } return false; } @Override protected void onNewIntent(Intent intent) { setIntent(intent); init(); } private void init() { // MessagingNotification.cancelNotification(getApplicationContext(), // SIM_FULL_NOTIFICATION_ID); updateState(SHOW_BUSY); startQuery(); querySetting(); } private void setLangATCmd() { int[] data; int[] lang = getLang(); boolean isEnable = ((mEnable == 0) ? false : true); data = setChannelATCmd(mAllEnableChannel, mLangSet, isEnable); if(data!= null){ mPhone.setCellBroadcastSmsConfig(mConfigDataComplete, Message.obtain(mHandler, MESSAGE_SET_CB_SMS_CONFIG)); }else{ enableCellBroadcast(isEnable); } } private int setData(int[] fromData, int startId){ int data = PADDING; if(startId < fromData.length){ data = fromData[startId]; } return data; } private int[] setChannelATCmd(int[] channel, int[] lang, boolean isEnable) { int[] data; int raw_length = 0; int length = 0; int j = 0; int i = 0; if(lang != null && channel != null){ raw_length = (channel.length + lang.length) * 2 + 10; }else{ return null; } if (raw_length % 4 != 0) { length = raw_length + (4 - raw_length % 4); } else { length = raw_length; } /* Log.i(TAG, "setChannelATCmd length :" + length + " rawlength " + raw_length + "lang.length" + lang.length); for (i = 0; i < lang.length; i++) { Log.i(TAG, "setChannelATCmd lang["+i+"]:" + lang[i]); Log.i(TAG,"-----------------------------------------"); } for (int k = 0; k < channel.length; k++) { Log.i(TAG, "setChannelATCmd channel["+k+"]:" + channel[k]); }*/ data = new int[length]; if (isEnable) { data[0] = 0; } else { data[0] = 1; } data[1] = COMMA; data[2] = QUOTES; j = 3; for (i = 0; i < channel.length; i++) { data[j] = channel[i]; if (i == channel.length - 1) { j++; break; } data[j + 1] = COMMA; j += 2; } data[j] = QUOTES; if (lang.length > 0) { j++; data[j] = COMMA; j++; data[j] = QUOTES; j++; for (i = 0; i < lang.length; i++) { data[j] = lang[i]; if (i == lang.length - 1) { j++; break; } data[j + 1] = COMMA; j += 2; } data[j] = QUOTES; //not select the language,so pass two quotes } else { j++; data[j] = COMMA; j++; data[j] = QUOTES; j++; data[j] = QUOTES; } j++; Log.i(TAG, "setChannelATCmd raw length:" + j); for (i = j; i < length; i++) { data[i] = CR; Log.i(TAG, "setChannelATCmd FILL CR :" + data[i]); } Log.i(TAG, "setChannelATCmd data length:" + data.length); mConfigDataComplete = new int[data.length]; for (i = 0; i < data.length; i++) { mConfigDataComplete[i] = data[i]; Log.i(TAG, "setChannelATCmd data["+i+"]:" + mConfigDataComplete[i]); } return data; } private void setOneChannelATCmd(int channel_id, boolean isEnable) { int[] channel = new int[1]; channel[0] = channel_id; int[] lang = getLang(); int[] data; data = setChannelATCmd(channel, mLangSet, isEnable); if(data != null){ mPhone.setCellBroadcastSmsConfig(mConfigDataComplete, Message.obtain(mHandler, MESSAGE_SET_CB_SMS_CONFIG)); } } private int getLangId(int langSet) { int langId = 0XFFFF; switch (langSet) { case ENG_LANG: langId = 1; break; case FRENCH_LANG: langId = 3; break; case SPANISH_LANG: langId = 4; break; case JAPANESE_LANG:// @need to do langId = 0; break; case KOREAN_LANG:// @need to do langId = 0; break; case CHINESE_LANG: langId = 0x48; break; case HERBREW_LANG: langId = 0x21; break; default: break; } return langId; } private int[] getLang() { int[] data = new int[MAX_LANG]; int lang = 0xFFFF; int j = 0; Log.i(TAG, "getLang mLang " + mLang); for (int i = 0; i < MAX_LANG; i++) { if ((mLang & LangMap[i]) != 0) { lang = getLangId(LangMap[i]); Log.i(TAG, "getLang lang " + lang); if (0xFFFF != lang) { data[j] = lang; j++; } } } mLangSet = new int[j]; Log.i(TAG, "getLang count " + j); for (int i = 0; i < j; i++) { mLangSet[i] = data[i]; Log.i(TAG, "getLang mLangSet " + mLangSet[i]); } return mLangSet; } private class QueryHandler extends AsyncQueryHandler { private final CellBroadcastSmsSettingActivity mParent; public QueryHandler(ContentResolver contentResolver, CellBroadcastSmsSettingActivity parent) { super(contentResolver); mParent = parent; } @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { int count = cursor.getCount(); int j = 0; int[] data; if (count == 0) { Log.i(TAG, "onQueryComplete ,count == 0"); } else { Log.i(TAG, "onQueryComplete ,count " + count); } mListCount = count; mCursor = cursor; if (mCursor != null) { if (!mCursor.moveToFirst()) { // Let user know the SIM is empty Log.i(TAG, "onQueryComplete is empty"); updateState(SHOW_EMPTY); } else if (mListAdapter == null) { // Note that the MessageListAdapter doesn't support // auto-requeries. If we // want to respond to changes we'd need to add a line like: // mListAdapter.setOnDataSetChangedListener(mDataSetChangedListener); // See ComposeMessageActivity for an example. Log.i(TAG, "onQueryComplete mListAdapter is empty"); if (cursor != null) { if (cursor.moveToFirst()) { count = cursor.getCount(); int total_count = count; //boolean to_save = false; data = new int[total_count]; j = 0; for (int i = 0; i < count; ++i) { //to_save = false; int channel_id = cursor .getInt(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_ID)); String channel_name = cursor .getString(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_NAME)); int enable = cursor .getInt(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_ENABLE)); Log.i(TAG, "channel_id:" + channel_id + " channel_name:" + channel_name + " enable:" + enable); if (enable == 0) { //to_save = true; //if (to_save) { data[j] = channel_id; Log.i(TAG, "onQueryComplete: channel_id =" + data[j]); j++; //} } cursor.moveToNext(); } if (j > 0) { mAllEnableChannel = new int[j]; for (int i = 0; i < j; i++) { mAllEnableChannel[i] = data[i]; } Log.i(TAG, "onQueryComplete last count " + j); //SetCellBroadcastSmsConfig(mAllEnableChannel, // true); } } } mListAdapter = new MyListAdapter(mParent,mCursor); //mListAdapter = new SimpleCursorAdapter(mParent, // R.layout.cell_broadcast_setting_item, mCursor, // new String[] { COLUMN_CHANNEL_NAME, // COLUMN_CHANNEL_ID }, new int[] { // R.id.channel_name, R.id.channel_id }); Log.i(TAG, "onQueryComplete mListAdapter is empty (1)"); mSimList.setAdapter(mListAdapter); Log.i(TAG, "onQueryComplete mListAdapter is empty (2)"); // mSimList.setOnCreateContextMenuListener(mParent); updateState(SHOW_LIST); } else { Log.i(TAG, "onQueryComplete mListAdapter is not empty"); mListAdapter.changeCursor(mCursor); updateState(SHOW_LIST); } registerSimChangeObserver(); } else { // Let user know the SIM is empty updateState(SHOW_EMPTY); } } } private void startQuery() { try { mQueryHandler.startQuery(THREAD_LIST_QUERY_TOKEN, null, CBSMS_URI_SET, PROJECTION, "phone_id = "+mPhoneId, null, null); // mQueryHandler.startQuery(THREAD_LIST_QUERY_TOKEN, null, // CBSMS_URI_SET, PROJECTION, null, null, null); } catch (SQLiteException e) { SqliteWrapper.checkSQLiteException(this, e); } } private void refreshMessageList() { updateState(SHOW_BUSY); if (mCursor != null) { stopManagingCursor(mCursor); mCursor.close(); } startQuery(); } @Override public void onResume() { super.onResume(); registerSimChangeObserver(); } @Override public void onPause() { super.onPause(); mContentResolver.unregisterContentObserver(simChangeObserver); // mPhone.setCellBroadcastSmsConfig(getEnableCellBroadcast(), // Message.obtain(mHandler, MESSAGE_SET_CB_SMS_CONFIG)); } private void registerSimChangeObserver() { mContentResolver.registerContentObserver(CBSMS_URI_SET, true, simChangeObserver); } @Override protected void onDestroy() { if (mListAdapter != null) { mListAdapter.changeCursor(null); } if(mCursor != null && !mCursor.isClosed()){ mCursor.close(); } super.onDestroy(); } public boolean onPrepareOptionsMenu(Menu menu) { Log.i(TAG, "onCreateOptionsMenu"); menu.clear(); menu.add(0, MENU_ADD, Menu.NONE, getString(R.string.menu_add_channel)).setIcon( android.R.drawable.ic_menu_add); if (mListCount > 0) { menu.add(0, MENU_DELETE, Menu.NONE, getString(R.string.menu_delete_channel)).setIcon( android.R.drawable.ic_menu_delete); } if (mTestFlag) { menu.add(0, MENU_TEST, Menu.NONE, "Test switch"); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Log.i(TAG, "onOptionsItemSelectedSIM MenuItem"); switch (item.getItemId()) { case MENU_ADD: { Log.i(TAG, "onOptionsItemSelectedSIM menu MENU_ADD"); Intent intent = new Intent(CellBroadcastSmsSettingActivity.this, CellBroadcastSmsSettingEditActivity.class); intent.putExtra(COLUMN_LANG, mLang); Bundle mBundle = new Bundle(); mBundle.putInt("phoneid", mPhoneId); intent.putExtras(mBundle); startActivityForResult(intent, REQUEST_VIEW_CBSMS); return true; } case MENU_DELETE: { Log.i(TAG, "onOptionsItemSelectedSIM MENU_DELETE"); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.menu_delete_channel); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setCancelable(true); builder.setMessage(R.string.confirm_delete_message); builder.setPositiveButton(R.string.menu_delete_channel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { SqliteWrapper.delete(CellBroadcastSmsSettingActivity.this, mContentResolver, CBSMS_URI_SET, null, null); refreshMessageList(); } }); builder.setNegativeButton(R.string.no, null); builder.show(); return true; } case MENU_TEST:{ Log.i(TAG, "onOptionsItemSelectedSIM menu MENU_TEST"); Intent intent = new Intent(CellBroadcastSmsSettingActivity.this, CellBroadcastSmsSettingTestActivity.class); intent.putExtra(COLUMN_MODE, mMode); Bundle mBundle = new Bundle(); mBundle.putInt("phoneid", mPhoneId); intent.putExtras(mBundle); startActivityForResult(intent, REQUEST_TEST); return true; } default: break; } return false; } private void addCellBroadcastSmsSetting() { ArrayList<String> data = getdata(); Log.i(TAG, "addCellBroadcastSms "); for (int i = 0; i < 5; i++) { try { ContentValues values = new ContentValues(); values.put("channel_id", i); values.put("channel_name", data.get(i)); values.put("enable", 0); Uri insertedUri = SqliteWrapper.insert( CellBroadcastSmsSettingActivity.this, mContentResolver, CBSMS_URI_SET, values); } catch (SQLiteException e) { SqliteWrapper.checkSQLiteException(this, e); } } } private class MyHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case MESSAGE_ACTIVATE_CB_SMS: // Only a log message here, because the received response is // always null Log.i(TAG, "Cell Broadcast SMS enabled/disabled."); break; case MESSAGE_GET_CB_SMS_CONFIG: int result[] = (int[]) ((AsyncResult) msg.obj).result; // check if the actual service categoties table size on the NV // is '0' if (result[0] == 0) { mPhone.getCellBroadcastSmsConfig(Message.obtain(mHandler, MESSAGE_GET_CB_SMS_CONFIG)); } break; case MESSAGE_SET_CB_SMS_CONFIG: break; default: Log.e(TAG, "Error! Unhandled message in CellBroadcastSms.java. Message: " + msg.what); break; } } } private void updateState(int state) { if (mState == state) { return; } mState = state; switch (state) { case SHOW_LIST: mSimList.setVisibility(View.VISIBLE); //mSimList.setDivider(android.drawable.divider_horizontal_bright); //mSimList.setDividerHeight(2); mMessage.setVisibility(View.GONE); setTitle(getString(R.string.cb_sms_settings)); setProgressBarIndeterminateVisibility(false); break; case SHOW_EMPTY: mSimList.setVisibility(View.GONE); mMessage.setVisibility(View.VISIBLE); setTitle(getString(R.string.cb_sms_settings)); setProgressBarIndeterminateVisibility(false); break; case SHOW_BUSY: mSimList.setVisibility(View.GONE); mMessage.setVisibility(View.GONE); setTitle(getString(R.string.refreshing)); setProgressBarIndeterminateVisibility(true); break; default: Log.e(TAG, "Invalid State"); } } private void enableCellBroadcast(boolean enable) { Log.i(TAG, "enableCellBroadcast"); if (enable) { mPhone.activateCellBroadcastSms( RILConstants.CDMA_CELL_BROADCAST_SMS_ENABLED, Message.obtain(mHandler, MESSAGE_ACTIVATE_CB_SMS)); } else { mPhone.activateCellBroadcastSms( RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED, Message.obtain(mHandler, MESSAGE_ACTIVATE_CB_SMS)); } } private void updeteSettingAll() { if (!mSetall) { try { ContentValues values = new ContentValues(); //Add for Dualsim values.put(COLUMN_ID, mPhoneId); values.put(COLUMN_LANG, mLang); values.put(COLUMN_CHANNEL_ENABLE, mEnable); values.put(COLUMN_MODE, mMode); SqliteWrapper.insert( this, mContentResolver, CBSMS_URI_SETALL, values); } catch (SQLiteException e) { SqliteWrapper.checkSQLiteException(this, e); } } else { try { ContentValues values = new ContentValues(); values.put(COLUMN_LANG, mLang); values.put(COLUMN_CHANNEL_ENABLE, mEnable); values.put(COLUMN_MODE, mMode); SqliteWrapper.update(CellBroadcastSmsSettingActivity.this, mContentResolver, CBSMS_URI_SETALL, values, COLUMN_ID+"="+mPhoneId, null); //SqliteWrapper.update(this, mContentResolver, CBSMS_URI_SETALL,values, null, null); } catch (SQLiteException e) { SqliteWrapper.checkSQLiteException(this, e); } } setLangATCmd(); } private int[] getEnableCellBroadcast() { Cursor cursor = mCursor; if (cursor != null) { if (cursor.moveToFirst()) { int count = mCursor.getCount(); int total_count = count * NO_OF_INTS_STRUCT_1 + 1; int j = 1; mConfigDataComplete = new int[total_count]; mConfigDataComplete[0] = count; Log.i(TAG, "getEnableCellBroadcast: total_count =" + total_count + " count :" + count); for (j = 1; j < total_count; j += NO_OF_INTS_STRUCT_1) { mConfigDataComplete[j] = cursor.getInt(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_ID)); mConfigDataComplete[j + 4] = cursor.getInt(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_ENABLE)); Log.i(TAG, "getEnableCellBroadcast: channel_id =" + mConfigDataComplete[j] + "enable :" + mConfigDataComplete[j + 4]); cursor.moveToNext(); } } } return mConfigDataComplete; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.i("onActivityResult: requestCode=" + requestCode, "resultCode" + resultCode + "+data=" + data); switch (requestCode) { case REQUEST_VIEW_CBSMS: if (resultCode == 20) { Log.i(TAG,"onActivityResult: mPos"+mPos ); Uri updateUri = ContentUris.withAppendedId( CBSMS_URI_SET, mPos); SqliteWrapper.delete(CellBroadcastSmsSettingActivity.this, mContentResolver, updateUri, null, null); refreshMessageList(); } else if (resultCode == 21) { String pos = data.getStringExtra("pos"); Log.i(TAG, "onActivityResult: pos" + pos); int channel_id = Integer.parseInt(data .getStringExtra(COLUMN_CHANNEL_ID)); String channel_name = data.getStringExtra(COLUMN_CHANNEL_NAME); boolean add = data.getBooleanExtra(ACTION, false); int enable = data.getIntExtra(COLUMN_CHANNEL_ENABLE, 0); Log.i(TAG,"onActivityResult: enable =" + enable); try { ContentValues values = new ContentValues(); values.put(COLUMN_CHANNEL_ID, channel_id); values.put(COLUMN_CHANNEL_NAME, channel_name); values.put(COLUMN_CHANNEL_ENABLE, enable); if (add) { Uri insertedUri = SqliteWrapper.insert( CellBroadcastSmsSettingActivity.this, mContentResolver, CBSMS_URI_SET, values); } else { Uri updateUri = ContentUris.withAppendedId( CBSMS_URI_SET, mPos); SqliteWrapper .update(CellBroadcastSmsSettingActivity.this, mContentResolver, updateUri, values, null, null); } if (add && (enable == 0)) { Log.i(TAG, "onActivityResult + mAllEnableChannel.length " + mAllEnableChannel.length); int i; int enableChannel[] = new int[mAllEnableChannel.length + 1]; for (i = 0; i < mAllEnableChannel.length; i++) { enableChannel[i] = mAllEnableChannel[i]; } enableChannel[i] = channel_id; mAllEnableChannel = enableChannel; Log.i(TAG, "onActivityResult + mAllEnableChannel " + mAllEnableChannel.toString()); setOneChannelATCmd(channel_id, true); } if (!add && (enable == 1)) { Log.i(TAG, "onActivityResult + mAllEnableChannel.length " + mAllEnableChannel.length); int i; int j = 0; int enableChannel[] = new int[mAllEnableChannel.length - 1]; for (i = 0; i < mAllEnableChannel.length; i++) { if (mAllEnableChannel[i] != channel_id) { enableChannel[j] = mAllEnableChannel[i]; j++; } } mAllEnableChannel = enableChannel; Log.i(TAG, "onActivityResult + mAllEnableChannel " + mAllEnableChannel.toString()); setOneChannelATCmd(channel_id, false); } refreshMessageList(); } catch (SQLiteException e) { SqliteWrapper.checkSQLiteException(this, e); } }else if(resultCode == 22){ refreshMessageList(); } break; case REQUEST_LANG: if (resultCode == 20) { mLang = data.getIntExtra(COLUMN_LANG, 0); Log.i(TAG, "onActivityResult: lang" + mLang); updeteSettingAll(); } break; case REQUEST_TEST: if (resultCode == 30) { int test = data.getIntExtra(COLUMN_MODE, 0); mMode = test; Log.i(TAG, "onActivityResult: test " + test); mPhone.activateCellBroadcastSms(test, Message.obtain(mHandler, MESSAGE_ACTIVATE_CB_SMS)); updeteSettingAll(); } break; default: break; } } ArrayList<String> getdata() { ArrayList<String> data = new ArrayList<String>(); data.add("test1"); data.add("test2"); data.add("test3"); data.add("test4"); data.add("test5"); data.add("test6"); return data; } ArrayList<String> getDest() { ArrayList<String> data = new ArrayList<String>(); data.add("getDest1"); data.add("getDest2"); data.add("getDest3"); data.add("getDest4"); data.add("getDest5"); data.add("getDest6"); return data; } public class MyListAdapter extends CursorAdapter { private static final String TAG = "MyListAdapter"; private final LayoutInflater mFactory; public MyListAdapter(Context context, Cursor cursor) { super(context, cursor, false /* auto-requery */); mFactory = LayoutInflater.from(context); } @Override public void bindView(View view, Context context, Cursor cursor) { TextView nametextView= (TextView) view.findViewById(R.id.channel_name); TextView idtextView= (TextView) view.findViewById(R.id.channel_id); ImageView imageView = (ImageView) view.findViewById(R.id.icon); int channel_id = cursor .getInt(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_ID)); String channel_name = cursor .getString(cursor .getColumnIndexOrThrow(COLUMN_CHANNEL_NAME)); Log.i(TAG, "MyListAdapter address: " + channel_name + "channel_id:" + channel_id); String id = String.valueOf(channel_id); imageView.setImageResource(R.drawable.cb_item); nametextView.setText(channel_name); nametextView.setTextColor(android.graphics.Color.WHITE); idtextView.setText(id); idtextView.setTextColor(android.graphics.Color.WHITE); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { Log.i(TAG, "inflating new view"); return mFactory.inflate(R.layout.cell_broadcast_setting_item, parent, false); } } }