撤销了部分错误修改 #11

Merged
p3f2h9ljk merged 1 commits from taojunyu_branch into master 2 days ago

@ -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");
}
}

@ -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;
}
/**
*

@ -148,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";
@ -298,12 +307,10 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
mNotesListView.setAdapter(mNotesListAdapter);
mAddNewNote = (Button) findViewById(R.id.btn_new_note);
mAddNewNote.setOnClickListener(this);
// 移除复杂的OnTouchListener简化触摸事件处理
// mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener());
// 移除不再需要的触摸事件相关变量
// mDispatch = false;
// mDispatchY = 0;
// mOriginY = 0;
mAddNewNote.setOnTouchListener(new NewNoteOnTouchListener());
mDispatch = false;
mDispatchY = 0;
mOriginY = 0;
mTitleBar = (TextView) findViewById(R.id.tv_title_bar);
mState = ListEditState.NOTE_LIST;
mModeCallBack = new ModeCallback();
@ -354,6 +361,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);
@ -513,6 +525,9 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
case R.id.move:
startQueryDestinationFolders();
break;
case R.id.pin:
togglePinnedStatus();
break;
default:
return false;
}
@ -520,10 +535,93 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
}
}
// 删除不再使用的NewNoteOnTouchListener内部类
// private class NewNoteOnTouchListener implements OnTouchListener {
// // ... 内部类内容 ...
// };
/**
*
* <p>
* OnTouchListener
*
* </p>
*/
private class NewNoteOnTouchListener implements OnTouchListener {
/**
*
* <p>
*
* 1. ACTION_DOWN
* -
* - Y
* - SUB_FOLDER
* - y=-0.12x+94
* -
* 2. ACTION_MOVE
* -
* 3.
* -
* </p>
* @param v
* @param event
* @return true
*/
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
Display display = getWindowManager().getDefaultDisplay();
int screenHeight = display.getHeight();
int newNoteViewHeight = mAddNewNote.getHeight();
int start = screenHeight - newNoteViewHeight;
int eventY = start + (int) event.getY();
/**
* Minus TitleBar's height
*/
if (mState == ListEditState.SUB_FOLDER) {
eventY -= mTitleBar.getHeight();
start -= mTitleBar.getHeight();
}
/**
* HACKME:When click the transparent part of "New Note" button, dispatch
* the event to the list view behind this button. The transparent part of
* "New Note" button could be expressed by formula y=-0.12x+94Unit:pixel
* and the line top of the button. The coordinate based on left of the "New
* Note" button. The 94 represents maximum height of the transparent part.
* Notice that, if the background of the button changes, the formula should
* also change. This is very bad, just for the UI designer's strong requirement.
*/
if (event.getY() < (event.getX() * (-0.12) + 94)) {
View view = mNotesListView.getChildAt(mNotesListView.getChildCount() - 1
- mNotesListView.getFooterViewsCount());
if (view != null && view.getBottom() > start
&& (view.getTop() < (start + 94))) {
mOriginY = (int) event.getY();
mDispatchY = eventY;
event.setLocation(event.getX(), mDispatchY);
mDispatch = true;
return mNotesListView.dispatchTouchEvent(event);
}
}
break;
}
case MotionEvent.ACTION_MOVE: {
if (mDispatch) {
mDispatchY += (int) event.getY() - mOriginY;
event.setLocation(event.getX(), mDispatchY);
return mNotesListView.dispatchTouchEvent(event);
}
break;
}
default: {
if (mDispatch) {
event.setLocation(event.getX(), mDispatchY);
mDispatch = false;
return mNotesListView.dispatchTouchEvent(event);
}
break;
}
}
return false;
}
};
/**
*
@ -537,7 +635,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");
}
/**
@ -670,6 +768,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>

@ -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"

@ -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