新增了文件夹嵌套的功能

tangbo_branch
tb202302116011 9 hours ago
parent ca8c2205e0
commit 07df63aaf5

@ -272,11 +272,27 @@ public class DataUtils {
* @return truefalse
*/
public static boolean checkVisibleFolderName(ContentResolver resolver, String name) {
return checkVisibleFolderName(resolver, name, Notes.ID_ROOT_FOLDER);
}
/**
* ID
* <p>
*
* </p>
*
* @param resolver ContentResolver
* @param name
* @param parentId ID
* @return truefalse
*/
public static boolean checkVisibleFolderName(ContentResolver resolver, String name, long parentId) {
Cursor cursor = resolver.query(Notes.CONTENT_NOTE_URI, null,
NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER +
" AND " + NoteColumns.PARENT_ID + "<>" + Notes.ID_TRASH_FOLER +
" AND " + NoteColumns.PARENT_ID + "=?" +
" AND " + NoteColumns.SNIPPET + "=?",
new String[] { name }, null);
new String[] { String.valueOf(parentId), name }, null);
boolean exist = false;
if(cursor != null) {
if(cursor.getCount() > 0) {

@ -201,7 +201,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
* Insert an introduction when user firstly use this application
*/
setAppInfoFromRawRes();
// 注册Android 13+的返回键回调
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
@ -1002,7 +1002,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
public void onClick(View v) {
hideSoftInput(etName);
String name = etName.getText().toString();
if (DataUtils.checkVisibleFolderName(mContentResolver, name)) {
if (DataUtils.checkVisibleFolderName(mContentResolver, name, mCurrentFolderId)) {
Toast.makeText(NotesListActivity.this, getString(R.string.folder_exist, name),
Toast.LENGTH_LONG).show();
etName.setSelection(0, etName.length());
@ -1023,6 +1023,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
ContentValues values = new ContentValues();
values.put(NoteColumns.SNIPPET, name);
values.put(NoteColumns.TYPE, Notes.TYPE_FOLDER);
values.put(NoteColumns.PARENT_ID, mCurrentFolderId);
mContentResolver.insert(Notes.CONTENT_NOTE_URI, values);
}
dialog.dismiss();
@ -1068,10 +1069,32 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
private void handleBackPress() {
switch (mState) {
case SUB_FOLDER:
mCurrentFolderId = Notes.ID_ROOT_FOLDER;
mState = ListEditState.NOTE_LIST;
startAsyncNotesListQuery();
mTitleBar.setVisibility(View.GONE);
// 查询当前文件夹的父文件夹ID
Cursor cursor = mContentResolver.query(Notes.CONTENT_NOTE_URI,
new String[]{NoteColumns.PARENT_ID, NoteColumns.SNIPPET},
NoteColumns.ID + "=?",
new String[]{String.valueOf(mCurrentFolderId)},
null);
if (cursor != null && cursor.moveToFirst()) {
long parentId = cursor.getLong(0);
String parentName = cursor.getString(1);
cursor.close();
if (parentId == Notes.ID_ROOT_FOLDER) {
// 如果父文件夹是根文件夹,返回根目录
mCurrentFolderId = Notes.ID_ROOT_FOLDER;
mState = ListEditState.NOTE_LIST;
mTitleBar.setVisibility(View.GONE);
} else {
// 否则返回上一级文件夹
mCurrentFolderId = parentId;
mState = ListEditState.SUB_FOLDER;
mTitleBar.setText(parentName);
mTitleBar.setVisibility(View.VISIBLE);
}
startAsyncNotesListQuery();
}
break;
case CALL_RECORD_FOLDER:
mCurrentFolderId = Notes.ID_ROOT_FOLDER;
@ -1402,13 +1425,21 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
break;
case SUB_FOLDER:
case CALL_RECORD_FOLDER:
if (item.getType() == Notes.TYPE_NOTE) {
openNode(item);
} else if (item.getType() == Notes.TYPE_FOLDER) {
openFolder(item);
} else {
Log.e(TAG, "Wrong note type in SUB_FOLDER");
}
break;
case CALL_RECORD_FOLDER:
if (item.getType() == Notes.TYPE_NOTE) {
openNode(item);
} else {
Log.e(TAG, "Wrong note type in CALL_RECORD_FOLDER");
}
break;
default:
break;
}

@ -18,6 +18,9 @@
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_new_folder"
android:title="@string/menu_create_folder"/>
<item
android:id="@+id/menu_new_note"
android:title="@string/notelist_menu_new"/>

Loading…
Cancel
Save