Compare commits

..

No commits in common. 'main' and 'develop' have entirely different histories.

@ -36,29 +36,18 @@ import net.micode.notes.R;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/*NoteEditTextEditTextEditText
mIndexmSelectionStartBeforeDelete
Scheme
MapSchemeID便SchemeID
*/
public class NoteEditText extends EditText { public class NoteEditText extends EditText {
private static final String TAG = "NoteEditText"; private static final String TAG = "NoteEditText";
private int mIndex; private int mIndex;
private int mSelectionStartBeforeDelete; private int mSelectionStartBeforeDelete;
// 定义了几种Scheme的常量值
private static final String SCHEME_TEL = "tel:" ; private static final String SCHEME_TEL = "tel:" ;
private static final String SCHEME_HTTP = "http:" ; private static final String SCHEME_HTTP = "http:" ;
private static final String SCHEME_EMAIL = "mailto:" ; private static final String SCHEME_EMAIL = "mailto:" ;
// 定义了一个Map用于存储Scheme和对应的资源ID的映射关系
private static final Map<String, Integer> sSchemaActionResMap = new HashMap<String, Integer>(); private static final Map<String, Integer> sSchemaActionResMap = new HashMap<String, Integer>();
static { static {
// 将不同Scheme和对应的资源ID放入Map中
sSchemaActionResMap.put(SCHEME_TEL, R.string.note_link_tel); sSchemaActionResMap.put(SCHEME_TEL, R.string.note_link_tel);
sSchemaActionResMap.put(SCHEME_HTTP, R.string.note_link_web); sSchemaActionResMap.put(SCHEME_HTTP, R.string.note_link_web);
sSchemaActionResMap.put(SCHEME_EMAIL, R.string.note_link_email); sSchemaActionResMap.put(SCHEME_EMAIL, R.string.note_link_email);
@ -69,46 +58,38 @@ public class NoteEditText extends EditText {
*/ */
public interface OnTextViewChangeListener { public interface OnTextViewChangeListener {
/** /**
* {@link KeyEvent#KEYCODE_DEL} * Delete current edit text when {@link KeyEvent#KEYCODE_DEL} happens
* and the text is null
*/ */
void onEditTextDelete(int index, String text); void onEditTextDelete(int index, String text);
/** /**
* {@link KeyEvent#KEYCODE_ENTER} * Add edit text after current edit text when {@link KeyEvent#KEYCODE_ENTER}
* happen
*/ */
void onEditTextEnter(int index, String text); void onEditTextEnter(int index, String text);
/** /**
* * Hide or show item option when text change
*/ */
void onTextChange(int index, boolean hasText); void onTextChange(int index, boolean hasText);
} }
/*NoteEditTextEditText
*/
private OnTextViewChangeListener mOnTextViewChangeListener; private OnTextViewChangeListener mOnTextViewChangeListener;
/*
NoteEditTextContextEditText(Context context, AttributeSet attrs)mIndex0
*/
public NoteEditText(Context context) { public NoteEditText(Context context) {
super(context, null); super(context, null);
mIndex = 0; mIndex = 0;
} }
/*
mIndex
*/
public void setIndex(int index) { public void setIndex(int index) {
mIndex = index; mIndex = index;
} }
/*
OnTextViewChangeListener
*/
public void setOnTextViewChangeListener(OnTextViewChangeListener listener) { public void setOnTextViewChangeListener(OnTextViewChangeListener listener) {
mOnTextViewChangeListener = listener; mOnTextViewChangeListener = listener;
} }
/*
NoteEditTextContextAttributeSetEditText(Context context, AttributeSet attrs, int defStyle)
*/
public NoteEditText(Context context, AttributeSet attrs) { public NoteEditText(Context context, AttributeSet attrs) {
super(context, attrs, android.R.attr.editTextStyle); super(context, attrs, android.R.attr.editTextStyle);
} }
@ -117,9 +98,7 @@ public class NoteEditText extends EditText {
super(context, attrs, defStyle); super(context, attrs, defStyle);
// TODO Auto-generated constructor stub // TODO Auto-generated constructor stub
} }
/*
onTouchEvent
*/
@Override @Override
public boolean onTouchEvent(MotionEvent event) { public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) { switch (event.getAction()) {
@ -141,9 +120,7 @@ public class NoteEditText extends EditText {
return super.onTouchEvent(event); return super.onTouchEvent(event);
} }
/*
onKeyDown
*/
@Override @Override
public boolean onKeyDown(int keyCode, KeyEvent event) { public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) { switch (keyCode) {
@ -160,9 +137,7 @@ public class NoteEditText extends EditText {
} }
return super.onKeyDown(keyCode, event); return super.onKeyDown(keyCode, event);
} }
/*
onKeyUp
*/
@Override @Override
public boolean onKeyUp(int keyCode, KeyEvent event) { public boolean onKeyUp(int keyCode, KeyEvent event) {
switch(keyCode) { switch(keyCode) {
@ -191,9 +166,7 @@ public class NoteEditText extends EditText {
} }
return super.onKeyUp(keyCode, event); return super.onKeyUp(keyCode, event);
} }
/*
onFocusChanged
*/
@Override @Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if (mOnTextViewChangeListener != null) { if (mOnTextViewChangeListener != null) {
@ -205,11 +178,7 @@ public class NoteEditText extends EditText {
} }
super.onFocusChanged(focused, direction, previouslyFocusedRect); super.onFocusChanged(focused, direction, previouslyFocusedRect);
} }
/*
onCreateContextMenuURL
OnTextViewChangeListener
*/
@Override @Override
protected void onCreateContextMenu(ContextMenu menu) { protected void onCreateContextMenu(ContextMenu menu) {
if (getText() instanceof Spanned) { if (getText() instanceof Spanned) {

@ -77,91 +77,65 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.HashSet; import java.util.HashSet;
//这个类实现了一个便签列表的界面,并包含了点击事件和长按事件的处理。
public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener { public class NotesListActivity extends Activity implements OnClickListener, OnItemLongClickListener {
// 定义查询便签列表的令牌
private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0; private static final int FOLDER_NOTE_LIST_QUERY_TOKEN = 0;
// 定义查询文件夹列表的令牌 private static final int FOLDER_LIST_QUERY_TOKEN = 1;
private static final int FOLDER_LIST_QUERY_TOKEN = 1;
// 定义文件夹菜单选项的常量
private static final int MENU_FOLDER_DELETE = 0; private static final int MENU_FOLDER_DELETE = 0;
private static final int MENU_FOLDER_VIEW = 1; private static final int MENU_FOLDER_VIEW = 1;
private static final int MENU_FOLDER_CHANGE_NAME = 2; private static final int MENU_FOLDER_CHANGE_NAME = 2;
// 定义保存便签介绍的偏好设置参数名称
private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction"; private static final String PREFERENCE_ADD_INTRODUCTION = "net.micode.notes.introduction";
// 枚举类型,表示列表编辑状态
private enum ListEditState { private enum ListEditState {
NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER NOTE_LIST, SUB_FOLDER, CALL_RECORD_FOLDER
}; };
// 保存当前列表的编辑状态
private ListEditState mState; private ListEditState mState;
// 后台查询操作的处理程序
private BackgroundQueryHandler mBackgroundQueryHandler; private BackgroundQueryHandler mBackgroundQueryHandler;
// 便签列表数据适配器
private NotesListAdapter mNotesListAdapter; private NotesListAdapter mNotesListAdapter;
// 显示便签列表的ListView
private ListView mNotesListView; private ListView mNotesListView;
// 添加新便签的按钮
private Button mAddNewNote; private Button mAddNewNote;
// 标识是否分发触摸事件
private boolean mDispatch; private boolean mDispatch;
// 原始触摸事件的Y坐标
private int mOriginY; private int mOriginY;
// 分发触摸事件的Y坐标
private int mDispatchY; private int mDispatchY;
// 显示标题的文本视图
private TextView mTitleBar; private TextView mTitleBar;
// 当前文件夹的ID
private long mCurrentFolderId; private long mCurrentFolderId;
// 内容解析器,用于访问应用程序的内容提供程序
private ContentResolver mContentResolver; private ContentResolver mContentResolver;
// 操作模式的回调接口
private ModeCallback mModeCallBack; private ModeCallback mModeCallBack;
// 日志标签
private static final String TAG = "NotesListActivity"; private static final String TAG = "NotesListActivity";
// 便签列表滚动速率
public static final int NOTES_LISTVIEW_SCROLL_RATE = 30; public static final int NOTES_LISTVIEW_SCROLL_RATE = 30;
// 当前焦点便签数据项
private NoteItemData mFocusNoteDataItem; private NoteItemData mFocusNoteDataItem;
// 便签正常选择的条件
private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?"; private static final String NORMAL_SELECTION = NoteColumns.PARENT_ID + "=?";
// 根文件夹选择的条件
private static final String ROOT_FOLDER_SELECTION = "(" + NoteColumns.TYPE + "<>" 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.ID + "=" + Notes.ID_CALL_RECORD_FOLDER + " AND "
+ NoteColumns.NOTES_COUNT + ">0)"; + NoteColumns.NOTES_COUNT + ">0)";
// 打开便签的请求码
private final static int REQUEST_CODE_OPEN_NODE = 102; private final static int REQUEST_CODE_OPEN_NODE = 102;
private final static int REQUEST_CODE_NEW_NODE = 103;
// 新建便签的请求码
private final static int REQUEST_CODE_NEW_NODE = 103;
}
@Override @Override
/*
onCreate Activity Activity onCreate note_list initResources setAppInfoFromRawRes
*/
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.note_list); setContentView(R.layout.note_list);
@ -172,9 +146,7 @@ public class NotesListActivity extends Activity implements OnClickListener, OnIt
*/ */
setAppInfoFromRawRes(); setAppInfoFromRawRes();
} }
/*
onActivityResult startActivityForResult 便便 mNotesListAdapter.changeCursor(null) 便 onActivityResult
*/
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK if (resultCode == RESULT_OK
@ -184,9 +156,7 @@ onActivityResult 方法是在通过 startActivityForResult 启动的活动返回
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
} }
} }
/*
setAppInfoFromRawRes 便 SharedPreferences StringBuilder getResources().openRawResource(R.raw.introduction) introduction StringBuilder WorkingNote IDApp Widget ID便便便 true
*/
private void setAppInfoFromRawRes() { private void setAppInfoFromRawRes() {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) { if (!sp.getBoolean(PREFERENCE_ADD_INTRODUCTION, false)) {
@ -234,23 +204,11 @@ setAppInfoFromRawRes 方法是用来从原始资源中读取应用程序的介
} }
@Override @Override
/*
onStart startAsyncNotesListQuery
*/
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
startAsyncNotesListQuery(); startAsyncNotesListQuery();
} }
/*
initResources
ContentResolver BackgroundQueryHandler
mCurrentFolderId
mNotesListView
mAddNewNote
ModeCallback
*/
private void initResources() { private void initResources() {
mContentResolver = this.getContentResolver(); mContentResolver = this.getContentResolver();
mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver()); mBackgroundQueryHandler = new BackgroundQueryHandler(this.getContentResolver());
@ -272,12 +230,7 @@ setAppInfoFromRawRes 方法是用来从原始资源中读取应用程序的介
mState = ListEditState.NOTE_LIST; mState = ListEditState.NOTE_LIST;
mModeCallBack = new ModeCallback(); mModeCallBack = new ModeCallback();
} }
/*
ModeCallback ListView
ActionMode
*/
private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener { private class ModeCallback implements ListView.MultiChoiceModeListener, OnMenuItemClickListener {
private DropdownMenu mDropDownMenu; private DropdownMenu mDropDownMenu;
private ActionMode mActionMode; private ActionMode mActionMode;
@ -315,14 +268,7 @@ setAppInfoFromRawRes 方法是用来从原始资源中读取应用程序的介
}); });
return true; return true;
} }
/*
updateMenu
使
/
*/
private void updateMenu() { private void updateMenu() {
int selectedCount = mNotesListAdapter.getSelectedCount(); int selectedCount = mNotesListAdapter.getSelectedCount();
// Update dropdown menu // Update dropdown menu
@ -339,24 +285,17 @@ setAppInfoFromRawRes 方法是用来从原始资源中读取应用程序的介
} }
} }
} }
/*
onPrepareActionMode ActionMode false
*/
public boolean onPrepareActionMode(ActionMode mode, Menu menu) { public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return false; return false;
} }
//onActionItemClicked 方法用于在点击 ActionMode 的菜单项时执行一些操作,但在这个方法中并没有实现任何逻辑,返回值为 false。
public boolean onActionItemClicked(ActionMode mode, MenuItem item) { public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return false; return false;
} }
/*
onDestroyActionMode ActionMode
false
mAddNewNote
*/
public void onDestroyActionMode(ActionMode mode) { public void onDestroyActionMode(ActionMode mode) {
mNotesListAdapter.setChoiceMode(false); mNotesListAdapter.setChoiceMode(false);
mNotesListView.setLongClickable(true); mNotesListView.setLongClickable(true);
@ -366,22 +305,13 @@ setAppInfoFromRawRes 方法是用来从原始资源中读取应用程序的介
public void finishActionMode() { public void finishActionMode() {
mActionMode.finish(); mActionMode.finish();
} }
/*
onItemCheckedStateChanged
updateMenu
*/
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, public void onItemCheckedStateChanged(ActionMode mode, int position, long id,
boolean checked) { boolean checked) {
mNotesListAdapter.setCheckedItem(position, checked); mNotesListAdapter.setCheckedItem(position, checked);
updateMenu(); updateMenu();
} }
/*
onMenuItemClick
Toast
true
*/
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
if (mNotesListAdapter.getSelectedCount() == 0) { if (mNotesListAdapter.getSelectedCount() == 0) {
Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none), Toast.makeText(NotesListActivity.this, getString(R.string.menu_select_none),

@ -30,28 +30,19 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
/*
NotesListAdapter CursorAdapterAppWidgetAttribute
*/
public class NotesListAdapter extends CursorAdapter { public class NotesListAdapter extends CursorAdapter {
// 用于日志记录的标签
private static final String TAG = "NotesListAdapter"; private static final String TAG = "NotesListAdapter";
// 应用程序的上下文
private Context mContext; private Context mContext;
// 存储选中索引的哈希映射
private HashMap<Integer, Boolean> mSelectedIndex; private HashMap<Integer, Boolean> mSelectedIndex;
// 笔记的数量
private int mNotesCount; private int mNotesCount;
// 表示列表是否处于选择模式的标志
private boolean mChoiceMode; private boolean mChoiceMode;
// 内部类,用于存储应用小部件的属性
public static class AppWidgetAttribute { public static class AppWidgetAttribute {
public int widgetId; // 小部件的ID public int widgetId;
public int widgetType; // 小部件的类型 public int widgetType;
} };
// 初始化适配器的构造函数
public NotesListAdapter(Context context) { public NotesListAdapter(Context context) {
super(context, null); super(context, null);
mSelectedIndex = new HashMap<Integer, Boolean>(); mSelectedIndex = new HashMap<Integer, Boolean>();
@ -59,40 +50,34 @@ public class NotesListAdapter extends CursorAdapter {
mNotesCount = 0; mNotesCount = 0;
} }
// 创建一个新的视图来表示列表中的项
@Override @Override
public View newView(Context context, Cursor cursor, ViewGroup parent) { public View newView(Context context, Cursor cursor, ViewGroup parent) {
return new NotesListItem(context); return new NotesListItem(context);
} }
// 将视图与指定位置上的数据进行绑定
@Override @Override
public void bindView(View view, Context context, Cursor cursor) { public void bindView(View view, Context context, Cursor cursor) {
if (view instanceof NotesListItem) { if (view instanceof NotesListItem) {
// 从游标中创建NoteItemData并将其与NotesListItem进行绑定
NoteItemData itemData = new NoteItemData(context, cursor); NoteItemData itemData = new NoteItemData(context, cursor);
((NotesListItem) view).bind(context, itemData, mChoiceMode, isSelectedItem(cursor.getPosition())); ((NotesListItem) view).bind(context, itemData, mChoiceMode,
isSelectedItem(cursor.getPosition()));
} }
} }
// 设置指定位置上项目的选中状态
public void setCheckedItem(final int position, final boolean checked) { public void setCheckedItem(final int position, final boolean checked) {
mSelectedIndex.put(position, checked); mSelectedIndex.put(position, checked);
notifyDataSetChanged(); notifyDataSetChanged();
} }
// 检查列表是否处于选择模式
public boolean isInChoiceMode() { public boolean isInChoiceMode() {
return mChoiceMode; return mChoiceMode;
} }
// 设置列表的选择模式
public void setChoiceMode(boolean mode) { public void setChoiceMode(boolean mode) {
mSelectedIndex.clear(); mSelectedIndex.clear();
mChoiceMode = mode; mChoiceMode = mode;
} }
// 全选或取消全选列表中的所有项目
public void selectAll(boolean checked) { public void selectAll(boolean checked) {
Cursor cursor = getCursor(); Cursor cursor = getCursor();
for (int i = 0; i < getCount(); i++) { for (int i = 0; i < getCount(); i++) {
@ -104,23 +89,22 @@ public class NotesListAdapter extends CursorAdapter {
} }
} }
// 获取选中项目的ID集合
public HashSet<Long> getSelectedItemIds() { public HashSet<Long> getSelectedItemIds() {
HashSet<Long> itemSet = new HashSet<Long>(); HashSet<Long> itemSet = new HashSet<Long>();
for (Integer position : mSelectedIndex.keySet()) { for (Integer position : mSelectedIndex.keySet()) {
if (mSelectedIndex.get(position) == true) { if (mSelectedIndex.get(position) == true) {
Long id = getItemId(position); Long id = getItemId(position);
if (id == Notes.ID_ROOT_FOLDER) { if (id == Notes.ID_ROOT_FOLDER) {
Log.d(TAG, "错误的项目ID不应该发生"); Log.d(TAG, "Wrong item id, should not happen");
} else { } else {
itemSet.add(id); itemSet.add(id);
} }
} }
} }
return itemSet; return itemSet;
} }
// 获取选中小部件的属性集合
public HashSet<AppWidgetAttribute> getSelectedWidget() { public HashSet<AppWidgetAttribute> getSelectedWidget() {
HashSet<AppWidgetAttribute> itemSet = new HashSet<AppWidgetAttribute>(); HashSet<AppWidgetAttribute> itemSet = new HashSet<AppWidgetAttribute>();
for (Integer position : mSelectedIndex.keySet()) { for (Integer position : mSelectedIndex.keySet()) {
@ -132,8 +116,11 @@ public class NotesListAdapter extends CursorAdapter {
widget.widgetId = item.getWidgetId(); widget.widgetId = item.getWidgetId();
widget.widgetType = item.getWidgetType(); widget.widgetType = item.getWidgetType();
itemSet.add(widget); itemSet.add(widget);
/**
* Don't close cursor here, only the adapter could close it
*/
} else { } else {
Log.e(TAG, "无效的游标"); Log.e(TAG, "Invalid cursor");
return null; return null;
} }
} }
@ -141,7 +128,6 @@ public class NotesListAdapter extends CursorAdapter {
return itemSet; return itemSet;
} }
// 获取选中项目的数量
public int getSelectedCount() { public int getSelectedCount() {
Collection<Boolean> values = mSelectedIndex.values(); Collection<Boolean> values = mSelectedIndex.values();
if (null == values) { if (null == values) {
@ -157,13 +143,11 @@ public class NotesListAdapter extends CursorAdapter {
return count; return count;
} }
// 检查是否全部项目都被选中
public boolean isAllSelected() { public boolean isAllSelected() {
int checkedCount = getSelectedCount(); int checkedCount = getSelectedCount();
return (checkedCount != 0 && checkedCount == mNotesCount); return (checkedCount != 0 && checkedCount == mNotesCount);
} }
// 检查指定位置上的项目是否被选中
public boolean isSelectedItem(final int position) { public boolean isSelectedItem(final int position) {
if (null == mSelectedIndex.get(position)) { if (null == mSelectedIndex.get(position)) {
return false; return false;
@ -171,21 +155,18 @@ public class NotesListAdapter extends CursorAdapter {
return mSelectedIndex.get(position); return mSelectedIndex.get(position);
} }
// 当数据集的内容发生变化时调用
@Override @Override
protected void onContentChanged() { protected void onContentChanged() {
super.onContentChanged(); super.onContentChanged();
calcNotesCount(); calcNotesCount();
} }
// 改变游标
@Override @Override
public void changeCursor(Cursor cursor) { public void changeCursor(Cursor cursor) {
super.changeCursor(cursor); super.changeCursor(cursor);
calcNotesCount(); calcNotesCount();
} }
// 计算列表中笔记的数量
private void calcNotesCount() { private void calcNotesCount() {
mNotesCount = 0; mNotesCount = 0;
for (int i = 0; i < getCount(); i++) { for (int i = 0; i < getCount(); i++) {
@ -195,7 +176,7 @@ public class NotesListAdapter extends CursorAdapter {
mNotesCount++; mNotesCount++;
} }
} else { } else {
Log.e(TAG, "无效的游标"); Log.e(TAG, "Invalid cursor");
return; return;
} }
} }

@ -28,101 +28,91 @@ import net.micode.notes.R;
import net.micode.notes.data.Notes; import net.micode.notes.data.Notes;
import net.micode.notes.tool.DataUtils; import net.micode.notes.tool.DataUtils;
import net.micode.notes.tool.ResourceParser.NoteItemBgResources; import net.micode.notes.tool.ResourceParser.NoteItemBgResources;
/*
NotesListItem LinearLayout
*/
public class NotesListItem extends LinearLayout { public class NotesListItem extends LinearLayout {
private ImageView mAlert; // 提醒图标 private ImageView mAlert;
private TextView mTitle; // 标题 private TextView mTitle;
private TextView mTime; // 时间 private TextView mTime;
private TextView mCallName; // 通话名称 private TextView mCallName;
private NoteItemData mItemData; // 笔记项数据 private NoteItemData mItemData;
private CheckBox mCheckBox; // 多选框 private CheckBox mCheckBox;
public NotesListItem(Context context) { public NotesListItem(Context context) {
super(context); super(context);
inflate(context, R.layout.note_item, this); // 填充视图 inflate(context, R.layout.note_item, this);
mAlert = (ImageView) findViewById(R.id.iv_alert_icon); // 初始化提醒图标 mAlert = (ImageView) findViewById(R.id.iv_alert_icon);
mTitle = (TextView) findViewById(R.id.tv_title); // 初始化标题 mTitle = (TextView) findViewById(R.id.tv_title);
mTime = (TextView) findViewById(R.id.tv_time); // 初始化时间 mTime = (TextView) findViewById(R.id.tv_time);
mCallName = (TextView) findViewById(R.id.tv_name); // 初始化通话名称 mCallName = (TextView) findViewById(R.id.tv_name);
mCheckBox = (CheckBox) findViewById(android.R.id.checkbox); // 初始化多选框 mCheckBox = (CheckBox) findViewById(android.R.id.checkbox);
} }
// 绑定数据到视图
public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) { public void bind(Context context, NoteItemData data, boolean choiceMode, boolean checked) {
// 如果是多选模式,并且数据类型是笔记类型,显示多选框并设置选中状态
if (choiceMode && data.getType() == Notes.TYPE_NOTE) { if (choiceMode && data.getType() == Notes.TYPE_NOTE) {
mCheckBox.setVisibility(View.VISIBLE); mCheckBox.setVisibility(View.VISIBLE);
mCheckBox.setChecked(checked); mCheckBox.setChecked(checked);
} else { // 否则隐藏多选框 } else {
mCheckBox.setVisibility(View.GONE); mCheckBox.setVisibility(View.GONE);
} }
mItemData = data; // 保存数据项 mItemData = data;
if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) {
if (data.getId() == Notes.ID_CALL_RECORD_FOLDER) { // 如果是通话记录文件夹 mCallName.setVisibility(View.GONE);
mCallName.setVisibility(View.GONE); // 隐藏通话名称 mAlert.setVisibility(View.VISIBLE);
mAlert.setVisibility(View.VISIBLE); // 显示提醒图标
mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem); mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem);
// 设置标题文本为通话记录文件夹的名称和包含的文件数
mTitle.setText(context.getString(R.string.call_record_folder_name) mTitle.setText(context.getString(R.string.call_record_folder_name)
+ context.getString(R.string.format_folder_files_count, data.getNotesCount())); + context.getString(R.string.format_folder_files_count, data.getNotesCount()));
mAlert.setImageResource(R.drawable.call_record); // 设置提醒图标为通话记录图标 mAlert.setImageResource(R.drawable.call_record);
} else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) { // 如果父文件夹是通话记录文件夹 } else if (data.getParentId() == Notes.ID_CALL_RECORD_FOLDER) {
mCallName.setVisibility(View.VISIBLE); // 显示通话名称 mCallName.setVisibility(View.VISIBLE);
mCallName.setText(data.getCallName()); // 设置通话名称 mCallName.setText(data.getCallName());
mTitle.setTextAppearance(context, R.style.TextAppearanceSecondaryItem);// 设置标题文本样式为次要文本样式 mTitle.setTextAppearance(context,R.style.TextAppearanceSecondaryItem);
mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); // 设置标题文本为格式化的说明文本 mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet()));
if (data.hasAlert()) { // 如果有提醒 if (data.hasAlert()) {
mAlert.setImageResource(R.drawable.clock); // 设置提醒图标为闹钟图标 mAlert.setImageResource(R.drawable.clock);
mAlert.setVisibility(View.VISIBLE); // 显示提醒图标 mAlert.setVisibility(View.VISIBLE);
} else { } else {
mAlert.setVisibility(View.GONE); // 隐藏提醒图标 mAlert.setVisibility(View.GONE);
} }
} else { // 其他类型的笔记项 } else {
mCallName.setVisibility(View.GONE); // 隐藏通话名称 mCallName.setVisibility(View.GONE);
mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem);// 设置标题文本样式为主要文本样式 mTitle.setTextAppearance(context, R.style.TextAppearancePrimaryItem);
if (data.getType() == Notes.TYPE_FOLDER) { // 如果是文件夹类型 if (data.getType() == Notes.TYPE_FOLDER) {
// 设置标题文本为文件夹名称和包含的文件数
mTitle.setText(data.getSnippet() mTitle.setText(data.getSnippet()
+ context.getString(R.string.format_folder_files_count, + context.getString(R.string.format_folder_files_count,
data.getNotesCount())); data.getNotesCount()));
mAlert.setVisibility(View.GONE); // 隐藏提醒图标 mAlert.setVisibility(View.GONE);
} else { // 如果是笔记类型 } else {
mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet())); // 设置标题文本为格式化的说明文本 mTitle.setText(DataUtils.getFormattedSnippet(data.getSnippet()));
if (data.hasAlert()) { // 如果有提醒 if (data.hasAlert()) {
mAlert.setImageResource(R.drawable.clock); // 设置提醒图标为闹钟图标 mAlert.setImageResource(R.drawable.clock);
mAlert.setVisibility(View.VISIBLE); // 显示提醒图标 mAlert.setVisibility(View.VISIBLE);
} else { } else {
mAlert.setVisibility(View.GONE); // 隐藏提醒图标 mAlert.setVisibility(View.GONE);
} }
} }
} }
mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate()));
mTime.setText(DateUtils.getRelativeTimeSpanString(data.getModifiedDate())); // 设置时间文本为相对时间 setBackground(data);
setBackground(data); // 设置背景
} }
// 设置背景
private void setBackground(NoteItemData data) { private void setBackground(NoteItemData data) {
int id = data.getBgColorId(); int id = data.getBgColorId();
if (data.getType() == Notes.TYPE_NOTE) { // 如果是笔记类型 if (data.getType() == Notes.TYPE_NOTE) {
if (data.isSingle() || data.isOneFollowingFolder()) { // 如果是单个笔记或者是紧接在文件夹后面的单个笔记 if (data.isSingle() || data.isOneFollowingFolder()) {
setBackgroundResource(NoteItemBgResources.getNoteBgSingleRes(id)); // 设置背景资源为单个笔记的背景资源 setBackgroundResource(NoteItemBgResources.getNoteBgSingleRes(id));
} else if (data.isLast()) { // 如果是最后一个笔记 } else if (data.isLast()) {
setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id)); // 设置背景资源为最后一个笔记的背景资源 setBackgroundResource(NoteItemBgResources.getNoteBgLastRes(id));
} else if (data.isFirst() || data.isMultiFollowingFolder()) { // 如果是第一个笔记或者是紧接在文件夹后面的多个笔记 } else if (data.isFirst() || data.isMultiFollowingFolder()) {
setBackgroundResource(NoteItemBgResources.getNoteBgFirstRes(id)); // 设置背景资源为第一个笔记的背景资源 setBackgroundResource(NoteItemBgResources.getNoteBgFirstRes(id));
} else { // 其他情况 } else {
setBackgroundResource(NoteItemBgResources.getNoteBgNormalRes(id)); // 设置背景资源为普通笔记的背景资源 setBackgroundResource(NoteItemBgResources.getNoteBgNormalRes(id));
} }
} else { // 如果是文件夹类型 } else {
setBackgroundResource(NoteItemBgResources.getFolderBgRes()); // 设置背景资源为文件夹的背景资源 setBackgroundResource(NoteItemBgResources.getFolderBgRes());
} }
} }

Loading…
Cancel
Save