解决了在文件夹中点击back键会直接退出小米便签的bug #12

Merged
p7fulywfa merged 1 commits from tangbo_branch into master 1 day ago

@ -1,13 +1,5 @@
package net.micode.notes;
/**
*
* <p>
*
* </p>
*/
import android.os.Bundle;
import androidx.activity.EdgeToEdge;
@ -18,15 +10,6 @@ import androidx.core.view.WindowInsetsCompat;
public class MainActivity extends AppCompatActivity {
/**
*
* <p>
*
* UI
* </p>
*
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

@ -211,22 +211,29 @@ public class Notes {
public static final String LOCAL_MODIFIED = "local_modified";
/**
* ID
* <P> : INTEGER </P>
* ID
* <P> : INTEGER (long) </P>
*/
public static final String ORIGIN_PARENT_ID = "origin_parent_id";
/**
* GTask ID
* GTASK ID
* <P> : TEXT </P>
*/
public static final String GTASK_ID = "gtask_id";
/**
*
* <P> : INTEGER (long) </P>
* <P> : INTEGER </P>
*/
public static final String VERSION = "version";
/**
*
* <P> : INTEGER </P>
* <P> 01 </P>
*/
public static final String PINNED = "pinned";
}
public interface DataColumns {

@ -35,7 +35,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
// 数据库文件名
private static final String DB_NAME = "note.db";
// 数据库版本号,用于升级控制
private static final int DB_VERSION = 4;
private static final int DB_VERSION = 5;
/**
*
@ -56,7 +56,7 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
* SQL
* /IDID/
*/
private static final String CREATE_NOTE_TABLE_SQL =
private static final String CREATE_NOTE_TABLE_SQL =
"CREATE TABLE " + TABLE.NOTE + "(" +
NoteColumns.ID + " INTEGER PRIMARY KEY," +
NoteColumns.PARENT_ID + " INTEGER NOT NULL DEFAULT 0," +
@ -74,7 +74,8 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
NoteColumns.LOCAL_MODIFIED + " INTEGER NOT NULL DEFAULT 0," +
NoteColumns.ORIGIN_PARENT_ID + " INTEGER NOT NULL DEFAULT 0," +
NoteColumns.GTASK_ID + " TEXT NOT NULL DEFAULT ''," +
NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0" +
NoteColumns.VERSION + " INTEGER NOT NULL DEFAULT 0," +
NoteColumns.PINNED + " INTEGER NOT NULL DEFAULT 0" +
")";
/**
@ -378,6 +379,12 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
oldVersion++;
}
// 版本4升级到版本5
if (oldVersion == 4) {
upgradeToV5(db);
oldVersion++;
}
// 如果需要,重新创建触发器
if (reCreateTriggers) {
reCreateNoteTableTriggers(db);
@ -429,4 +436,13 @@ public class NotesDatabaseHelper extends SQLiteOpenHelper {
db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.VERSION
+ " INTEGER NOT NULL DEFAULT 0");
}
/**
* 5便
* @param db
*/
private void upgradeToV5(SQLiteDatabase db) {
db.execSQL("ALTER TABLE " + TABLE.NOTE + " ADD COLUMN " + NoteColumns.PINNED
+ " INTEGER NOT NULL DEFAULT 0");
}
}

