MessageActivity.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. package me.yoqi.mobile.safe;
  2. import java.util.ArrayList;
  3. import android.app.AlertDialog;
  4. import android.app.TabActivity;
  5. import android.content.BroadcastReceiver;
  6. import android.content.ContentProviderOperation;
  7. import android.content.ContentValues;
  8. import android.content.Context;
  9. import android.content.DialogInterface;
  10. import android.content.DialogInterface.OnClickListener;
  11. import android.content.Intent;
  12. import android.content.IntentFilter;
  13. import android.content.OperationApplicationException;
  14. import android.database.Cursor;
  15. import android.net.Uri;
  16. import android.os.Bundle;
  17. import android.os.RemoteException;
  18. import android.provider.Contacts.Phones;
  19. import android.provider.ContactsContract;
  20. import android.provider.ContactsContract.CommonDataKinds.Phone;
  21. import android.provider.ContactsContract.CommonDataKinds.StructuredName;
  22. import android.provider.ContactsContract.Data;
  23. import android.provider.ContactsContract.RawContacts;
  24. import android.view.LayoutInflater;
  25. import android.view.Menu;
  26. import android.view.MenuItem;
  27. import android.view.View;
  28. import android.widget.AdapterView;
  29. import android.widget.AdapterView.OnItemLongClickListener;
  30. import android.widget.ArrayAdapter;
  31. import android.widget.Button;
  32. import android.widget.EditText;
  33. import android.widget.LinearLayout;
  34. import android.widget.ListView;
  35. import android.widget.RelativeLayout;
  36. import android.widget.TabHost;
  37. import android.widget.TabHost.OnTabChangeListener;
  38. import android.widget.Toast;
  39. import me.yoqi.mobile.db.DbAdapter;
  40. import me.yoqi.mobile.info.Message_Forbid_Info;
  41. import me.yoqi.mobile.tool.BroadCastTool;
  42. public class MessageActivity extends TabActivity implements OnTabChangeListener {
  43. private DbAdapter mDbAdapter;
  44. private Cursor mCursorTab1;
  45. private Cursor mCursorTab2;
  46. private ListView mListViewTab1;
  47. private ListView mListViewTab2;
  48. private static final int MENU_RUBBISH_BACK = Menu.FIRST;
  49. private static final int MENU_RUBBISH_REPLY = Menu.FIRST+1;
  50. private static final int MENU_RUBBISH_CALL = Menu.FIRST+2;
  51. private static final int MENU_RUBBISH_DELETE = Menu.FIRST+3;
  52. private static final int MENU_RUBBISH_MULTIPLE = Menu.FIRST+4;
  53. private static final int MENU_FORBID_REPLY = Menu.FIRST+5;
  54. private static final int MENU_FORBID_CALL = Menu.FIRST+6;
  55. private static final int MENU_FORBID_DELETE = Menu.FIRST+7;
  56. private static final int MENU_FORBID_MULTIPLE = Menu.FIRST+8;
  57. private static final int MENU_FORBID_ADD = Menu.FIRST+9;
  58. private static final int MENU_FORBID_ADD_FIRST = Menu.FIRST+10;
  59. private static final int MENU_ADD_CANTACT = Menu.FIRST+11;
  60. @Override
  61. protected void onCreate(Bundle savedInstanceState) {
  62. super.onCreate(savedInstanceState);
  63. setContentView(R.layout.tabhost_public);
  64. initFindViewById();
  65. TabHost mTabHost=getTabHost();
  66. mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("拦截记录",getResources().getDrawable(R.drawable.tab_icon_1)).setContent(R.id.tabhost_public_listview));
  67. mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("黑名单",getResources().getDrawable(R.drawable.tab_icon_2)).setContent(R.id.tabhost_public_listview_tab2));
  68. mTabHost.setOnTabChangedListener(this);
  69. mTabHost.setCurrentTab(0);
  70. mDbAdapter = new DbAdapter(MessageActivity.this);
  71. mDbAdapter.open();
  72. initTab1Data();
  73. initTabListViewListener(mListViewTab1);
  74. }
  75. private MyBroadCastReceiver mMBCR;
  76. private IntentFilter mIF;
  77. @Override
  78. protected void onResume(){
  79. super.onResume();
  80. mIF = new IntentFilter();
  81. mIF.addAction(BroadCastTool.SMS_RECEIVED_ACTION);
  82. mMBCR = new MyBroadCastReceiver();
  83. this.registerReceiver(mMBCR, mIF);
  84. }
  85. @Override
  86. protected void onDestroy(){
  87. super.onDestroy();
  88. this.unregisterReceiver(mMBCR);
  89. mDbAdapter.close();
  90. }
  91. /** 打電話*/
  92. Intent mIntent;
  93. private void actionCALL(int position, Cursor c,String column){
  94. c.moveToPosition(position);
  95. Uri uri = Uri.parse("tel:"+c.getString(c.getColumnIndex(column)));
  96. mIntent = new Intent(Intent.ACTION_CALL, uri);
  97. startActivity(mIntent);
  98. }
  99. /**發短信 */
  100. private void actionSMS(int position, Cursor c,String column){
  101. c.moveToPosition(position);
  102. mIntent = new Intent(Intent.ACTION_VIEW);
  103. mIntent.putExtra("address", c.getString(c.getColumnIndex(column)));
  104. mIntent.setType("vnd.android-dir/mms-sms");
  105. startActivity(mIntent);
  106. }
  107. /** 刪除標記*/
  108. private void delMarkItemData(ListView lv,Cursor c,String table){
  109. int mContant = lv.getCount();
  110. for(int i=0;i!=mContant;i++){
  111. if(lv.getCheckedItemPositions().get(i)){
  112. c.moveToPosition(i);
  113. long rowId = c.getLong(c.getColumnIndex(DbAdapter.TABLE_ID));
  114. mDbAdapter.getDel(rowId, table);
  115. }
  116. }
  117. }
  118. private void returnMessage(){
  119. for(int i=0;i!=mListViewTab1.getCount();i++){
  120. if(mListViewTab1.getCheckedItemPositions().get(i)){
  121. ContentValues cv = new ContentValues();
  122. cv.put("type", "1");
  123. mCursorTab1.moveToPosition(i);
  124. cv.put("address", mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_PHONE)));
  125. String rowContent = mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_CONTENT));
  126. cv.put("body", rowContent);
  127. getContentResolver().insert(Uri.parse("content://sms/inbox"), cv);
  128. long rowId = mCursorTab1.getLong(mCursorTab1.getColumnIndex(DbAdapter.TABLE_ID));
  129. mDbAdapter.getDel(rowId, DbAdapter.MESSAGE_RUBBISH_TABLE_NAME);
  130. }
  131. }
  132. }
  133. private String getPhoneNumber(int position,Cursor c){
  134. c.moveToPosition(position);
  135. return c.getString(c.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_PHONE));
  136. }
  137. EditText mCallName;
  138. EditText mCallNumber;
  139. private void addContact(String phone){
  140. LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  141. LinearLayout mLL = (LinearLayout)mLI.inflate(R.layout.set_call_record_name, null);
  142. mCallName = (EditText)mLL.findViewById(R.id.EditText01);
  143. mCallNumber = (EditText)mLL.findViewById(R.id.EditText02);
  144. mCallNumber.setText(phone);
  145. new AlertDialog.Builder(this).setTitle("加入联系人").
  146. setView(mLL).
  147. setPositiveButton("确定", new OnClickListener() {
  148. @Override
  149. public void onClick(DialogInterface dialog, int which) {
  150. if(mCallName.getText().toString().length() != 0&&mCallNumber.getText().toString().length() != 0){
  151. ContentValues cv = new ContentValues();
  152. ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
  153. ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
  154. builder.withValues(cv);
  155. operationList.add(builder.build());
  156. builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
  157. builder.withValueBackReference(StructuredName.RAW_CONTACT_ID, 0);
  158. builder.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
  159. builder.withValue(StructuredName.DISPLAY_NAME, mCallName.getText().toString());
  160. operationList.add(builder.build());
  161. builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
  162. builder.withValueBackReference(Phone.RAW_CONTACT_ID, 0);
  163. builder.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
  164. builder.withValue(Phone.NUMBER, mCallNumber.getText().toString());
  165. builder.withValue(Data.IS_PRIMARY, 1);
  166. operationList.add(builder.build());
  167. try {
  168. getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);
  169. } catch (RemoteException e) {
  170. e.printStackTrace();
  171. } catch (OperationApplicationException e) {
  172. e.printStackTrace();
  173. }
  174. Toast.makeText(getApplicationContext(), "成功添加!", Toast.LENGTH_SHORT).show();
  175. }else{
  176. Toast.makeText(getApplicationContext(), "姓名或号码不能为空!", Toast.LENGTH_SHORT).show();
  177. addContact(mCallNumber.getText().toString());
  178. }
  179. }
  180. }).setNegativeButton("取消", null).create().show();
  181. }
  182. /** 多选时打电话只拨打第一个被选中的号码,发短信给第一个被选中的号码发送*/
  183. private void callMethod(ListView lv,String sms_call,Cursor c,String column,String addContact){
  184. if(lv.getCheckedItemPositions().size() >= 1){
  185. for(int i=0;i!=lv.getCount();i++){
  186. if(lv.getCheckedItemPositions().get(i)){
  187. c.moveToPosition(i);
  188. String phone = c.getString(c.getColumnIndex(column));
  189. if(sms_call.equals("sms")){
  190. if("addContact".equals(addContact)){
  191. addContact(phone);
  192. }else{
  193. mIntent = new Intent(Intent.ACTION_VIEW);
  194. mIntent.putExtra("address", phone);
  195. mIntent.setType("vnd.android-dir/mms-sms");
  196. startActivity(mIntent);
  197. }
  198. }else if(sms_call.equals("call")){
  199. if("addContact".equals(addContact)){
  200. addContact(phone);
  201. }else{
  202. Uri uri = Uri.parse("tel:"+phone);
  203. mIntent = new Intent(Intent.ACTION_DIAL, uri);
  204. startActivity(mIntent);
  205. }
  206. }
  207. break;
  208. }
  209. }
  210. }
  211. }
  212. /**-------------------------------初始化基本组件--------------------------------------------------------------------------------------------------*/
  213. private void initFindViewById(){
  214. mListViewTab1 = (ListView)findViewById(R.id.tabhost_public_listview);
  215. mListViewTab2 = (ListView)findViewById(R.id.tabhost_public_listview_tab2);
  216. }
  217. /**-------------------------------点击不同标签时的事件监听 ----------------------------------------------------------------------------------*/
  218. private boolean isCheckedTab1OrTab2 = false;
  219. public void onTabChanged(String tabId) {
  220. if("tab1".equals(tabId)){
  221. isCheckedTab1OrTab2 = false;
  222. initTab1Data();
  223. }else if("tab2".equals(tabId)){
  224. isCheckedTab1OrTab2 = true;
  225. initTab2Data();
  226. }
  227. }
  228. private int i = 0;
  229. /**---------------------------------------------从数据库中获得并加载垃圾短信数据Start-------------------------------------------------*/
  230. private void initTab1Data(){
  231. mCursorTab1=mDbAdapter.getAll(DbAdapter.MESSAGE_RUBBISH_TABLE_NAME) ;
  232. this.stopManagingCursor(mCursorTab1);
  233. i = 0;
  234. int mCount = mCursorTab1.getCount();
  235. if(mCount >= 0){
  236. mArray = new String[mCount];
  237. if(mCursorTab1.moveToFirst()){
  238. do{
  239. mArray[i] = "垃圾号码:"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_PHONE))+"\n"+
  240. "收件时间:"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_TIME))+"\n\n"+
  241. "短信内容:\n"+mCursorTab1.getString(mCursorTab1.getColumnIndex(DbAdapter.MESSAGE_RUBBISH_CONTENT));
  242. i++;
  243. }while(mCursorTab1.moveToNext());
  244. }
  245. ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(MessageActivity.this,android.R.layout.simple_list_item_checked,mArray);
  246. mListViewTab1.setAdapter(mAdapter);
  247. mListViewTab1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
  248. }
  249. }
  250. String[] mArray;
  251. private void initTab2Data(){
  252. mCursorTab2 = mDbAdapter.getAll(DbAdapter.MESSAGE_FORBID_TABLE_NAME);
  253. this.startManagingCursor(mCursorTab2);
  254. i = 0;
  255. int mCount = mCursorTab2.getCount();
  256. if(mCount >= 0){
  257. mArray = new String[mCount];
  258. if(mCursorTab2.moveToFirst()){
  259. do{
  260. mArray[i] = mCursorTab2.getString(mCursorTab2.getColumnIndex(DbAdapter.MESSAGE_FORBID_PHONE));
  261. i++;
  262. }while(mCursorTab2.moveToNext());
  263. }
  264. ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(MessageActivity.this,android.R.layout.simple_list_item_checked,mArray);
  265. mListViewTab2.setAdapter(mAdapter);
  266. mListViewTab2.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
  267. }
  268. }
  269. /*---------------------------------------------从数据库中获得并加载垃圾短信数据End----------------------------------------------------*/
  270. /**---------------------------------------------列表项的长按事件监听Start---------------------------------------------------------------------*/
  271. private void initTabListViewListener(final ListView listview){
  272. // listview.setOnItemClickListener(new OnItemClickListener(){//单击事件监听
  273. // public void onItemClick(AdapterView<?> arg0, View arg1, int position,
  274. // long id) {
  275. // }
  276. // });
  277. listview.setOnItemLongClickListener(new OnItemLongClickListener(){//长按事件监听
  278. @Override
  279. public boolean onItemLongClick(AdapterView<?> parent, View view,
  280. int position, long id) {
  281. Toast.makeText(MessageActivity.this, mArray[position], Toast.LENGTH_LONG).show();
  282. return false;
  283. }
  284. });
  285. }
  286. /*---------------------------------------------列表项的长按事件监听End---------------------------------------------------------------------*/
  287. /*--------------------------------------------------------------------------------------关于动态菜单Begin---------------------------------------*/
  288. boolean isCreatePreparedOptionMenu1 = true;
  289. boolean isCreatePreparedOptionMenu2 = false;
  290. boolean isCreatePreparedOptionMenu3 = false;
  291. @Override
  292. public boolean onPrepareOptionsMenu(Menu menu) {
  293. if(isCheckedTab1OrTab2 == false){
  294. isCreatePreparedOptionMenu3 = false;
  295. if(mListViewTab1.getCount()>0){
  296. if(isCreatePreparedOptionMenu1){
  297. menu.add(0, MENU_RUBBISH_REPLY, 0, "回复").setIcon(android.R.drawable.ic_menu_send);
  298. menu.add(0, MENU_RUBBISH_CALL, 0, "拨打").setIcon(android.R.drawable.ic_menu_call);
  299. menu.add(0, MENU_RUBBISH_DELETE, 0, "删除").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
  300. menu.add(0, MENU_RUBBISH_MULTIPLE, 0, "清空").setIcon(android.R.drawable.ic_menu_delete);
  301. menu.add(0, MENU_RUBBISH_BACK, 0, "恢复").setIcon(android.R.drawable.ic_menu_rotate);
  302. menu.add(0, MENU_ADD_CANTACT, 0, "加入联系人").setIcon(android.R.drawable.ic_menu_add);
  303. isCreatePreparedOptionMenu1 = false;
  304. }
  305. }else{
  306. menu.removeItem(MENU_RUBBISH_BACK);
  307. menu.removeItem(MENU_RUBBISH_REPLY);
  308. menu.removeItem(MENU_RUBBISH_CALL);
  309. menu.removeItem(MENU_RUBBISH_DELETE);
  310. menu.removeItem(MENU_RUBBISH_MULTIPLE);
  311. menu.removeItem(MENU_ADD_CANTACT);
  312. isCreatePreparedOptionMenu1 = true;
  313. }
  314. }else{
  315. menu.removeItem(MENU_RUBBISH_BACK);
  316. menu.removeItem(MENU_RUBBISH_REPLY);
  317. menu.removeItem(MENU_RUBBISH_CALL);
  318. menu.removeItem(MENU_RUBBISH_DELETE);
  319. menu.removeItem(MENU_RUBBISH_MULTIPLE);
  320. menu.removeItem(MENU_ADD_CANTACT);
  321. isCreatePreparedOptionMenu1 = true;
  322. }
  323. if(isCheckedTab1OrTab2 == true){
  324. if(mListViewTab2.getCount()>0){
  325. if(!isCreatePreparedOptionMenu2){
  326. menu.add(0, MENU_FORBID_ADD, 0, "添加").setIcon(android.R.drawable.ic_menu_add);
  327. menu.add(0, MENU_FORBID_REPLY, 0, "回复").setIcon(android.R.drawable.ic_menu_send);
  328. menu.add(0, MENU_FORBID_CALL, 0, "拨打").setIcon(android.R.drawable.ic_menu_call);
  329. menu.add(0, MENU_FORBID_DELETE, 0, "删除").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
  330. menu.add(0, MENU_FORBID_MULTIPLE, 0, "清空").setIcon(android.R.drawable.ic_menu_delete);
  331. isCreatePreparedOptionMenu2 = true;
  332. }
  333. menu.removeItem(MENU_FORBID_ADD_FIRST);
  334. isCreatePreparedOptionMenu3 = false;
  335. }else{
  336. if(!isCreatePreparedOptionMenu3){
  337. menu.add(0, MENU_FORBID_ADD_FIRST, 0, "添加").setIcon(android.R.drawable.ic_menu_add);
  338. isCreatePreparedOptionMenu3 = true;
  339. }
  340. menu.removeItem(MENU_FORBID_REPLY);
  341. menu.removeItem(MENU_FORBID_CALL);
  342. menu.removeItem(MENU_FORBID_DELETE);
  343. menu.removeItem(MENU_FORBID_MULTIPLE);
  344. menu.removeItem(MENU_FORBID_ADD);
  345. isCreatePreparedOptionMenu2 = false;
  346. }
  347. }else{
  348. menu.removeItem(MENU_FORBID_REPLY);
  349. menu.removeItem(MENU_FORBID_CALL);
  350. menu.removeItem(MENU_FORBID_DELETE);
  351. menu.removeItem(MENU_FORBID_MULTIPLE);
  352. menu.removeItem(MENU_FORBID_ADD);
  353. menu.removeItem(MENU_FORBID_ADD_FIRST);
  354. isCreatePreparedOptionMenu2 = false;
  355. }
  356. return super.onPrepareOptionsMenu(menu);
  357. }
  358. @Override
  359. public boolean onOptionsItemSelected(MenuItem item) {
  360. int positionTab1 = mListViewTab1.getSelectedItemPosition();
  361. int positionTab2 = mListViewTab2.getSelectedItemPosition();
  362. switch(item.getItemId()){
  363. case MENU_RUBBISH_REPLY:
  364. if(positionTab1 != -1){
  365. actionSMS(positionTab1,mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE);
  366. }else{
  367. callMethod(mListViewTab1,"sms",mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE,"");
  368. }
  369. break;
  370. case MENU_RUBBISH_CALL:
  371. if(positionTab1 != -1){
  372. actionCALL(positionTab1,mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE);
  373. }else{
  374. callMethod(mListViewTab1,"call",mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE,"");
  375. }
  376. break;
  377. case MENU_RUBBISH_DELETE:
  378. if(positionTab1 != -1){
  379. mCursorTab1.moveToPosition(positionTab1);
  380. long rowId = mCursorTab1.getLong(mCursorTab1.getColumnIndex(DbAdapter.TABLE_ID));
  381. mDbAdapter.getDel(rowId, DbAdapter.MESSAGE_RUBBISH_TABLE_NAME);
  382. }else{
  383. delMarkItemData(mListViewTab1,mCursorTab1,DbAdapter.MESSAGE_RUBBISH_TABLE_NAME);
  384. }
  385. initTab1Data();
  386. break;
  387. case MENU_RUBBISH_MULTIPLE:
  388. mDbAdapter.deleteTable(DbAdapter.MESSAGE_RUBBISH_TABLE_NAME);
  389. initTab1Data();
  390. break;
  391. case MENU_RUBBISH_BACK:
  392. returnMessage();
  393. initTab1Data();
  394. break;
  395. case MENU_FORBID_ADD:
  396. case MENU_FORBID_ADD_FIRST:
  397. addForbidPhone();
  398. break;
  399. case MENU_FORBID_REPLY:
  400. if(positionTab2 != -1){
  401. actionSMS(positionTab2,mCursorTab2,DbAdapter.MESSAGE_FORBID_PHONE);
  402. }else{
  403. callMethod(mListViewTab2,"sms",mCursorTab2,DbAdapter.MESSAGE_FORBID_PHONE,"");
  404. }
  405. break;
  406. case MENU_FORBID_CALL:
  407. if(positionTab2 != -1){
  408. actionCALL(positionTab2,mCursorTab2,DbAdapter.MESSAGE_FORBID_PHONE);
  409. }else{
  410. callMethod(mListViewTab2,"call",mCursorTab2,DbAdapter.MESSAGE_FORBID_PHONE,"");
  411. }
  412. break;
  413. case MENU_FORBID_DELETE:
  414. if(positionTab2 != -1){
  415. mCursorTab2.moveToPosition(positionTab2);
  416. long rowId = mCursorTab2.getLong(mCursorTab2.getColumnIndex(DbAdapter.TABLE_ID));
  417. mDbAdapter.getDel(rowId, DbAdapter.MESSAGE_FORBID_TABLE_NAME);
  418. }else{
  419. delMarkItemData(mListViewTab2,mCursorTab2,DbAdapter.MESSAGE_FORBID_TABLE_NAME);
  420. }
  421. initTab2Data();
  422. break;
  423. case MENU_FORBID_MULTIPLE:
  424. mDbAdapter.deleteTable(DbAdapter.MESSAGE_FORBID_TABLE_NAME);
  425. initTab2Data();
  426. break;
  427. case MENU_ADD_CANTACT:
  428. if(positionTab1 != -1){
  429. addContact(getPhoneNumber(positionTab1, mCursorTab1));
  430. }else{
  431. callMethod(mListViewTab1,"sms",mCursorTab1,DbAdapter.MESSAGE_RUBBISH_PHONE,"addContact");
  432. }
  433. break;
  434. }
  435. return super.onOptionsItemSelected(item);
  436. }
  437. /*--------------------------------------------------------------------------------------关于动态菜单End----------------------------------------------*/
  438. /*--------------------------------------------------------------------------------------接收到垃圾短信时的广播接收器Begin------------------*/
  439. class MyBroadCastReceiver extends BroadcastReceiver{
  440. @Override
  441. public void onReceive(Context context, Intent intent) {
  442. if(intent.getAction().equals(BroadCastTool.SMS_RECEIVED_ACTION)){
  443. initTab1Data();
  444. }
  445. }
  446. }
  447. /*--------------------------------------------------------------------------------------接收到垃圾短信时的广播接收器End---------------------*/
  448. /**---------------------------------------------------------------------------------------添加黑名单的Dialog-------------------------------------------*/
  449. EditText mForbidPhone ;
  450. private void addForbidPhone(){
  451. LayoutInflater mLI = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  452. RelativeLayout mRL = (RelativeLayout)mLI.inflate(R.layout.message_forbid_add, null);
  453. mForbidPhone = (EditText)mRL.findViewById(R.id.new_forbid_phone);
  454. Button mButton=(Button)mRL.findViewById(R.id.get_system_contact);
  455. mButton.setOnClickListener(new View.OnClickListener() {
  456. @Override
  457. public void onClick(View v) {
  458. showMulitAlertDialog();
  459. }
  460. });
  461. new AlertDialog.Builder(MessageActivity.this).setTitle("添加黑名单").setView(mRL)
  462. .setPositiveButton("确定", new OnClickListener(){
  463. public void onClick(DialogInterface arg0, int arg1) {
  464. String mNewForbidPhone = mForbidPhone.getText().toString();
  465. if(mNewForbidPhone.length() < 3){
  466. Toast.makeText(MessageActivity.this, "输入错误!", Toast.LENGTH_SHORT).show();
  467. }else{
  468. String mStr[] = mNewForbidPhone.split(";");
  469. for(int i = 0;i != mStr.length;i++){
  470. String phone = mStr[i].split(":").length == 1?mStr[i].split(":")[0]:mStr[i].split(":")[1];
  471. if(!(mDbAdapter.getPhone(phone, 2)).moveToFirst()){
  472. Message_Forbid_Info mMFI = new Message_Forbid_Info();
  473. mMFI.setMessage_forbid_phone(phone);
  474. mDbAdapter.getAdd(mMFI);
  475. }else{
  476. Toast.makeText(MessageActivity.this, "号码"+phone+"已存在!", Toast.LENGTH_SHORT).show();
  477. }
  478. }
  479. initTab2Data();
  480. Toast.makeText(MessageActivity.this, "添加成功!", Toast.LENGTH_SHORT).show();
  481. }
  482. }
  483. }).setNegativeButton("取消", null).show();
  484. }
  485. private ListView mLV;
  486. @SuppressWarnings("deprecation")
  487. private void showMulitAlertDialog(){
  488. Cursor mCursor=getContentResolver().query(Phones.CONTENT_URI, new String[]{"_id","name","number"}, null, null, "number desc");
  489. startManagingCursor(mCursor);
  490. if(mCursor.moveToFirst()){
  491. int m = 0;
  492. String mContant[] = new String[mCursor.getCount()];
  493. do{
  494. String phoneNumber = mCursor.getString(mCursor.getColumnIndex(Phones.NUMBER));
  495. mContant[m] = mCursor.getString(mCursor.getColumnIndex(Phones.NAME))+":"+(phoneNumber.length() == 13?phoneNumber.substring(2):phoneNumber);
  496. m++;
  497. }while(mCursor.moveToNext());
  498. initListData(mContant);
  499. }
  500. }
  501. String checkInfo;
  502. private void initListData(final String[] contant){
  503. AlertDialog mAlertDialog=new AlertDialog.Builder(this).setMultiChoiceItems(contant,
  504. new boolean[contant.length],
  505. new DialogInterface.OnMultiChoiceClickListener() {
  506. @Override
  507. public void onClick(DialogInterface dialog, int which, boolean isChecked) {
  508. }
  509. }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
  510. @Override
  511. public void onClick(DialogInterface dialog, int which) {
  512. checkInfo = "";
  513. for(int i=0;i!=contant.length;i++){
  514. if(mLV.getCheckedItemPositions().get(i)){
  515. checkInfo += mLV.getAdapter().getItem(i).toString()+";";
  516. }
  517. }
  518. mForbidPhone.setText(checkInfo.substring(0, checkInfo.length()));
  519. }
  520. }).setNegativeButton("取消", null).create();
  521. mLV=mAlertDialog.getListView();
  522. mAlertDialog.show();
  523. }
  524. }