final code 1

pull/9/head
pzvjlefpx 1 month ago
parent 41436c5a6b
commit 85878d1aa0

@ -0,0 +1,287 @@
package net.micode.notes.ui;
import static android.widget.Toast.LENGTH_SHORT;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
import net.micode.notes.R;
import net.micode.notes.data.Notes;
import net.micode.notes.data.Notes.NoteColumns;
import net.micode.notes.tool.DataUtils;
import java.io.File;
public class TrashFolderActivity extends Activity {
private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
private BackgroundQueryHandler mBackgroundQueryHandler;
private NotesListAdapter mNotesListAdapter;
private ListView mNotesListView;
private long mCurrentFolderId;
private ContentResolver mContentResolver;
private static final String TAG = "RecycleActivity";
private MenuItem menuItem;
private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recycle_bin);
initResources();
}
/**
* ,
*/
/**
* ,
* @param path
*/
private void bitmapBg(String path){
Bitmap bm;
try{
File file=new File(path);
if (file.exists()){//bitmap转换图片
bm = BitmapFactory.decodeFile(path);
Drawable drawable = new BitmapDrawable(bm);
getWindow().setBackgroundDrawable(drawable);
}
}catch (Exception e){//抛出异常
e.printStackTrace();
Toast.makeText(this, "自定义背景切换失败", LENGTH_SHORT).show();
}
}
@Override
protected void onStart() {
super.onStart();
startAsyncNotesListQuery();//启动查询
}
/**
*
*/
@SuppressLint({"InflateParams", "WorldReadableFiles"})
private void initResources() {
mContentResolver = this.getContentResolver();
mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver());
mCurrentFolderId = Notes.ID_TRASH_FOLER;
mNotesListView = findViewById(R.id.recycle_bin);
mNotesListView.addFooterView(LayoutInflater.from(this).inflate(R.layout.note_list_footer, null),
null, false);
mNotesListView.setOnItemClickListener(new OnListItemClickListener());
mNotesListAdapter = new NotesListAdapter(this);
mNotesListAdapter.setChoiceMode(true);
mNotesListView.setAdapter(mNotesListAdapter);
}
/**
* 便,NoteListActivity
*/
private void startAsyncNotesListQuery() {
//查询便签列表,与NoteListActivity类似
mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null,
Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, NORMAL_SELECTION, new String[]{
String.valueOf(mCurrentFolderId)
}, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC");
}
@SuppressLint("HandlerLeak")
private final class BackgroundQueryHandler extends AsyncQueryHandler {
public BackgroundQueryHandler(ContentResolver contentResolver) {
super(contentResolver);
}
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
if (token == FOLDER_NOTE_LIST_QUERY_TOKEN) {
mNotesListAdapter.changeCursor(cursor);
}
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
/**
* ,
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//重置菜单
menu.clear();
//从自定义xml中获取样式
getMenuInflater().inflate(R.menu.recyclebin_options, menu);
//绑定全选按钮
menuItem = menu.findItem(R.id.select_all);
return true;
}
/**
* 便,便,
*/
private void batchDelete() {
//如果没有选中任何便签
if (mNotesListAdapter.getSelectedCount() == 0) {
Log.e(TAG, "Send to desktop error");
//小弹窗提醒
Toast.makeText(this, R.string.error_delete_or_recover, LENGTH_SHORT).show();
return;
}
// 构建确认弹窗
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置弹窗标题
builder.setTitle(getString(R.string.alert_title_delete));
//设置弹窗图标
builder.setIcon(android.R.drawable.ic_dialog_alert);
//设置弹窗消息
builder.setMessage(getString(R.string.alert_message_realdelete));
//设置积极选项
builder.setPositiveButton(android.R.string.ok,
(dialog, which) -> {//点击确认选项后的事件
if (!DataUtils.batchDeleteNotes(mContentResolver, mNotesListAdapter
.getSelectedItemIds())) {
Log.e(TAG, "Delete notes error, should not happens");
}
//重置所有便签的选择状态
mNotesListAdapter.selectAll(false);
});
//设置消极选项
builder.setNegativeButton(android.R.string.cancel, null);
//弹出弹窗
builder.show();
}
/**
* 便,便trash,
*/
void recover() {
//如果没有选中任何便签
if (mNotesListAdapter.getSelectedCount() == 0) {
Log.e(TAG, "Send to desktop error");
//小弹窗提醒
Toast.makeText(this, R.string.error_delete_or_recover, LENGTH_SHORT).show();
return;
}
//构建弹窗
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置弹窗标题
builder.setTitle(getString(R.string.recover));
//设置弹窗图标
builder.setIcon(android.R.drawable.ic_dialog_alert);
//设置弹窗内消息
builder.setMessage(getString(R.string.alert_message_recover));
//设置积极选项
builder.setPositiveButton(android.R.string.ok,
(dialog, which) -> {//确认后执行的方法
if (mNotesListAdapter.getSelectedCount() != 0) {
//移动所选便签至根文件夹
DataUtils.batchMoveToFolder(mContentResolver,
mNotesListAdapter.getSelectedItemIds(), Notes.ID_ROOT_FOLDER);
//重置所有便签的选择状态
mNotesListAdapter.selectAll(false);
}
else//空选便签时执行
Log.e(TAG, "Recover error, no note was selected");
});
//设置消极选项
builder.setNegativeButton(android.R.string.cancel, null);
//显示弹窗
builder.show();
}
/**
*
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.recover) {//还原选项
//还原便签
recover();
} else if (item.getItemId() == R.id.realdelete) {//删除选项
//删除便签
batchDelete();
} else if (item.getItemId() == R.id.select_all) {//全选选项
//全选按钮状态切换
if (!mNotesListAdapter.isAllSelected()) {//若便签没有被全选的情况下点击全选按钮
//切换取消全选图标
item.setIcon(getResources().getDrawable(R.drawable.deselect_all));
//选择所有便签
mNotesListAdapter.selectAll(true);
} else {//如果便签已经被全选
//切换全选图标
item.setIcon(getResources().getDrawable(R.drawable.select_all));
//取消全选所有便签
mNotesListAdapter.selectAll(false);
}
}
return true;
}
/**
* 便,便
*/
private class OnListItemClickListener implements OnItemClickListener {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//当点击的是便签项时
if (view instanceof NotesListItem) {
//从视图获取便签项
NoteItemData item = ((NotesListItem) view).getItemData();
//判断是不是便签,防止点击到文件夹的情况,与上一句一样基本上没用
if (item.getType() == Notes.TYPE_NOTE) {
//定位
position = position - mNotesListView.getHeaderViewsCount();
//改变单个便签的被选择状态
mNotesListAdapter.setCheckedItem(position, !mNotesListAdapter.isSelectedItem(position));
//用于判断是否手动全选了便签
if (mNotesListAdapter.isAllSelected())
//切换取消全选图标
menuItem.setIcon(getResources().getDrawable(R.drawable.deselect_all));
else
//切换全选图标
menuItem.setIcon(getResources().getDrawable(R.drawable.select_all));
}
}
}
}
}
Loading…
Cancel
Save