@ -201,15 +201,25 @@ public class NoteEditActivity extends Activity implements OnClickListener,
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    @Override 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    / * * 
 
			
		
	
		
			
				
					     *  在 Activity 恢 复 之 前 调 用 , 用 于 恢 复 之 前 保 存 的 状 态 数 据 
 
			
		
	
		
			
				
					     *  @param  savedInstanceState  之 前 保 存 的 状 态 数 据 
 
			
		
	
		
			
				
					     * / 
 
			
		
	
		
			
				
					    protected  void  onRestoreInstanceState ( Bundle  savedInstanceState )  { 
 
			
		
	
		
			
				
					        super . onRestoreInstanceState ( savedInstanceState ) ; 
 
			
		
	
		
			
				
					        // 检查之前是否保存了状态数据并且包含Intent.EXTRA_UID键
 
 
			
		
	
		
			
				
					        if  ( savedInstanceState  ! =  null  & &  savedInstanceState . containsKey ( Intent . EXTRA_UID ) )  { 
 
			
		
	
		
			
				
					            // 创建一个查看指定UID的意图
 
 
			
		
	
		
			
				
					            Intent  intent  =  new  Intent ( Intent . ACTION_VIEW ) ; 
 
			
		
	
		
			
				
					            intent . putExtra ( Intent . EXTRA_UID ,  savedInstanceState . getLong ( Intent . EXTRA_UID ) ) ; 
 
			
		
	
		
			
				
					            // 初始化活动状态并判断是否成功
 
 
			
		
	
		
			
				
					            if  ( ! initActivityState ( intent ) )  { 
 
			
		
	
		
			
				
					                // 如果初始化活动状态失败,则结束当前活动
 
 
			
		
	
		
			
				
					                finish ( ) ; 
 
			
		
	
		
			
				
					                return ; 
 
			
		
	
		
			
				
					            } 
 
			
		
	
		
			
				
					            // 打印日志,提示从被终止的活动中恢复
 
 
			
		
	
		
			
				
					            Log . d ( TAG ,  "Restoring from killed activity" ) ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					    } 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -220,37 +230,51 @@ public class NoteEditActivity extends Activity implements OnClickListener,
 
			
		
	
		
			
				
					         *  then  jump  to  the  NotesListActivity 
 
			
		
	
		
			
				
					         * / 
 
			
		
	
		
			
				
					        mWorkingNote  =  null ; 
 
			
		
	
		
			
				
					        // 检查Intent的Action是否是ACTION_VIEW
 
 
			
		
	
		
			
				
					        if  ( TextUtils . equals ( Intent . ACTION_VIEW ,  intent . getAction ( ) ) )  { 
 
			
		
	
		
			
				
					            long  noteId  =  intent . getLongExtra ( Intent . EXTRA_UID ,  0 ) ; 
 
			
		
	
		
			
				
					            mUserQuery  =  "" ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            / * * 
 
			
		
	
		
			
				
					             *  Starting  from  the  searched  result 
 
			
		
	
		
			
				
					             *  从 搜 索 结 果 开 始 
 
			
		
	
		
			
				
					             * / 
 
			
		
	
		
			
				
					            if  ( intent . hasExtra ( SearchManager . EXTRA_DATA_KEY ) )  { 
 
			
		
	
		
			
				
					                // 如果Intent带有EXTRA_DATA_KEY,  
 
			
		
	
		
			
				
					                noteId  =  Long . parseLong ( intent . getStringExtra ( SearchManager . EXTRA_DATA_KEY ) ) ; 
 
			
		
	
		
			
				
					                mUserQuery  =  intent . getStringExtra ( SearchManager . USER_QUERY ) ; 
 
			
		
	
		
			
				
					            } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // 检查数据库中是否存在指定类型为TYPE_NOTE的noteId
 
 
			
		
	
		
			
				
					            if  ( ! DataUtils . visibleInNoteDatabase ( getContentResolver ( ) ,  noteId ,  Notes . TYPE_NOTE ) )  { 
 
			
		
	
		
			
				
					                // 如果不存在, ,  
 
			
		
	
		
			
				
					                Intent  jump  =  new  Intent ( this ,  NotesListActivity . class ) ; 
 
			
		
	
		
			
				
					                startActivity ( jump ) ; 
 
			
		
	
		
			
				
					                showToast ( R . string . error_note_not_exist ) ; 
 
			
		
	
		
			
				
					                finish ( ) ; 
 
			
		
	
		
			
				
					                return  false ; 
 
			
		
	
		
			
				
					                return  false ;  // 建议在此处加入日志信息以记录错误
  
 
			
		
	
		
			
				
					            }  else  { 
 
			
		
	
		
			
				
					                // 如果存在,  
 
			
		
	
		
			
				
					                mWorkingNote  =  WorkingNote . load ( this ,  noteId ) ; 
 
			
		
	
		
			
				
					                if  ( mWorkingNote  = =  null )  { 
 
			
		
	
		
			
				
					                    // 如果加载失败,  
 
			
		
	
		
			
				
					                    Log . e ( TAG ,  "load note failed with note id"  +  noteId ) ; 
 
			
		
	
		
			
				
					                    finish ( ) ; 
 
			
		
	
		
			
				
					                    return  false ; 
 
			
		
	
		
			
				
					                } 
 
			
		
	
		
			
				
					            } 
 
			
		
	
		
			
				
					            // 调用Activity的getWindow()方法来获取当前窗口
 
 
			
		
	
		
			
				
					            getWindow ( ) . setSoftInputMode ( 
 
			
		
	
		
			
				
					                    // 设置软键盘的显示状态和窗口调整选项为组合模式
 
 
			
		
	
		
			
				
					                    WindowManager . LayoutParams . SOFT_INPUT_STATE_HIDDEN 
 
			
		
	
		
			
				
					                            // 使用SOFT_INPUT_STATE_HIDDEN标志,  
 
			
		
	
		
			
				
					                            // 当用户进入该Activity时,  
 
			
		
	
		
			
				
					                            |  WindowManager . LayoutParams . SOFT_INPUT_ADJUST_RESIZE ) ; 
 
			
		
	
		
			
				
					                            // 使用SOFT_INPUT_ADJUST_RESIZE标志,  
 
			
		
	
		
			
				
					                            // 当软键盘显示时, ,  
 
			
		
	
		
			
				
					                            // 以留出软键盘所需的空间,这样内容就不会被软键盘覆盖。
 
 
			
		
	
		
			
				
					        }  else  if ( TextUtils . equals ( Intent . ACTION_INSERT_OR_EDIT ,  intent . getAction ( ) ) )  { 
 
			
		
	
		
			
				
					            // New note
 
 
			
		
	
		
			
				
					            // 如果Intent的Action是ACTION_INSERT_OR_EDIT
 
 
			
		
	
		
			
				
					            // 创建新的笔记
 
 
			
		
	
		
			
				
					            long  folderId  =  intent . getLongExtra ( Notes . INTENT_EXTRA_FOLDER_ID ,  0 ) ; 
 
			
		
	
		
			
				
					            int  widgetId  =  intent . getIntExtra ( Notes . INTENT_EXTRA_WIDGET_ID , 
 
			
		
	
		
			
				
					                    AppWidgetManager . INVALID_APPWIDGET_ID ) ; 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -259,7 +283,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
 
			
		
	
		
			
				
					            int  bgResId  =  intent . getIntExtra ( Notes . INTENT_EXTRA_BACKGROUND_ID , 
 
			
		
	
		
			
				
					                    ResourceParser . getDefaultBgId ( this ) ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            //  Parse call-record note 
 
			
		
	
		
			
				
					            //  获取Intent中的电话号码和通话日期 
 
			
		
	
		
			
				
					            String  phoneNumber  =  intent . getStringExtra ( Intent . EXTRA_PHONE_NUMBER ) ; 
 
			
		
	
		
			
				
					            long  callDate  =  intent . getLongExtra ( Notes . INTENT_EXTRA_CALL_DATE ,  0 ) ; 
 
			
		
	
		
			
				
					            if  ( callDate  ! =  0  & &  phoneNumber  ! =  null )  { 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -267,32 +291,40 @@ public class NoteEditActivity extends Activity implements OnClickListener,
 
			
		
	
		
			
				
					                    Log . w ( TAG ,  "The call record number is null" ) ; 
 
			
		
	
		
			
				
					                } 
 
			
		
	
		
			
				
					                long  noteId  =  0 ; 
 
			
		
	
		
			
				
					                // 通过电话号码和通话日期从数据库中获取对应的noteId
 
 
			
		
	
		
			
				
					                if  ( ( noteId  =  DataUtils . getNoteIdByPhoneNumberAndCallDate ( getContentResolver ( ) , 
 
			
		
	
		
			
				
					                        phoneNumber ,  callDate ) )  >  0 )  { 
 
			
		
	
		
			
				
					                    // 如果存在对应的noteId,  
 
			
		
	
		
			
				
					                    mWorkingNote  =  WorkingNote . load ( this ,  noteId ) ; 
 
			
		
	
		
			
				
					                    if  ( mWorkingNote  = =  null )  { 
 
			
		
	
		
			
				
					                        // 加载失败的话,  
 
			
		
	
		
			
				
					                        Log . e ( TAG ,  "load call note failed with note id"  +  noteId ) ; 
 
			
		
	
		
			
				
					                        finish ( ) ; 
 
			
		
	
		
			
				
					                        return  false ; 
 
			
		
	
		
			
				
					                    } 
 
			
		
	
		
			
				
					                }  else  { 
 
			
		
	
		
			
				
					                    // 如果不存在对应的noteId,  
 
			
		
	
		
			
				
					                    mWorkingNote  =  WorkingNote . createEmptyNote ( this ,  folderId ,  widgetId , 
 
			
		
	
		
			
				
					                            widgetType ,  bgResId ) ; 
 
			
		
	
		
			
				
					                    mWorkingNote . convertToCallNote ( phoneNumber ,  callDate ) ; 
 
			
		
	
		
			
				
					                } 
 
			
		
	
		
			
				
					            }  else  { 
 
			
		
	
		
			
				
					                // 如果没有有效的电话号码和通话日期,则创建一个新的空白笔记
 
 
			
		
	
		
			
				
					                mWorkingNote  =  WorkingNote . createEmptyNote ( this ,  folderId ,  widgetId ,  widgetType , 
 
			
		
	
		
			
				
					                        bgResId ) ; 
 
			
		
	
		
			
				
					            } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            // 设置输入法模式为:自动调整大小,并且显示输入法
 
 
			
		
	
		
			
				
					            getWindow ( ) . setSoftInputMode ( 
 
			
		
	
		
			
				
					                    WindowManager . LayoutParams . SOFT_INPUT_ADJUST_RESIZE 
 
			
		
	
		
			
				
					                            |  WindowManager . LayoutParams . SOFT_INPUT_STATE_VISIBLE ) ; 
 
			
		
	
		
			
				
					        // 对Intent没有指定的Action进行错误处理
 
 
			
		
	
		
			
				
					        }  else  { 
 
			
		
	
		
			
				
					            Log . e ( TAG ,  "Intent not specified action, should not support" ) ; 
 
			
		
	
		
			
				
					            finish ( ) ; 
 
			
		
	
		
			
				
					            return  false ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        // 设置监听器来监听设置状态的改变
 
 
			
		
	
		
			
				
					        mWorkingNote . setOnSettingStatusChangedListener ( this ) ; 
 
			
		
	
		
			
				
					        return  true ; 
 
			
		
	
		
			
				
					    } 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -303,122 +335,143 @@ public class NoteEditActivity extends Activity implements OnClickListener,
 
			
		
	
		
			
				
					        initNoteScreen ( ) ; //初始化便签屏幕
 
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    / * * 
 
			
		
	
		
			
				
					     *  初 始 化 笔 记 界 面 
 
			
		
	
		
			
				
					     * / 
 
			
		
	
		
			
				
					    private  void  initNoteScreen ( )  { 
 
			
		
	
		
			
				
					        // 设置笔记编辑器文本外观
 
 
			
		
	
		
			
				
					        mNoteEditor . setTextAppearance ( this ,  TextAppearanceResources . getTexAppearanceResource ( mFontSizeId ) ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 根据WorkingNote的CheckListMode设置编辑器模式
 
 
			
		
	
		
			
				
					        if  ( mWorkingNote . getCheckListMode ( )  = =  TextNote . MODE_CHECK_LIST )  { 
 
			
		
	
		
			
				
					            switchToListMode ( mWorkingNote . getContent ( ) ) ; 
 
			
		
	
		
			
				
					        }  else  { 
 
			
		
	
		
			
				
					            // 设置笔记编辑器内容为通过搜索结果高亮后的内容,并将光标移到末尾
 
 
			
		
	
		
			
				
					            mNoteEditor . setText ( getHighlightQueryResult ( mWorkingNote . getContent ( ) ,  mUserQuery ) ) ; 
 
			
		
	
		
			
				
					            mNoteEditor . setSelection ( mNoteEditor . getText ( ) . length ( ) ) ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 隐藏背景选择器中的所有选项
 
 
			
		
	
		
			
				
					        for  ( Integer  id  :  sBgSelectorSelectionMap . keySet ( ) )  { 
 
			
		
	
		
			
				
					            findViewById ( sBgSelectorSelectionMap . get ( id ) ) . setVisibility ( View . GONE ) ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 设置头部视图和笔记编辑器的背景
 
 
			
		
	
		
			
				
					        mHeadViewPanel . setBackgroundResource ( mWorkingNote . getTitleBgResId ( ) ) ; 
 
			
		
	
		
			
				
					        mNoteEditorPanel . setBackgroundResource ( mWorkingNote . getBgColorResId ( ) ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 设置最后修改时间
 
 
			
		
	
		
			
				
					        mNoteHeaderHolder . tvModified . setText ( DateUtils . formatDateTime ( this , 
 
			
		
	
		
			
				
					                mWorkingNote . getModifiedDate ( ) ,  DateUtils . FORMAT_SHOW_DATE 
 
			
		
	
		
			
				
					                        |  DateUtils . FORMAT_NUMERIC_DATE  |  DateUtils . FORMAT_SHOW_TIME 
 
			
		
	
		
			
				
					                        |  DateUtils . FORMAT_SHOW_YEAR ) ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 显示警告标头
 
 
			
		
	
		
			
				
					        showAlertHeader ( ) ; 
 
			
		
	
		
			
				
					        //灏嗘湁鍥剧墖璺<E5A296> 緞鐨勪綅缃<E7B685> 浆鎹<E6B586> 负鍥剧墖
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 将文本中的图片路径转换为实际图片
 
 
			
		
	
		
			
				
					        convertToImage ( ) ; 
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    //路径字符串格式 转换为 图片image格式
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    / * * 
 
			
		
	
		
			
				
					     *  将 文 本 中 的 路 径 格 式 转 换 为 图 片 格 式 
 
			
		
	
		
			
				
					     * / 
 
			
		
	
		
			
				
					    private  void  convertToImage ( )  { 
 
			
		
	
		
			
				
						    NoteEditText  noteEditText  =  ( NoteEditText )  findViewById ( R . id . note_edit_view ) ;  //获取当前的edit
 
 
			
		
	
		
			
				
						    Editable  editable  =  noteEditText . getText ( ) ; //1.获取text
 
 
			
		
	
		
			
				
						     String  noteText  =  editable . toString ( ) ;  // 2.将note 内容转换为字符串
 
			
		
	
		
			
				
						     int  length  =  editable . length ( ) ;  // 内容的 长度
 
			
		
	
		
			
				
						    //3.截取img片段 [local]+uri+[local],   提取uri
 
			
		
	
		
			
				
						     for ( int  i  =  0 ;  i  <  length ;  i + + )  {  
			
		
	
		
			
				
							     for ( int  j  =  i ;  j  <  length ;  j + + )  {  
			
		
	
		
			
				
								    String  img_f  ragment =  noteText . substring ( i ,  j + 1 ) ;  // img_fragment:  片段
 
			
		
	
		
			
				
								    if ( img_f  ragment. length ( )  >  15  & &  img _f ragment. endsWith ( "[/local]" )  & &  img _f ragment. startsWith ( "[local]" ) ) {  
			
		
	
		
			
				
									     int  limit  =  7 ;   // [local]为7个字符
 
			
		
	
		
			
				
									    //[local][/local]共15个字符,   
 
			
		
	
		
			
				
									    int  len  =  img_f  ragment. length ( ) - 15 ;  
			
		
	
		
			
				
									    //从[local]之后的len个字符就是path  
 
			
		
	
		
			
				
									    String  path  =  img_f  ragment. substring ( limit , limit + len ) ; // 获取到了 图片路径
 
			
		
	
		
			
				
									     Bitmap  bitmap  =  null ;  
			
		
	
		
			
				
									     Log . d ( TAG ,  "图片 的 路径是 : + path ) ;  
			
		
	
		
			
				
									     try  {  
			
		
	
		
			
				
										     bitmap  =  BitmapFactory . decodeFile ( path ) ; // 将图片路径解码为图片 格式
 
			
		
	
		
			
				
									     }  catch  ( Exception  e )  {  
			
		
	
		
			
				
										     e . printStackTrace ( ) ;  
			
		
	
		
			
				
									     }  
			
		
	
		
			
				
									    if ( bitmap ! = null ) {   //若图片存在  
 
			
		
	
		
			
				
										     Log . d ( TAG ,  "图片不为null" ) ;  
			
		
	
		
			
				
										     ImageSpan  imageSpan  =  new  ImageSpan ( NoteEditActivity . this ,  bitmap ) ;  
			
		
	
		
			
				
										    //4.创建一个SpannableString对象,   
 
			
		
	
		
			
				
										     String  ss  =  "[local]"  +  path  +  "[/local]" ;  
			
		
	
		
			
				
										     SpannableString  spannableString  =  new  SpannableString ( ss ) ;  
			
		
	
		
			
				
										    //5.将指定的标记对象附加到文本的开始...结束范围  
 
			
		
	
		
			
				
										     spannableString . setSpan ( imageSpan ,  0 ,  ss . length ( ) ,  Spannable . SPAN_EXCLUSIVE_EXCLUSIVE ) ;  
			
		
	
		
			
				
										     Log . d ( TAG ,  "Create spannable string success!" ) ;  
			
		
	
		
			
				
										     Editable  edit_text  =  noteEditText . getEditableText ( ) ;  
			
		
	
		
			
				
										     edit_text . delete ( i , i + len + 15 ) ;  // 6.删掉图片路径的文字 
 
			
		
	
		
			
				
										     edit_text . insert ( i ,  spannableString ) ;  // 7.在路径的起始位置插入图片 
 
			
		
	
		
			
				
									     }  
			
		
	
		
			
				
								     }  
			
		
	
		
			
				
							     }  
			
		
	
		
			
				
						     }  
			
		
	
		
			
				
					         NoteEditText  noteEditText  =  ( NoteEditText )  findViewById ( R . id . note_edit_view ) ;  //  获取编辑器视图 
 
			
		
	
		
			
				
					         Editable  editable  =  noteEditText . getText ( ) ;  // 1. 获取文本  
 
			
		
	
		
			
				
					         String  noteText  =  editable . toString ( ) ;  //  2. 将笔记 内容转换为字符串
 
			
		
	
		
			
				
					         int  length  =  editable . length ( ) ;  //  获取 长度
 
			
		
	
		
			
				
					        // 3. 寻找图片片段 [local]+uri+[local]并  提取uri
 
			
		
	
		
			
				
					         for ( int  i  =  0 ;  i  <  length ;  i + + )  {  
			
		
	
		
			
				
					             for ( int  j  =  i ;  j  <  length ;  j + + )  {  
			
		
	
		
			
				
					                String  imgF  ragment =  noteText . substring ( i ,  j + 1 ) ;  //  imgFragment 为图片路径 片段
 
			
		
	
		
			
				
					                if ( imgF  ragment. length ( )  >  15  & &  img F ragment. endsWith ( "[/local]" )  & &  img F ragment. startsWith ( "[local]" ) ) {  
			
		
	
		
			
				
					                     int  limit  =  7 ;   //   [local]为7个字符
 
			
		
	
		
			
				
					                    // [/local]再加15个字符,   
 
			
		
	
		
			
				
					                    int  len  =  imgF  ragment. length ( ) - 15 ;  
			
		
	
		
			
				
					                    // 在[local]之后的len个字符为图片路径  
 
			
		
	
		
			
				
					                    String  path  =  imgF  ragment. substring ( limit , limit + len ) ; //  获取实际 图片路径
 
			
		
	
		
			
				
					                     Bitmap  bitmap  =  null ;  
			
		
	
		
			
				
					                     Log . d ( TAG ,  "图片 路径:"+ path ) ;  
			
		
	
		
			
				
					                     try  {  
			
		
	
		
			
				
					                         bitmap  =  BitmapFactory . decodeFile ( path ) ; //  将图片路径转换为bitmap 格式
 
			
		
	
		
			
				
					                     }  catch  ( Exception  e )  {  
			
		
	
		
			
				
					                         e . printStackTrace ( ) ;  
			
		
	
		
			
				
					                     }  
			
		
	
		
			
				
					                    if ( bitmap ! = null ) {   // 如果图片不为null  
 
			
		
	
		
			
				
					                         Log . d ( TAG ,  "图片不为null" ) ;  
			
		
	
		
			
				
					                         ImageSpan  imageSpan  =  new  ImageSpan ( NoteEditActivity . this ,  bitmap ) ;  
			
		
	
		
			
				
					                        // 4. 创建一个SpannableString并将其包装为ImageSpan  
 
			
		
	
		
			
				
					                         String  ss  =  "[local]"  +  path  +  "[/local]" ;  
			
		
	
		
			
				
					                         SpannableString  spannableString  =  new  SpannableString ( ss ) ;  
			
		
	
		
			
				
					                        // 5. 设置span的范围并将其中的部分替换为图像  
 
			
		
	
		
			
				
					                         spannableString . setSpan ( imageSpan ,  0 ,  ss . length ( ) ,  Spannable . SPAN_EXCLUSIVE_EXCLUSIVE ) ;  
			
		
	
		
			
				
					                         Log . d ( TAG ,  "Create spannable string success!" ) ;  
			
		
	
		
			
				
					                         Editable  edit_text  =  noteEditText . getEditableText ( ) ;  
			
		
	
		
			
				
					                         edit_text . delete ( i ,   i + len + 15 ) ;  //  6. 删除图片路径部分 
 
			
		
	
		
			
				
					                         edit_text . insert ( i ,  spannableString ) ;  //  7. 插入图片到指定位置 
 
			
		
	
		
			
				
					                     }  
			
		
	
		
			
				
					                 }  
			
		
	
		
			
				
					             }  
			
		
	
		
			
				
					         }  
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					    //重写onActivityResult()来处理返回的数据
 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    / * * 
 
			
		
	
		
			
				
					     *  接 收 并 处 理 ActivityResult 返 回 的 内 容 
 
			
		
	
		
			
				
					     * / 
 
			
		
	
		
			
				
					    protected  void  onActivityResult ( int  requestCode ,  int  resultCode ,  Intent  intent )  { 
 
			
		
	
		
			
				
						    super . onActivityResult ( requestCode ,  resultCode ,  intent ) ; 
 
			
		
	
		
			
				
						    ContentResolver  resolver  =  getContentResolver ( ) ; 
 
			
		
	
		
			
				
						     switch  ( requestCode )  {  
			
		
	
		
			
				
							     case  PHOTO_REQUEST :  
			
		
	
		
			
				
								     Uri  originalUri  =  intent . getData ( ) ;  // 1.获得 图片的真实路径
 
			
		
	
		
			
				
								     Bitmap  bitmap  =  null ;  
			
		
	
		
			
				
								     try  {  
			
		
	
		
			
				
									     bitmap  =  BitmapFactory . decodeStream ( resolver . openInputStream ( originalUri ) ) ; //2.解码  
			
		
	
		
			
				
								     }  catch  ( FileNotFoundException  e )  {  
			
		
	
		
			
				
									     Log . d ( TAG ,  "onActivityResult: get file_exception" ) ;  
			
		
	
		
			
				
									     e . printStackTrace ( ) ;  
			
		
	
		
			
				
								     }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								     if ( bitmap  ! =  null ) {  
			
		
	
		
			
				
									    //3.根据Bitmap对象创建ImageSpan对象  
 
			
		
	
		
			
				
									     Log . d ( TAG ,  "onActivityResult: bitmap is not null" ) ;  
			
		
	
		
			
				
									     ImageSpan  imageSpan  =  new  ImageSpan ( NoteEditActivity . this ,  bitmap ) ;  
			
		
	
		
			
				
									     String  path  =  getPath ( this , originalUri ) ;  
			
		
	
		
			
				
									    //4.使用[local][/local]将path括起来,   位置
 
			
		
	
		
			
				
									    String  img_f  ragment=  "[local]"  +  path  +  "[/local]" ;  
			
		
	
		
			
				
									    //创建一个SpannableString对象,   
 
			
		
	
		
			
				
									     SpannableString  spannableString  =  new  SpannableString ( img _f ragment) ;  
			
		
	
		
			
				
									     spannableString . setSpan ( imageSpan ,  0 ,  img _f ragment. length ( ) ,  Spannable . SPAN_EXCLUSIVE_EXCLUSIVE ) ;  
			
		
	
		
			
				
									    //5.将选择的图片追加到EditText中光标所在  位置
 
			
		
	
		
			
				
									     NoteEditText  e  =  ( NoteEditText )  findViewById ( R . id . note_edit_view ) ;  
			
		
	
		
			
				
									     int  index  =  e . getSelectionStart ( ) ;  // 获取光标所在 位置
 
			
		
	
		
			
				
									     Log . d ( TAG ,  "Index 是 : " +  index ) ;  
			
		
	
		
			
				
									     Editable  edit_text  =  e . getEditableText ( ) ;  
			
		
	
		
			
				
									     edit_text . insert ( index ,  spannableString ) ;  // 将图片插入到光标所在 位置
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
									     mWorkingNote . mContent  =  e . getText ( ) . toString ( ) ;  
			
		
	
		
			
				
									    //6.把改动提交到数据库中,两个数据库表都要改的  
 
			
		
	
		
			
				
									     ContentResolver  contentResolver  =  getContentResolver ( ) ;  
			
		
	
		
			
				
									     ContentValues  contentValues  =  new  ContentValues ( ) ;  
			
		
	
		
			
				
									     final  long  id  =  mWorkingNote . getNoteId ( ) ;  
			
		
	
		
			
				
									     contentValues . put ( "snippet" , mWorkingNote . mContent ) ;  
			
		
	
		
			
				
									     contentResolver . update ( Uri . parse ( "content://micode_notes/note" ) ,  contentValues , "_id=?" , new  String [ ] { "" + id } ) ;  
			
		
	
		
			
				
									     ContentValues  contentValues1  =  new  ContentValues ( ) ;  
			
		
	
		
			
				
									     contentValues1 . put ( "content" , mWorkingNote . mContent ) ;  
			
		
	
		
			
				
									     contentResolver . update ( Uri . parse ( "content://micode_notes/data" ) ,  contentValues1 , "mime_type=? and note_id=?" ,  new  String [ ] { "vnd.android.cursor.item/text_note" , "" + id } ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								    } else  {  
			
		
	
		
			
				
									     Toast . makeText ( NoteEditActivity . this ,  "获取图片失败" ,  Toast . LENGTH_SHORT ) . show ( ) ;  
			
		
	
		
			
				
								     }  
			
		
	
		
			
				
								     break ;  
			
		
	
		
			
				
							     default :  
			
		
	
		
			
				
								     break ;  
			
		
	
		
			
				
						     }  
			
		
	
		
			
				
					         super . onActivityResult ( requestCode ,  resultCode ,  intent ) ;  
			
		
	
		
			
				
					         ContentResolver  resolver  =  getContentResolver ( ) ;  
			
		
	
		
			
				
					         switch  ( requestCode )  {  
			
		
	
		
			
				
					             case  PHOTO_REQUEST :  
			
		
	
		
			
				
					                 Uri  originalUri  =  intent . getData ( ) ;  //  1. 获取 图片的真实路径
 
			
		
	
		
			
				
					                 Bitmap  bitmap  =  null ;  
			
		
	
		
			
				
					                 try  {  
			
		
	
		
			
				
					                     bitmap  =  BitmapFactory . decodeStream ( resolver . openInputStream ( originalUri ) ) ;  // 2. 读取  图片
 
			
		
	
		
			
				
					                 }  catch  ( FileNotFoundException  e )  {  
			
		
	
		
			
				
					                     Log . d ( TAG ,  "onActivityResult: get file_exception" ) ;  
			
		
	
		
			
				
					                     e . printStackTrace ( ) ;  
			
		
	
		
			
				
					                 }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                 if ( bitmap  ! =  null ) {  
			
		
	
		
			
				
					                    // 3. 创建Bitmap并转换为ImageSpan  
 
			
		
	
		
			
				
					                     Log . d ( TAG ,  "onActivityResult: bitmap is not null" ) ;  
			
		
	
		
			
				
					                     ImageSpan  imageSpan  =  new  ImageSpan ( NoteEditActivity . this ,  bitmap ) ;  
			
		
	
		
			
				
					                     String  path  =  getPath ( this , originalUri ) ;  
			
		
	
		
			
				
					                    // 4. 使用[local][/local]标签包裹路径并插入到note中的指定  位置
 
			
		
	
		
			
				
					                    String  imgF  ragment=  "[local]"  +  path  +  "[/local]" ;  
			
		
	
		
			
				
					                    // 创建一个SpannableString并将其包装为ImageSpan  
 
			
		
	
		
			
				
					                     SpannableString  spannableString  =  new  SpannableString ( img F ragment) ;  
			
		
	
		
			
				
					                     spannableString . setSpan ( imageSpan ,  0 ,  img F ragment. length ( ) ,  Spannable . SPAN_EXCLUSIVE_EXCLUSIVE ) ;  
			
		
	
		
			
				
					                    // 5. 将选中的图片插入到EditText的光标  位置
 
			
		
	
		
			
				
					                     NoteEditText  e  =  ( NoteEditText )  findViewById ( R . id . note_edit_view ) ;  
			
		
	
		
			
				
					                     int  index  =  e . getSelectionStart ( ) ;  //  获取光标的 位置
 
			
		
	
		
			
				
					                     Log . d ( TAG ,  "Index : " +  index ) ;  
			
		
	
		
			
				
					                     Editable  edit_text  =  e . getEditableText ( ) ;  
			
		
	
		
			
				
					                     edit_text . insert ( index ,  spannableString ) ;  //   将图片插入到光标位置
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                     mWorkingNote . mContent  =  e . getText ( ) . toString ( ) ;  
			
		
	
		
			
				
					                    // 6. 将更新后的内容提交到数据库  
 
			
		
	
		
			
				
					                     ContentResolver  contentResolver  =  getContentResolver ( ) ;  
			
		
	
		
			
				
					                     ContentValues  contentValues  =  new  ContentValues ( ) ;  
			
		
	
		
			
				
					                     final  long  id  =  mWorkingNote . getNoteId ( ) ;  
			
		
	
		
			
				
					                     contentValues . put ( "snippet" , mWorkingNote . mContent ) ;  
			
		
	
		
			
				
					                     contentResolver . update ( Uri . parse ( "content://micode_notes/note" ) ,  contentValues , "_id=?" , new  String [ ] { "" + id } ) ;  
			
		
	
		
			
				
					                     ContentValues  contentValues1  =  new  ContentValues ( ) ;  
			
		
	
		
			
				
					                     contentValues1 . put ( "content" , mWorkingNote . mContent ) ;  
			
		
	
		
			
				
					                     contentResolver . update ( Uri . parse ( "content://micode_notes/data" ) ,  contentValues1 , "mime_type=? and note_id=?" ,  new  String [ ] { "vnd.android.cursor.item/text_note" , "" + id } ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                }  else   {  
			
		
	
		
			
				
					                     Toast . makeText ( NoteEditActivity . this ,  "获取图片失败" ,  Toast . LENGTH_SHORT ) . show ( ) ;  
			
		
	
		
			
				
					                 }  
			
		
	
		
			
				
					                 break ;  
			
		
	
		
			
				
					             default :  
			
		
	
		
			
				
					                 break ;  
			
		
	
		
			
				
					         }  
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					    // 获取文件的 real path
 
			
		
	
		
			
				
					    // <EFBFBD> <EFBFBD> ȡ<EFBFBD> ļ<EFBFBD> <EFBFBD> <EFBFBD> 
 
			
		
	
		
			
				
					    public  String  getPath ( final  Context  context ,  final  Uri  uri )  { 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        final  boolean  isKitKat  =  Build . VERSION . SDK_INT  > =  Build . VERSION_CODES . KITKAT ; 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -644,15 +697,18 @@ public class NoteEditActivity extends Activity implements OnClickListener,
 
			
		
	
		
			
				
					    public  void  onClick ( View  v )  { 
 
			
		
	
		
			
				
					        int  id  =  v . getId ( ) ; 
 
			
		
	
		
			
				
					        if  ( id  = =  R . id . btn_set_bg_color )  { 
 
			
		
	
		
			
				
					            // 显示笔记背景颜色选择器,并显示当前选中的颜色
 
 
			
		
	
		
			
				
					            mNoteBgColorSelector . setVisibility ( View . VISIBLE ) ; 
 
			
		
	
		
			
				
					            findViewById ( sBgSelectorSelectionMap . get ( mWorkingNote . getBgColorId ( ) ) ) . setVisibility ( 
 
			
		
	
		
			
				
					                    View . VISIBLE ) ; 
 
			
		
	
		
			
				
					        }  else  if  ( sBgSelectorBtnsMap . containsKey ( id ) )  { 
 
			
		
	
		
			
				
					            // 隐藏当前选中的颜色,设置新的背景颜色并隐藏选择器
 
 
			
		
	
		
			
				
					            findViewById ( sBgSelectorSelectionMap . get ( mWorkingNote . getBgColorId ( ) ) ) . setVisibility ( 
 
			
		
	
		
			
				
					                    View . GONE ) ; 
 
			
		
	
		
			
				
					            mWorkingNote . setBgColorId ( sBgSelectorBtnsMap . get ( id ) ) ; 
 
			
		
	
		
			
				
					            mNoteBgColorSelector . setVisibility ( View . GONE ) ; 
 
			
		
	
		
			
				
					        }  else  if  ( sFontSizeBtnsMap . containsKey ( id ) )  { 
 
			
		
	
		
			
				
					            // 切换字体大小, ,  
 
			
		
	
		
			
				
					            findViewById ( sFontSelectorSelectionMap . get ( mFontSizeId ) ) . setVisibility ( View . GONE ) ; 
 
			
		
	
		
			
				
					            mFontSizeId  =  sFontSizeBtnsMap . get ( id ) ; 
 
			
		
	
		
			
				
					            mSharedPrefs . edit ( ) . putInt ( PREFERENCE_FONT_SIZE ,  mFontSizeId ) . commit ( ) ; 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -697,40 +753,66 @@ public class NoteEditActivity extends Activity implements OnClickListener,
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    @Override 
 
			
		
	
		
			
				
					    / * * 
 
			
		
	
		
			
				
					     *  在 准 备 显 示 选 项 菜 单 时 调 用 , 根 据 当 前 便 签 状 态 设 置 菜 单 项 。 
 
			
		
	
		
			
				
					     *  @param  menu  要 准 备 的 选 项 菜 单 
 
			
		
	
		
			
				
					     *  @return  如 果 处 理 了 菜 单 , 返 回 true ; 否 则 返 回 false 
 
			
		
	
		
			
				
					     * / 
 
			
		
	
		
			
				
					    public  boolean  onPrepareOptionsMenu ( Menu  menu )  { 
 
			
		
	
		
			
				
					        // 如果Activity即将被销毁,  
 
			
		
	
		
			
				
					        if  ( isFinishing ( ) )  { 
 
			
		
	
		
			
				
					            return  true ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 清除设置状态
 
 
			
		
	
		
			
				
					        clearSettingState ( ) ; 
 
			
		
	
		
			
				
					        menu . clear ( ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 根据便签所属文件夹的不同加载不同的菜单项
 
 
			
		
	
		
			
				
					        if  ( mWorkingNote . getFolderId ( )  = =  Notes . ID_CALL_RECORD_FOLDER )  { 
 
			
		
	
		
			
				
					            getMenuInflater ( ) . inflate ( R . menu . call_note_edit ,  menu ) ; 
 
			
		
	
		
			
				
					        }  else  { 
 
			
		
	
		
			
				
					            getMenuInflater ( ) . inflate ( R . menu . note_edit ,  menu ) ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 如果便签处于待办事项模式,则显示对应的菜单项标题
 
 
			
		
	
		
			
				
					        if  ( mWorkingNote . getCheckListMode ( )  = =  TextNote . MODE_CHECK_LIST )  { 
 
			
		
	
		
			
				
					            menu . findItem ( R . id . menu_list_mode ) . setTitle ( R . string . menu_normal_mode ) ; 
 
			
		
	
		
			
				
					        }  else  { 
 
			
		
	
		
			
				
					            menu . findItem ( R . id . menu_list_mode ) . setTitle ( R . string . menu_list_mode ) ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // 如果便签设置了闹钟提醒,则隐藏添加提醒的菜单项
 
 
			
		
	
		
			
				
					        if  ( mWorkingNote . hasClockAlert ( ) )  { 
 
			
		
	
		
			
				
					            menu . findItem ( R . id . menu_alert ) . setVisible ( false ) ; 
 
			
		
	
		
			
				
					        }  else  { 
 
			
		
	
		
			
				
					            menu . findItem ( R . id . menu_delete_remind ) . setVisible ( false ) ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        return  true ; 
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    @Override 
 
			
		
	
		
			
				
					    / * * 
 
			
		
	
		
			
				
					     *  处 理 菜 单 项 的 点 击 事 件 
 
			
		
	
		
			
				
					     *  @param  item  被 点 击 的 菜 单 项 
 
			
		
	
		
			
				
					     *  @return  true 表 示 该 事 件 已 被 处 理 
 
			
		
	
		
			
				
					     * / 
 
			
		
	
		
			
				
					    public  boolean  onOptionsItemSelected ( MenuItem  item )  { 
 
			
		
	
		
			
				
					        // 获取被点击菜单项的id
 
 
			
		
	
		
			
				
					        int  itemId  =  item . getItemId ( ) ; 
 
			
		
	
		
			
				
					        // 如果点击的是新建笔记菜单项
 
 
			
		
	
		
			
				
					        if  ( itemId  = =  R . id . menu_new_note )  { 
 
			
		
	
		
			
				
					            createNewNote ( ) ; 
 
			
		
	
		
			
				
					        }  else  if  ( itemId  = =  R . id . menu_delete )  { 
 
			
		
	
		
			
				
					            createNewNote ( ) ;  // 调用创建新笔记的方法
 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        // 如果点击的是删除菜单项
 
 
			
		
	
		
			
				
					        else  if  ( itemId  = =  R . id . menu_delete )  { 
 
			
		
	
		
			
				
					            // 弹出删除确认对话框
 
 
			
		
	
		
			
				
					            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_delete_note ) ) ; 
 
			
		
	
		
			
				
					            // 点击确认按钮删除当前笔记并关闭当前页面
 
 
			
		
	
		
			
				
					            builder . setPositiveButton ( android . R . string . ok , 
 
			
		
	
		
			
				
					                    new  DialogInterface . OnClickListener ( )  { 
 
			
		
	
		
			
				
					                        public  void  onClick ( DialogInterface  dialog ,  int  which )  { 
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -738,25 +820,38 @@ public class NoteEditActivity extends Activity implements OnClickListener,
 
			
		
	
		
			
				
					                            finish ( ) ; 
 
			
		
	
		
			
				
					                        } 
 
			
		
	
		
			
				
					                    } ) ; 
 
			
		
	
		
			
				
					            builder . setNegativeButton ( android . R . string . cancel ,  null ) ; 
 
			
		
	
		
			
				
					            builder . show ( ) ; 
 
			
		
	
		
			
				
					        }  else  if  ( itemId  = =  R . id . menu_font_size )  { 
 
			
		
	
		
			
				
					            mFontSizeSelector . setVisibility ( View . VISIBLE ) ; 
 
			
		
	
		
			
				
					            findViewById ( sFontSelectorSelectionMap . get ( mFontSizeId ) ) . setVisibility ( View . VISIBLE ) ; 
 
			
		
	
		
			
				
					        }  else  if  ( itemId  = =  R . id . menu_list_mode )  { 
 
			
		
	
		
			
				
					            builder . setNegativeButton ( android . R . string . cancel ,  null ) ;  // 取消按钮无操作
 
 
			
		
	
		
			
				
					            builder . show ( ) ;  // 显示对话框
 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        // 如果点击的是字体大小菜单项
 
 
			
		
	
		
			
				
					        else  if  ( itemId  = =  R . id . menu_font_size )  { 
 
			
		
	
		
			
				
					            mFontSizeSelector . setVisibility ( View . VISIBLE ) ;  // 显示字体大小选择器
 
 
			
		
	
		
			
				
					            findViewById ( sFontSelectorSelectionMap . get ( mFontSizeId ) ) . setVisibility ( View . VISIBLE ) ;  // 根据字体大小id显示相应的视图
 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        // 如果点击的是列表模式菜单项
 
 
			
		
	
		
			
				
					        else  if  ( itemId  = =  R . id . menu_list_mode )  { 
 
			
		
	
		
			
				
					            // 切换笔记的列表模式
 
 
			
		
	
		
			
				
					            mWorkingNote . setCheckListMode ( mWorkingNote . getCheckListMode ( )  = =  0  ? 
 
			
		
	
		
			
				
					                    TextNote . MODE_CHECK_LIST  :  0 ) ; 
 
			
		
	
		
			
				
					        }  else  if  ( itemId  = =  R . id . menu_share )  { 
 
			
		
	
		
			
				
					            getWorkingText ( ) ; 
 
			
		
	
		
			
				
					            sendTo ( this ,  mWorkingNote . getContent ( ) ) ; 
 
			
		
	
		
			
				
					        }  else  if  ( itemId  = =  R . id . menu_send_to_desktop )  { 
 
			
		
	
		
			
				
					            sendToDesktop ( ) ; 
 
			
		
	
		
			
				
					        }  else  if  ( itemId  = =  R . id . menu_alert )  { 
 
			
		
	
		
			
				
					            setReminder ( ) ; 
 
			
		
	
		
			
				
					        }  else  if  ( itemId  = =  R . id . menu_delete_remind )  { 
 
			
		
	
		
			
				
					            mWorkingNote . setAlertDate ( 0 ,  false ) ; 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        return  true ; 
 
			
		
	
		
			
				
					        // 如果点击的是分享菜单项
 
 
			
		
	
		
			
				
					        else  if  ( itemId  = =  R . id . menu_share )  { 
 
			
		
	
		
			
				
					            getWorkingText ( ) ;  // 获取工作中的文本
 
 
			
		
	
		
			
				
					            sendTo ( this ,  mWorkingNote . getContent ( ) ) ;  // 发送文本内容
 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        // 如果点击的是发送到桌面菜单项
 
 
			
		
	
		
			
				
					        else  if  ( itemId  = =  R . id . menu_send_to_desktop )  { 
 
			
		
	
		
			
				
					            sendToDesktop ( ) ;  // 发送到桌面
 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        // 如果点击的是提醒菜单项
 
 
			
		
	
		
			
				
					        else  if  ( itemId  = =  R . id . menu_alert )  { 
 
			
		
	
		
			
				
					            setReminder ( ) ;  // 设置提醒
 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        // 如果点击的是删除提醒菜单项
 
 
			
		
	
		
			
				
					        else  if  ( itemId  = =  R . id . menu_delete_remind )  { 
 
			
		
	
		
			
				
					            mWorkingNote . setAlertDate ( 0 ,  false ) ;  // 将笔记的提醒日期设为0,  
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        return  true ;  // 事件已处理,  
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  void  setReminder ( )  { 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -788,26 +883,31 @@ public class NoteEditActivity extends Activity implements OnClickListener,
 
			
		
	
		
			
				
					        startActivity ( intent ) ; 
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    / * * 
 
			
		
	
		
			
				
					     *  删 除 当 前 笔 记 
 
			
		
	
		
			
				
					     *  如 果 当 前 笔 记 在 数 据 库 中 存 在 , 则 执 行 删 除 操 作 
 
			
		
	
		
			
				
					     *  如 果 同 步 模 式 下 , 将 笔 记 移 动 到 垃 圾 箱 , 否 则 执 行 批 量 删 除 操 作 
 
			
		
	
		
			
				
					     * / 
 
			
		
	
		
			
				
					    private  void  deleteCurrentNote ( )  { 
 
			
		
	
		
			
				
					        if  ( mWorkingNote . existInDatabase ( ) )  { 
 
			
		
	
		
			
				
					            HashSet < Long >  ids  =  new  HashSet < Long > ( ) ; 
 
			
		
	
		
			
				
					            long  id  =  mWorkingNote . getNoteId ( ) ; 
 
			
		
	
		
			
				
					            if  ( id  ! =  Notes . ID_ROOT_FOLDER )  { 
 
			
		
	
		
			
				
					                ids . add ( id ) ; 
 
			
		
	
		
			
				
					        if  ( mWorkingNote . existInDatabase ( ) )  {  // 检查当前笔记是否存在于数据库中
  
 
			
		
	
		
			
				
					            HashSet < Long >  ids  =  new  HashSet < Long > ( ) ;  // 创建一个存储笔记ID的集合
  
 
			
		
	
		
			
				
					            long  id  =  mWorkingNote . getNoteId ( ) ;  // 获取当前笔记的ID
  
 
			
		
	
		
			
				
					            if  ( id  ! =  Notes . ID_ROOT_FOLDER )  {  // 如果当前笔记不是根文件夹中的笔记
  
 
			
		
	
		
			
				
					                ids . add ( id ) ;  // 将笔记ID添加到集合中
  
 
			
		
	
		
			
				
					            }  else  { 
 
			
		
	
		
			
				
					                Log . d ( TAG ,  "Wrong note id, should not happen" ) ; 
 
			
		
	
		
			
				
					                Log . d ( TAG ,  "Wrong note id, should not happen" ) ;  // 记录错误日志,   
 
			
		
	
		
			
				
					            } 
 
			
		
	
		
			
				
					            if  ( ! isSyncMode ( ) )  { 
 
			
		
	
		
			
				
					                if  ( ! DataUtils . batchDeleteNotes ( getContentResolver ( ) ,  ids ) )  { 
 
			
		
	
		
			
				
					                    Log . e ( TAG ,  "Delete Note error" ) ; 
 
			
		
	
		
			
				
					            if  ( ! isSyncMode ( ) )  {  // 如果不是同步模式
  
 
			
		
	
		
			
				
					                if  ( ! DataUtils . batchDeleteNotes ( getContentResolver ( ) ,  ids ) )  {  // 执行批量删除操作
  
 
			
		
	
		
			
				
					                    Log . e ( TAG ,  "Delete Note error" ) ;  // 记录错误日志,表示删除笔记出错
  
 
			
		
	
		
			
				
					                } 
 
			
		
	
		
			
				
					            }  else  { 
 
			
		
	
		
			
				
					                if  ( ! DataUtils . batchMoveToFolder ( getContentResolver ( ) ,  ids ,  Notes . ID_TRASH_FOLER ) )  { 
 
			
		
	
		
			
				
					                    Log . e ( TAG ,  "Move notes to trash folder error, should not happens" ) ; 
 
			
		
	
		
			
				
					            }  else  {  // 如果是同步模式
  
 
			
		
	
		
			
				
					                if  ( ! DataUtils . batchMoveToFolder ( getContentResolver ( ) ,  ids ,  Notes . ID_TRASH_FOLER ) )  {  // 将笔记移动到垃圾箱
  
 
			
		
	
		
			
				
					                    Log . e ( TAG ,  "Move notes to trash folder error, should not happens" ) ;  // 记录错误日志,表示移动笔记到垃圾箱出错,不应该发生的错误
  
 
			
		
	
		
			
				
					                } 
 
			
		
	
		
			
				
					            } 
 
			
		
	
		
			
				
					        } 
 
			
		
	
		
			
				
					        mWorkingNote . markDeleted ( true ) ; 
 
			
		
	
		
			
				
					        mWorkingNote . markDeleted ( true ) ;  // 标记当前笔记为已删除状态
  
 
			
		
	
		
			
				
					    } 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    private  boolean  isSyncMode ( )  {