package com.ittianyu.mobileguard.activity;
import android.content.Intent;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import com.ittianyu.mobileguard.R;
import com.ittianyu.mobileguard.activity.base.BaseActivityUpEnable;
import com.ittianyu.mobileguard.constant.Constant;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* restore service activity
*/
public class RestoreContactsAndSmsActivity extends BaseActivityUpEnable {
// view
private ListView lvFile;
// data
private File dir;
private int which;
private List<String> filesName;
private List<String> datas;
private List<Integer> checkedItemsId = new ArrayList<>();
private ArrayAdapter<String> adapter;
/**
* delete the selected item
*/
private void deleteSelectedItems() {
// no checked item
if(0 == checkedItemsId.size()) {
return;
}
// delete file
for (int index: checkedItemsId) {
String fileName = filesName.get(index);
File file = new File(dir, fileName);
file.delete();
}
// then reload all datas
reloadData();
Toast.makeText(this, R.string.success_to_delete, Toast.LENGTH_SHORT).show();
}
/**
* reload all data
*/
private void reloadData() {
// clear list
checkedItemsId.clear();
datas.clear();
filesName.clear();
// get file and time list
String[] files = dir.list();
filesName = new ArrayList<>(files.length);
datas = new ArrayList<>(files.length);
for (int i = 0; i < files.length; i++) {
String fileName = files[i];
String time = fileName.substring(0, fileName.lastIndexOf('.'));
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timeStr = format.format(new Date(Long.parseLong(time)));
filesName.add(fileName);
datas.add(timeStr);
System.out.println(fileName);
}
// refresh ListView
adapter = new ArrayAdapter<>(this, R.layout.item_restore_lv, datas);
// show list
lvFile.setAdapter(adapter);
}
/**
* construct method
*/
public RestoreContactsAndSmsActivity() {
super(R.string.title_restore_activity);
}
/**
* 1
*/
@Override
protected void initView() {
setContentView(R.layout.activity_restore_contacts_and_sms);
lvFile = (ListView) findViewById(R.id.lv_file);
}
/**
* 2
*/
@Override
protected void initData() {
Intent intent = getIntent();
which = intent.getIntExtra(Constant.EXTRA_RESTORE_TYPE, 0);
onRestore(which);
}
/**
* search contacts backup files
* if no files, give user a tips
* if have files, show a ListView
*
* @param which 0:contacts 1:sms
*/
private void onRestore(int which) {
String type = null;
switch (which) {
case 0:
type = "/contacts";
break;
case 1:
type = "/sms";
break;
default:
Toast.makeText(this, R.string.tips_no_data_to_restore, Toast.LENGTH_SHORT).show();
return;
}
dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/" + getString(R.string.app_name) + type);
// check files exist
if (!dir.isDirectory() || 0 == dir.list().length) {
Toast.makeText(this, R.string.tips_no_data_to_restore, Toast.LENGTH_SHORT).show();
return;
}
// get file and time list
String[] files = dir.list();
filesName = new ArrayList<>(files.length);
datas = new ArrayList<>(files.length);
for (int i = 0; i < files.length; i++) {
String fileName = files[i];
String time = fileName.substring(0, fileName.lastIndexOf('.'));
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timeStr = format.format(new Date(Long.parseLong(time)));
filesName.add(fileName);
datas.add(timeStr);
}
adapter = new ArrayAdapter<>(this, R.layout.item_restore_lv, datas);
// show list
lvFile.setAdapter(adapter);
}
/**
* 3
*/
@Override
protected void initEvent() {
// set on item click event
lvFile.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// normal mode
String fileName = filesName.get(position);
Intent intent = new Intent();
intent.putExtra(Constant.EXTRA_RESTORE_FILE, new File(dir, fileName));
intent.putExtra(Constant.EXTRA_RESTORE_TYPE, which);
setResult(RESULT_OK, intent);
finish();
}
});
// enable batch delete
lvFile.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
lvFile.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.conversation_multi_select_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.m_delete:
deleteSelectedItems();
mode.finish(); // Action picked, so close the CAB
return true;
}
return false;
}
@Override
public void onDestroyActionMode(android.view.ActionMode mode) {
}
@Override
public void onItemCheckedStateChanged(android.view.ActionMode mode, int position, long id, boolean checked) {
System.out.println("position:" + position + " checked:" + checked);
if(checked) {
checkedItemsId.add(new Integer(position));
} else {
checkedItemsId.remove(new Integer(position));
}
}
});
}
}