@ -260,7 +260,7 @@ public class Note {
/**
*
*/
private static final String TAG = NoteData.class.getSimpleName();
private static final String TAG = "NoteData";
/**
*

@ -53,6 +53,7 @@ public class NoteItemData {
NoteColumns.TYPE,
NoteColumns.WIDGET_ID,
NoteColumns.WIDGET_TYPE,
NoteColumns.PINNED,
};
/**
@ -114,12 +115,22 @@ public class NoteItemData {
*
*/
private static final int WIDGET_TYPE_COLUMN = 11;
/**
*
*/
private static final int PINNED_COLUMN = 12;
/**
* ID
*/
private long mId;
/**
*
*/
private boolean mPinned;
/**
*
*/
@ -230,6 +241,7 @@ public class NoteItemData {
mType = cursor.getInt(TYPE_COLUMN);
mWidgetId = cursor.getInt(WIDGET_ID_COLUMN);
mWidgetType = cursor.getInt(WIDGET_TYPE_COLUMN);
mPinned = (cursor.getInt(PINNED_COLUMN) > 0) ? true : false;
mPhoneNumber = "";
if (mParentId == Notes.ID_CALL_RECORD_FOLDER) {
@ -447,6 +459,22 @@ public class NoteItemData {
public boolean isCallRecord() {
return (mParentId == Notes.ID_CALL_RECORD_FOLDER && !TextUtils.isEmpty(mPhoneNumber));
}
/**
*
* @return truefalse
*/
public boolean isPinned() {
return mPinned;
}
/**
*
* @param pinned truefalse
*/
public void setPinned(boolean pinned) {
mPinned = pinned;
}
/**
*

@ -132,14 +132,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
/** 新建笔记按钮 */
private Button mAddNewNote;
/** 是否分发触摸事件 */
private boolean mDispatch;
/** 原始Y坐标 */
private int mOriginY;
/** 分发Y坐标 */
private int mDispatchY;
// 删除不再使用的触摸事件相关变量
// private boolean mDispatch;
// private int mOriginY;
// private int mDispatchY;
/** 标题栏文本视图 */
private TextView mTitleBar;
@ -152,6 +148,15 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
/** 模式回调 */
private ModeCallback mModeCallBack;
/** 是否分发触摸事件 */
private boolean mDispatch;
/** 原始Y坐标 */
private int mOriginY;
/** 分发Y坐标 */
private int mDispatchY;
/** 日志标签 */
private static final String TAG = "NotesListActivity";
@ -167,7 +172,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
/** 根文件夹选择条件 */
private static final String ROOT_FOLDER_SELECTION = "(" + NoteColumns.TYPE + "<>"
+ Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)") + " OR ("
+ Notes.TYPE_SYSTEM + " AND " + NoteColumns.PARENT_ID + "=?)" + " OR ("
+ NoteColumns.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND "
+ NoteColumns.NOTES_COUNT + ">0)";
@ -196,6 +201,19 @@ 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(
android.window.OnBackInvokedDispatcher.PRIORITY_DEFAULT,
new android.window.OnBackInvokedCallback() {
@Override
public void onBackInvoked() {
handleBackPress();
}
}
);
}
}
/**
@ -356,6 +374,11 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
mMoveMenu.setVisible(true);
mMoveMenu.setOnMenuItemClickListener(this);
}
// 添加置顶菜单初始化
MenuItem pinMenu = menu.findItem(R.id.pin);
if (pinMenu != null) {
pinMenu.setOnMenuItemClickListener(this);
}
mActionMode = mode;
mNotesListAdapter.setChoiceMode(true);
mNotesListView.setLongClickable(false);
@ -515,6 +538,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
case R.id.move:
startQueryDestinationFolders();
break;
case R.id.pin:
togglePinnedStatus();
break;
default:
return false;
}
@ -622,7 +648,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
mBackgroundQueryHandler.startQuery(FOLDER_NOTE_LIST_QUERY_TOKEN, null,
Notes.CONTENT_NOTE_URI, NoteItemData.PROJECTION, selection, new String[] {
String.valueOf(mCurrentFolderId)
}, NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC");
}, NoteColumns.PINNED + " DESC," + NoteColumns.TYPE + " DESC," + NoteColumns.MODIFIED_DATE + " DESC");
}
/**
@ -755,6 +781,54 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}.execute();
}
/**
* 便
*/
private void togglePinnedStatus() {
final HashSet<Long> selectedIds = mNotesListAdapter.getSelectedItemIds();
final int selectedCount = mNotesListAdapter.getSelectedCount();
new AsyncTask<Void, Void, Void>() {
protected Void doInBackground(Void... unused) {
for (Long noteId : selectedIds) {
// 查询当前便签的置顶状态
Cursor cursor = mContentResolver.query(Notes.CONTENT_NOTE_URI,
new String[]{NoteColumns.PINNED},
NoteColumns.ID + "=?",
new String[]{String.valueOf(noteId)},
null);
if (cursor != null && cursor.moveToFirst()) {
int currentPinned = cursor.getInt(0);
// 切换置顶状态
int newPinned = currentPinned == 1 ? 0 : 1;
ContentValues values = new ContentValues();
values.put(NoteColumns.PINNED, newPinned);
mContentResolver.update(Notes.CONTENT_NOTE_URI,
values,
NoteColumns.ID + "=?",
new String[]{String.valueOf(noteId)});
cursor.close();
}
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
Toast.makeText(NotesListActivity.this,
"已更新 " + selectedCount + " 个便签",
Toast.LENGTH_SHORT).show();
// 重新查询数据,更新列表
startAsyncNotesListQuery();
mModeCallBack.finishActionMode();
}
}.execute();
}
/**
*
* <p>
@ -991,8 +1065,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
* 3.
* </p>
*/
@Override
public void onBackPressed() {
private void handleBackPress() {
switch (mState) {
case SUB_FOLDER:
mCurrentFolderId = Notes.ID_ROOT_FOLDER;
@ -1015,6 +1088,11 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
}
@Override
public void onBackPressed() {
handleBackPress();
}
/**
*
* <p>

@ -19,6 +19,7 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/list_background"
android:fitsSystemWindows="true"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
@ -81,7 +82,8 @@
android:scrollbars="none"
android:overScrollMode="never"
android:layout_gravity="left|top"
android:fadingEdgeLength="0dip">
android:fadingEdgeLength="0dip"
android:paddingTop="16dp">
<LinearLayout
android:layout_width="fill_parent"

@ -19,7 +19,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/list_background">
android:background="@drawable/list_background"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="fill_parent"
@ -54,5 +55,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:layout_gravity="bottom" />
android:layout_gravity="bottom"
android:layout_marginBottom="16dp" />
</FrameLayout>

@ -28,4 +28,9 @@
android:title="@string/menu_delete"
android:icon="@drawable/menu_delete"
android:showAsAction="always|withText" />
<item
android:id="@+id/pin"
android:title="@string/menu_pin"
android:showAsAction="always|withText" />
</menu>

@ -44,6 +44,8 @@
<string name="menu_search">搜索</string>
<string name="menu_delete">删除</string>
<string name="menu_move">移动到文件夹</string>
<string name="menu_pin">置顶</string>
<string name="menu_unpin">取消置顶</string>
<string name="menu_select_title">选中了 %d 项</string>
<string name="menu_select_none">没有选中项,操作无效</string>
<string name="menu_select_all">全选</string>

@ -48,6 +48,8 @@
<string name="menu_search">Search</string>
<string name="menu_delete">Delete</string>
<string name="menu_move">Move to folder</string>
<string name="menu_pin">Pin</string>
<string name="menu_unpin">Unpin</string>
<string name="menu_select_title">%d selected</string>
<string name="menu_select_none">Nothing selected, the operation is invalid</string>
<string name="menu_select_all">Select all</string>

Loading…
Cancel
Save