package com.android.mms.ui;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SqliteWrapper;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.android.mms.R;
import com.android.mms.data.CursorMap;
public class MessageBoxDeleteSimActivity extends Activity implements View.OnClickListener,OnItemClickListener{
private static final Uri ICC_URI = Uri.parse("content://sms/icc");
static final int COLUMN_MSG_TYPE = 0;
static final int COLUMN_SMS_ADDRESS = 1;
static final int COLUMN_SMS_BODY = 3;
static final int COLUMN_SMS_DATE = 4;
private ContentResolver mContentResolver;
private ProgressDialog mDelMessProDialog;
private TextView mTitle;
private ListView mMsgList;
private CheckBox mSelectAllCheckbox;
private Button mDeleteBtn;
private Button mCancelBtn;
private static final int MENU_DELETE_ALL = 0;
private static final int MENU_MSG_LIST = 1;
private Cursor mCursor;
private SimAdapter simAdapter;
ItemView itemView;
private Context mContext;
private int mDelCount = 0;
Map<Integer, Map<Integer, String>> curMap = null;
//Add for Dualsim
private static final Uri ICC_URI1 = Uri.parse("content://sms/icc1");
private int PhoneId = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
mContext = this.getApplicationContext();
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mContentResolver = getContentResolver();
setContentView(R.layout.msg_box_delete_list);
setTitle();
initResource();
Intent curIt = getIntent();
Bundle curBundle = curIt.getExtras();
CursorMap c = curBundle.getParcelable("curMap");
curMap = c.map;
simAdapter = new SimAdapter(getBaseContext(),mCursor);
mMsgList.setAdapter(simAdapter);
}
@Override
protected void onDestroy() {
super.onDestroy();
if ( mCursor != null ) {
mCursor.close();
}
}
private void setTitle() {
mTitle = (TextView) findViewById(R.id.box_title);
mTitle.setText(getString(R.string.folder_simcard));
Intent it = getIntent();
Bundle bundle = it.getExtras();
if (bundle != null) {
PhoneId = bundle.getInt("phoneId");
}
}
private void initResource() {
mMsgList = (ListView) findViewById(R.id.box_messages_delete);
mMsgList.setOnItemClickListener(this);
mSelectAllCheckbox = (CheckBox) findViewById(R.id.checkbox_selected_all);
mSelectAllCheckbox.setOnClickListener(this);
mDeleteBtn = (Button) findViewById(R.id.DeleteButton);
mDeleteBtn.setOnClickListener(this);
mDeleteBtn.setEnabled(false);
mCancelBtn = (Button) findViewById(R.id.CancelButton);
mCancelBtn.setOnClickListener(this);
}
private final class ItemView{
TextView tv_address;
TextView tv_date;
TextView tv_subject;
ImageView mImageView;
CheckBox checkbox;
}
class DeleteMessageAsyncTask extends AsyncTask<Object,Void,Void>{
protected Void doInBackground(Object... object) {
for ( int i = 0; i < simAdapter.selectedMap.size(); i++ ) {
if ( simAdapter.selectedMap.get(i) ) {
String mid = MessageBoxDeleteSimActivity.this.curMap.get(i).get(4);
Uri simUri = null;
if(MessageUtils.isMSMS){
if(PhoneId == 0){
simUri = ICC_URI.buildUpon().appendPath(mid).build();
}else if(PhoneId ==1){
simUri = ICC_URI1.buildUpon().appendPath(mid).build();
}else{
//
}
}else{
simUri = ICC_URI.buildUpon().appendPath(mid).build();
}
SqliteWrapper.delete(mContext, mContentResolver, simUri, null, null);
}
}
return null;
}
protected void onPostExecute(Void result) {
if (mDelCount == 0) {
Intent it = new Intent(MessageBoxDeleteSimActivity.this, MessageBoxActivity.class);
Bundle bundle = new Bundle();
bundle.putString("boxType", "simcard");
if(MessageUtils.isMSMS){
bundle.putInt("phoneId", PhoneId);
}
it.putExtras(bundle);
startActivity(it);
MessageBoxDeleteSimActivity.this.finish();
mDelMessProDialog.dismiss();
}
}
}
class SimAdapter extends BaseAdapter{
Map<Integer,Boolean> selectedMap;
Cursor cur;
Context context;
public SimAdapter(Context context, Cursor c) {
super();
this.cur = c;
this.context = context;
selectedMap = new HashMap<Integer,Boolean>();
for(int i = 0 ;i<curMap.size();i++){
selectedMap.put(i, false);
}
}
@Override
public int getCount() {
return curMap.size();
}
@Override
public Object getItem(int position) {
return curMap.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.box_messages_delete,null);
itemView = new ItemView();
itemView.tv_address = (TextView)convertView.findViewById(R.id.box_msg_address);
itemView.tv_date = (TextView)convertView.findViewById(R.id.box_msg_date);
itemView.tv_subject=(TextView)convertView.findViewById(R.id.box_msg_subject);
itemView.checkbox = (CheckBox)convertView.findViewById(R.id.checkbox_select);
itemView.mImageView = (ImageView)convertView.findViewById(R.id.msg_type_image);
convertView.setTag(itemView);
}
ItemView itemView =(ItemView)convertView.getTag();
String address = curMap.get(position).get(1);
itemView.tv_address.setText(address);
long datel = Long.parseLong(curMap.get(position).get(3));
String date = MessageUtils.formatTimeStampString(context, datel);
itemView.tv_date.setText(String.valueOf(date));
String subject = curMap.get(position).get(2);
itemView.tv_subject.setText(subject);
itemView.checkbox.setChecked(selectedMap.get(position));
ItemMessage im = new ItemMessage();
im.id =curMap.get(position).get(4);
itemView.checkbox.setChecked(selectedMap.get(position));
return convertView;
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
ItemView views = (ItemView) view.getTag();
views.checkbox.toggle();
simAdapter.selectedMap.put(position, views.checkbox.isChecked());
if (simAdapter.selectedMap.containsValue(false)) {
mSelectAllCheckbox.setChecked(false);
} else {
mSelectAllCheckbox.setChecked(true);
}
if (simAdapter.selectedMap.containsValue(true)) {
mDeleteBtn.setEnabled(true);
} else {
mDeleteBtn.setEnabled(false);
}
simAdapter.notifyDataSetChanged();
}
@Override
public void onClick(View v) {
if(v == mSelectAllCheckbox){
if(mSelectAllCheckbox.isChecked()){
for(int i = 0;i<curMap.size();i++){
simAdapter.selectedMap.put(i, true);
ItemMessage im = new ItemMessage();
im.id = curMap.get(i).get(4);
}
mDeleteBtn.setEnabled(true);
}else{
for(int i=0;i<curMap.size();i++){
simAdapter.selectedMap.put(i, false);
}
mDeleteBtn.setEnabled(false);
}
simAdapter.notifyDataSetChanged();
} else if (v == mDeleteBtn) {
new AlertDialog.Builder(this).setTitle(R.string.clearConfirmation_title)
.setMessage(R.string.clearConfirmation)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
mDelMessProDialog = new ProgressDialog(MessageBoxDeleteSimActivity.this);
mDelMessProDialog.setTitle(getString(R.string.delete_message));
mDelMessProDialog.setMessage(getText(R.string.wait_message));
final DeleteMessageAsyncTask task = new DeleteMessageAsyncTask();
mDelMessProDialog.show();
task.execute(simAdapter.selectedMap);
}
}).setCancelable(true).create().show();
} else if (v == mCancelBtn) {
Intent it = new Intent(MessageBoxDeleteSimActivity.this, MessageBoxActivity.class);
Bundle bundle = new Bundle();
bundle.putString("boxType", "simcard");
if(MessageUtils.isMSMS){
bundle.putInt("phoneId", PhoneId);
}
it.putExtras(bundle);
startActivity(it);
this.finish();
}
}
class ItemMessage {
String id;
public boolean equals(Object o) {
boolean result = false;
ItemMessage im = (ItemMessage) o;
if (id.equals(im.id)) {
result = true;
} else {
result = false;
}
return result;
}
}
}