@ -16,11 +16,9 @@
package net.micode.notes.ui ;
import android.Manifest ;
import android.app.Activity ;
import android.app.AlarmManager ;
import android.app.AlertDialog ;
import android.app.Dialog ;
import android.app.PendingIntent ;
import android.app.SearchManager ;
import android.appwidget.AppWidgetManager ;
@ -31,12 +29,10 @@ import android.content.Context;
import android.content.DialogInterface ;
import android.content.Intent ;
import android.content.SharedPreferences ;
import android.content.pm.PackageManager ;
import android.database.Cursor ;
import android.graphics.Bitmap ;
import android.graphics.BitmapFactory ;
import android.graphics.Paint ;
import android.graphics.Typeface ;
import android.net.Uri ;
import android.os.Build ;
import android.os.Bundle ;
@ -44,17 +40,14 @@ import android.os.Environment;
import android.preference.PreferenceManager ;
import android.provider.DocumentsContract ;
import android.provider.MediaStore ;
import android.speech.tts.TextToSpeech ;
import android.text.Editable ;
import android.text.Spannable ;
import android.text.SpannableString ;
import android.text.TextUtils ;
import android.text.TextWatcher ;
import android.text.format.DateUtils ;
import android.text.style.BackgroundColorSpan ;
import android.text.style.ImageSpan ;
import android.util.Log ;
import android.view.KeyEvent ;
import android.view.LayoutInflater ;
import android.view.Menu ;
import android.view.MenuItem ;
@ -62,8 +55,6 @@ import android.view.MotionEvent;
import android.view.View ;
import android.view.View.OnClickListener ;
import android.view.WindowManager ;
import android.view.inputmethod.InputMethodManager ;
import android.widget.Button ;
import android.widget.CheckBox ;
import android.widget.CompoundButton ;
import android.widget.CompoundButton.OnCheckedChangeListener ;
@ -73,16 +64,6 @@ import android.widget.ImageView;
import android.widget.LinearLayout ;
import android.widget.TextView ;
import android.widget.Toast ;
import androidx.appcompat.app.AppCompatActivity ;
import androidx.core.app.ActivityCompat ;
import androidx.core.content.ContextCompat ;
import androidx.annotation.NonNull ;
import androidx.annotation.Nullable ;
import com.baidu.speech.EventListener ;
import com.baidu.speech.EventManager ;
import com.baidu.speech.EventManagerFactory ;
import com.baidu.speech.asr.SpeechConstant ;
import net.micode.notes.R ;
import net.micode.notes.data.Notes ;
@ -97,24 +78,16 @@ import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener;
import net.micode.notes.widget.NoteWidgetProvider_2x ;
import net.micode.notes.widget.NoteWidgetProvider_4x ;
import org.json.JSONException ;
import org.json.JSONObject ;
import java.io.FileNotFoundException ;
import java.text.BreakIterator ;
import java.util.Locale ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.HashSet ;
import java.util.LinkedHashMap ;
import java.util.Map ;
import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
public class NoteEditActivity extends Activity implements OnClickListener ,
NoteSettingChangedListener , OnTextViewChangeListener , EventListener {
private AlertDialog alertDialog2 ;
NoteSettingChangedListener , OnTextViewChangeListener {
private class HeadViewHolder {
public TextView tvModified ;
@ -123,12 +96,9 @@ public class NoteEditActivity extends Activity implements OnClickListener,
public TextView tvAlertDate ;
public ImageView ibSetBgColor ;
public BreakIterator text_num ;
public TextView text_nums ;
}
private static final Map < Integer , Integer > sBgSelectorBtnsMap = new HashMap < Integer , Integer > ( ) ;
static {
sBgSelectorBtnsMap . put ( R . id . iv_bg_yellow , ResourceParser . YELLOW ) ;
sBgSelectorBtnsMap . put ( R . id . iv_bg_red , ResourceParser . RED ) ;
@ -138,7 +108,6 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map < Integer , Integer > sBgSelectorSelectionMap = new HashMap < Integer , Integer > ( ) ;
static {
sBgSelectorSelectionMap . put ( ResourceParser . YELLOW , R . id . iv_bg_yellow_select ) ;
sBgSelectorSelectionMap . put ( ResourceParser . RED , R . id . iv_bg_red_select ) ;
@ -148,7 +117,6 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map < Integer , Integer > sFontSizeBtnsMap = new HashMap < Integer , Integer > ( ) ;
static {
sFontSizeBtnsMap . put ( R . id . ll_font_large , ResourceParser . TEXT_LARGE ) ;
sFontSizeBtnsMap . put ( R . id . ll_font_small , ResourceParser . TEXT_SMALL ) ;
@ -157,7 +125,6 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private static final Map < Integer , Integer > sFontSelectorSelectionMap = new HashMap < Integer , Integer > ( ) ;
static {
sFontSelectorSelectionMap . put ( ResourceParser . TEXT_LARGE , R . id . iv_large_select ) ;
sFontSelectorSelectionMap . put ( ResourceParser . TEXT_SMALL , R . id . iv_small_select ) ;
@ -196,71 +163,18 @@ public class NoteEditActivity extends Activity implements OnClickListener,
private String mUserQuery ;
private Pattern mPattern ;
private static final int GET_STORAGE_PERMISSION = 2 ;
private final int PHOTO_REQUEST = 1 ; //请求码
private static final int REQUEST_SET_PASSCODE = 2 ;
private static final int REQUEST_UNLOCK = 3 ;
private boolean Locked ; /* 用以判断是否已解锁 */
private EditText editText ;
private TextView textView ;
protected EditText txtResult ; //识别结果
protected Button startBtn ; //开始识别 一直不说话会自动停止,需要再次打开
private EventManager asr ; //语音识别核心库
@Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState ) ;
this . setContentView ( R . layout . note_edit ) ;
if ( savedInstanceState = = null & & ! initActivityState ( getIntent ( ) ) ) {
finish ( ) ;
return ;
}
editText = ( EditText ) findViewById ( R . id . note_edit_view ) ;
this . setContentView ( R . layout . note_edit ) ;
if ( savedInstanceState = = null & & ! initActivityState ( getIntent ( ) ) ) {
finish ( ) ;
return ;
}
initResources ( ) ;
speech_sum ( ) ;
initView ( ) ;
txtResult = findViewById ( R . id . note_edit_view ) ;
asr = EventManagerFactory . create ( this , "asr" ) ;
//注册自己的输出事件类
asr . registerListener ( this ) ; // EventListener 中 onEvent方法
startBtn . setOnTouchListener ( new View . OnTouchListener ( ) {
@Override
public boolean onTouch ( View v , MotionEvent event ) {
int action = event . getAction ( ) ;
switch ( action ) {
case MotionEvent . ACTION_DOWN :
start ( ) ;
/ * mStartSpeechButton . setBackgroundResource (
R . drawable . bdspeech_btn_orangelight_pressed ) ; * /
break ;
case MotionEvent . ACTION_UP :
stop ( ) ;
/ * mStartSpeechButton . setBackgroundResource (
R . drawable . bdspeech_btn_orangelight_normal ) ; * /
break ;
default :
return false ;
}
return true ;
}
} ) ;
//根据id获取添加图片按钮
@ -269,125 +183,18 @@ public class NoteEditActivity extends Activity implements OnClickListener,
add_img_btn . setOnClickListener ( new View . OnClickListener ( ) {
@Override
public void onClick ( View view ) {
if ( ContextCompat . checkSelfPermission ( NoteEditActivity . this , Manifest . permission . WRITE_EXTERNAL_STORAGE ) ! = PackageManager . PERMISSION_GRANTED ) {
//没有授权进行权限申请
ActivityCompat . requestPermissions ( NoteEditActivity . this , new String [ ] { Manifest . permission . WRITE_EXTERNAL_STORAGE , Manifest . permission . READ_EXTERNAL_STORAGE } , GET_STORAGE_PERMISSION ) ;
} else {
Log . d ( TAG , "onClick: click add image button" ) ;
//ACTION_GET_CONTENT: 允许用户选择特殊种类的数据,并返回(特殊种类的数据:照一张相片或录一段音)
Intent loadImage = new Intent ( Intent . ACTION_GET_CONTENT ) ;
//Category属性用于指定当前动作( Action) 被执行的环境.
//CATEGORY_OPENABLE; 用来指示一个ACTION_GET_CONTENT的intent
loadImage . addCategory ( Intent . CATEGORY_OPENABLE ) ;
loadImage . setType ( "image/*" ) ;
startActivityForResult ( loadImage , PHOTO_REQUEST ) ;
}
}
} ) ;
}
public void speech_sum ( ) {
EditText editable = findViewById ( R . id . note_edit_view ) ;
//Toast.makeText(NoteEditActivity.this, editable.getText().toString(), Toast.LENGTH_SHORT).show();
final Button speak = findViewById ( R . id . iatBtn ) ;
final int [ ] tmp = new int [ 1 ] ;
final TextToSpeech [ ] tts = new TextToSpeech [ 1 ] ;
tts [ 0 ] = new TextToSpeech ( NoteEditActivity . this , new TextToSpeech . OnInitListener ( ) {
@Override
public void onInit ( int status ) {
tts [ 0 ] . setLanguage ( Locale . US ) ;
}
} ) ;
editable . addTextChangedListener ( new TextWatcher ( ) {
@Override
public void beforeTextChanged ( CharSequence s , int start , int count , int after ) {
}
@Override
public void onTextChanged ( CharSequence s , int start , int before , int count ) {
tmp [ 0 ] = cutOfimage ( operateText ( s . toString ( ) ) ) . length ( ) ;
TextView number_word = findViewById ( R . id . text_nums ) ;
number_word . setText ( "字符数:" + tmp [ 0 ] ) ;
final String temp = cutOfimage ( s . toString ( ) ) ;
speak . setOnClickListener ( new OnClickListener ( ) {
@Override
public void onClick ( View v ) {
tts [ 0 ] . speak ( temp . toString ( ) , TextToSpeech . QUEUE_FLUSH , null ) ;
}
} ) ;
}
@Override
public void afterTextChanged ( Editable s ) {
Log . d ( TAG , "onClick: click add image button" ) ;
//ACTION_GET_CONTENT: 允许用户选择特殊种类的数据,并返回(特殊种类的数据:照一张相片或录一段音)
Intent loadImage = new Intent ( Intent . ACTION_GET_CONTENT ) ;
//Category属性用于指定当前动作( Action) 被执行的环境.
//CATEGORY_OPENABLE; 用来指示一个ACTION_GET_CONTENT的intent
loadImage . addCategory ( Intent . CATEGORY_OPENABLE ) ;
loadImage . setType ( "image/*" ) ;
startActivityForResult ( loadImage , PHOTO_REQUEST ) ;
}
} ) ;
}
public String operateText ( String str ) {
String dest = "" ;
Pattern p = Pattern . compile ( "\\s*|t|r|n" ) ;
Matcher m = p . matcher ( str ) ;
dest = m . replaceAll ( "" ) ;
return dest ;
}
public String cutOfimage ( String str ) {
String dest = str ;
int index1 = dest . indexOf ( "[local]" ) ;
int index2 = dest . indexOf ( "[/local]" ) ;
while ( index1 ! = - 1 & & index2 ! = - 1 ) {
dest = dest . substring ( 0 , index1 ) + dest . substring ( index2 + 8 ) ;
index1 = dest . indexOf ( "[local]" ) ;
index2 = dest . indexOf ( "[/local]" ) ;
}
return dest ;
}
private String Textchange ( String oriText ) {
StringBuffer stringBuffer = new StringBuffer ( oriText ) ;
int Flag1 = - 1 ;
int Flag2 = - 1 ;
do { //不计入表示图片的字符
Flag1 = stringBuffer . indexOf ( "<img" ) ;
Flag2 = stringBuffer . indexOf ( ">" ) ;
if ( Flag1 ! = - 1 & & Flag2 ! = - 1 ) {
stringBuffer = stringBuffer . replace ( Flag1 , Flag2 + 1 , "" ) ;
}
} while ( Flag1 ! = - 1 & & Flag2 ! = - 1 ) ;
do { //不计入换行字符
Flag1 = stringBuffer . indexOf ( "\n" ) ;
if ( Flag1 ! = - 1 ) {
stringBuffer = stringBuffer . replace ( Flag1 , Flag1 + 1 , "" ) ;
}
} while ( Flag1 ! = - 1 ) ;
do { //不计入空格字符
Flag1 = stringBuffer . indexOf ( " " ) ;
if ( Flag1 ! = - 1 ) {
stringBuffer = stringBuffer . replace ( Flag1 , Flag1 + 1 , "" ) ;
}
} while ( Flag1 ! = - 1 ) ;
return stringBuffer . toString ( ) ;
}
@Override
public void onRequestPermissionsResult ( int requestCode , @NonNull String [ ] permissions , @NonNull int [ ] grantResults ) {
super . onRequestPermissionsResult ( requestCode , permissions , grantResults ) ;
switch ( requestCode ) {
case GET_STORAGE_PERMISSION :
if ( grantResults . length > 0 & & grantResults [ 0 ] = = PackageManager . PERMISSION_GRANTED ) {
Intent loadImage = new Intent ( Intent . ACTION_GET_CONTENT ) ;
//Category属性用于指定当前动作( Action) 被执行的环境.
//CATEGORY_OPENABLE; 用来指示一个ACTION_GET_CONTENT的intent
loadImage . addCategory ( Intent . CATEGORY_OPENABLE ) ;
loadImage . setType ( "image/*" ) ;
startActivityForResult ( loadImage , PHOTO_REQUEST ) ;
} else {
Toast . makeText ( this , "You denied the permission" , Toast . LENGTH_SHORT ) . show ( ) ;
}
break ;
}
}
@Override
protected void onRestoreInstanceState ( Bundle savedInstanceState ) {
@ -438,7 +245,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
getWindow ( ) . setSoftInputMode (
WindowManager . LayoutParams . SOFT_INPUT_STATE_HIDDEN
| WindowManager . LayoutParams . SOFT_INPUT_ADJUST_RESIZE ) ;
} else if ( TextUtils . equals ( Intent . ACTION_INSERT_OR_EDIT , intent . getAction ( ) ) ) {
} else if ( TextUtils . equals ( Intent . ACTION_INSERT_OR_EDIT , intent . getAction ( ) ) ) {
// New note
long folderId = intent . getLongExtra ( Notes . INTENT_EXTRA_FOLDER_ID , 0 ) ;
int widgetId = intent . getIntExtra ( Notes . INTENT_EXTRA_WIDGET_ID ,
@ -483,10 +290,6 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return false ;
}
mWorkingNote . setOnSettingStatusChangedListener ( this ) ;
Locked = mWorkingNote . hasPassword ( ) ; //设置便签解锁状态;
if ( intent . hasExtra ( "lock" ) ) {
Locked = false ;
}
return true ;
}
@ -514,21 +317,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mWorkingNote . getModifiedDate ( ) , DateUtils . FORMAT_SHOW_DATE
| DateUtils . FORMAT_NUMERIC_DATE | DateUtils . FORMAT_SHOW_TIME
| DateUtils . FORMAT_SHOW_YEAR ) ) ;
showAlertHeader ( ) ;
//将有图片路径的位置转换为图片
convertToImage ( ) ;
unlockNote ( ) ;
}
private void unlockNote ( ) {
//如果设置了密码,启动输入密码页面
if ( mWorkingNote . hasPassword ( ) & & Locked ) {
saveNote ( ) ;
Intent intent = new Intent ( this , UnlockActivity . class ) ;
intent . putExtra ( Intent . EXTRA_UID , mWorkingNote . getNoteId ( ) ) ;
startActivityForResult ( intent , REQUEST_SET_PASSCODE ) ;
finish ( ) ;
}
}
private void showAlertHeader ( ) {
@ -545,8 +337,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
} else {
mNoteHeaderHolder . tvAlertDate . setVisibility ( View . GONE ) ;
mNoteHeaderHolder . ivAlertIcon . setVisibility ( View . GONE ) ;
}
;
} ;
}
//路径字符串格式 转换为 图片image格式
@ -556,23 +347,23 @@ public class NoteEditActivity extends Activity implements OnClickListener,
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_fragment = noteText . substring ( i , j + 1 ) ; //img_fragment: 关于图片路径的片段
if ( img_fragment . length ( ) > 15 & & img_fragment . endsWith ( "[/local]" ) & & img_fragment . startsWith ( "[local]" ) ) {
for ( int i = 0 ; i < length ; i + + ) {
for ( int j = i ; j < length ; j + + ) {
String img_fragment = noteText . substring ( i , j + 1 ) ; //img_fragment: 关于图片路径的片段
if ( img_fragment . length ( ) > 15 & & img_fragment . endsWith ( "[/local]" ) & & img_fragment . startsWith ( "[local]" ) ) {
int limit = 7 ; //[local]为7个字符
//[local][/local]共15个字符, 剩下的为真正的path长度
int len = img_fragment . length ( ) - 15 ;
int len = img_fragment . length ( ) - 15 ;
//从[local]之后的len个字符就是path
String path = img_fragment . substring ( limit , limit + len ) ; //获取到了图片路径
String path = img_fragment . substring ( limit , limit + len ) ; //获取到了图片路径
Bitmap bitmap = null ;
Log . d ( TAG , "图片的路径是:" + path ) ;
Log . d ( TAG , "图片的路径是:" + path ) ;
try {
bitmap = BitmapFactory . decodeFile ( path ) ; //将图片路径解码为图片格式
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
if ( bitmap ! = null ) { //若图片存在
if ( bitmap ! = null ) { //若图片存在
Log . d ( TAG , "图片不为null" ) ;
ImageSpan imageSpan = new ImageSpan ( NoteEditActivity . this , bitmap ) ;
//4.创建一个SpannableString对象, 以便插入用ImageSpan对象封装的图像
@ -582,7 +373,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
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 . delete ( i , i + len + 15 ) ; //6.删掉图片路径的文字
edit_text . insert ( i , spannableString ) ; //7.在路径的起始位置插入图片
}
}
@ -628,7 +419,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
private boolean inRangeOfView ( View view , MotionEvent ev ) {
int [ ] location = new int [ 2 ] ;
int [ ] location = new int [ 2 ] ;
view . getLocationOnScreen ( location ) ;
int x = location [ 0 ] ;
int y = location [ 1 ] ;
@ -648,7 +439,6 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mNoteHeaderHolder = new HeadViewHolder ( ) ;
mNoteHeaderHolder . tvModified = ( TextView ) findViewById ( R . id . tv_modified_date ) ;
mNoteHeaderHolder . ivAlertIcon = ( ImageView ) findViewById ( R . id . iv_alert_icon ) ;
mNoteHeaderHolder . text_nums = ( TextView ) findViewById ( R . id . text_nums ) ;
mNoteHeaderHolder . tvAlertDate = ( TextView ) findViewById ( R . id . tv_alert_date ) ;
mNoteHeaderHolder . ibSetBgColor = ( ImageView ) findViewById ( R . id . btn_set_bg_color ) ;
mNoteHeaderHolder . ibSetBgColor . setOnClickListener ( this ) ;
@ -664,8 +454,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
for ( int id : sFontSizeBtnsMap . keySet ( ) ) {
View view = findViewById ( id ) ;
view . setOnClickListener ( this ) ;
}
;
} ;
mSharedPrefs = PreferenceManager . getDefaultSharedPreferences ( this ) ;
mFontSizeId = mSharedPrefs . getInt ( PREFERENCE_FONT_SIZE , ResourceParser . BG_DEFAULT_FONT_SIZE ) ;
/ * *
@ -673,7 +462,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
* The id may larger than the length of resources , in this case ,
* return the { @link ResourceParser # BG_DEFAULT_FONT_SIZE }
* /
if ( mFontSizeId > = TextAppearanceResources . getResourcesSize ( ) ) {
if ( mFontSizeId > = TextAppearanceResources . getResourcesSize ( ) ) {
mFontSizeId = ResourceParser . BG_DEFAULT_FONT_SIZE ;
}
mEditTextList = ( LinearLayout ) findViewById ( R . id . note_edit_list ) ;
@ -684,7 +473,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
@Override
protected void onPause ( ) {
super . onPause ( ) ;
if ( saveNote ( ) ) {
if ( saveNote ( ) ) {
Log . d ( TAG , "Note data was saved with length:" + mWorkingNote . getContent ( ) . length ( ) ) ;
}
clearSettingState ( ) ;
@ -701,7 +490,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return ;
}
intent . putExtra ( AppWidgetManager . EXTRA_APPWIDGET_IDS , new int [ ] {
intent . putExtra ( AppWidgetManager . EXTRA_APPWIDGET_IDS , new int [ ] {
mWorkingNote . getWidgetId ( )
} ) ;
@ -738,7 +527,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
@Override
public void onBackPressed ( ) {
if ( clearSettingState ( ) ) {
if ( clearSettingState ( ) ) {
return ;
}
@ -786,38 +575,9 @@ public class NoteEditActivity extends Activity implements OnClickListener,
} else {
menu . findItem ( R . id . menu_delete_remind ) . setVisible ( false ) ;
}
//如果一设置密码,显示删除密码选项,否则,显示设置密码选项
if ( mWorkingNote . hasPassword ( ) ) {
menu . findItem ( R . id . menu_set_passcode ) . setVisible ( false ) ;
} else {
menu . findItem ( R . id . menu_delete_passcode ) . setVisible ( false ) ;
}
return true ;
}
/ * *
* 弹 出 设 置 密 码 界 面
* /
private void setPassword ( ) {
//确保笔记已写入数据库
saveNote ( ) ;
//初始化一个新的意图,用以跳转至设置密码界面
Intent intent = new Intent ( this , SetLockActivity . class ) ;
//给意图传入当前便签的id参数, 便于从设置密码活动中跳转回编辑便签活动
intent . putExtra ( Intent . EXTRA_UID , mWorkingNote . getNoteId ( ) ) ;
startActivity ( intent ) ;
finish ( ) ;
}
/ * *
* 删 除 便 签 密 码
* /
private void deletePassword ( ) {
mWorkingNote . setPassword ( "" ) ;
saveNote ( ) ;
Toast . makeText ( NoteEditActivity . this , R . string . note_passcode_deleted , Toast . LENGTH_SHORT ) . show ( ) ;
}
@Override
public boolean onOptionsItemSelected ( MenuItem item ) {
switch ( item . getItemId ( ) ) {
@ -861,19 +621,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
case R . id . menu_delete_remind :
mWorkingNote . setAlertDate ( 0 , false ) ;
break ;
case R . id . menu_font_select :
showSingleAlertDiglog ( ) ;
break ;
case R . id . menu_set_passcode :
setPassword ( ) ;
//设置提示
Toast . makeText ( NoteEditActivity . this , "设置密码成功" , Toast . LENGTH_SHORT ) . show ( ) ;
break ;
case R . id . menu_delete_passcode :
deletePassword ( ) ;
//设置提示
Toast . makeText ( NoteEditActivity . this , "解除密码成功" , Toast . LENGTH_SHORT ) . show ( ) ;
break ;
default :
break ;
}
@ -884,7 +632,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
DateTimePickerDialog d = new DateTimePickerDialog ( this , System . currentTimeMillis ( ) ) ;
d . setOnDateTimeSetListener ( new OnDateTimeSetListener ( ) {
public void OnDateTimeSet ( AlertDialog dialog , long date ) {
mWorkingNote . setAlertDate ( date , true ) ;
mWorkingNote . setAlertDate ( date , true ) ;
}
} ) ;
d . show ( ) ;
@ -949,7 +697,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
PendingIntent pendingIntent = PendingIntent . getBroadcast ( this , 0 , intent , 0 ) ;
AlarmManager alarmManager = ( ( AlarmManager ) getSystemService ( ALARM_SERVICE ) ) ;
showAlertHeader ( ) ;
if ( ! set ) {
if ( ! set ) {
alarmManager . cancel ( pendingIntent ) ;
} else {
alarmManager . set ( AlarmManager . RTC_WAKEUP , date , pendingIntent ) ;
@ -982,7 +730,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mEditTextList . removeViewAt ( index ) ;
NoteEditText edit = null ;
if ( index = = 0 ) {
if ( index = = 0 ) {
edit = ( NoteEditText ) mEditTextList . getChildAt ( 0 ) . findViewById (
R . id . et_edit_text ) ;
} else {
@ -999,7 +747,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
/ * *
* Should not happen , check for debug
* /
if ( index > mEditTextList . getChildCount ( ) ) {
if ( index > mEditTextList . getChildCount ( ) ) {
Log . e ( TAG , "Index out of mEditTextList boundrary, should not happen" ) ;
}
@ -1019,7 +767,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
String [ ] items = text . split ( "\n" ) ;
int index = 0 ;
for ( String item : items ) {
if ( ! TextUtils . isEmpty ( item ) ) {
if ( ! TextUtils . isEmpty ( item ) ) {
mEditTextList . addView ( getListItem ( item , index ) ) ;
index + + ;
}
@ -1084,7 +832,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
Log . e ( TAG , "Wrong index, should not happen" ) ;
return ;
}
if ( hasText ) {
if ( hasText ) {
mEditTextList . getChildAt ( index ) . findViewById ( R . id . cb_edit_item ) . setVisibility ( View . VISIBLE ) ;
} else {
mEditTextList . getChildAt ( index ) . findViewById ( R . id . cb_edit_item ) . setVisibility ( View . GONE ) ;
@ -1210,13 +958,13 @@ public class NoteEditActivity extends Activity implements OnClickListener,
e . printStackTrace ( ) ;
}
if ( bitmap ! = null ) {
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 ) ;
String path = getPath ( this , originalUri ) ;
//4.使用[local][/local]将path括起来, 用于之后方便识别图片路径在note中的位置
String img_fragment = "[local]" + path + "[/local]" ;
String img_fragment = "[local]" + path + "[/local]" ;
//创建一个SpannableString对象, 以便插入用ImageSpan对象封装的图像
SpannableString spannableString = new SpannableString ( img_fragment ) ;
spannableString . setSpan ( imageSpan , 0 , img_fragment . length ( ) , Spannable . SPAN_EXCLUSIVE_EXCLUSIVE ) ;
@ -1232,13 +980,13 @@ public class NoteEditActivity extends Activity implements OnClickListener,
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 . 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 } ) ;
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 {
} else {
Toast . makeText ( NoteEditActivity . this , "获取图片失败" , Toast . LENGTH_SHORT ) . show ( ) ;
}
break ;
@ -1262,7 +1010,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
final String type = split [ 0 ] ;
if ( "primary" . equalsIgnoreCase ( type ) ) {
return Environment . getExternalStorageDirectory ( ) + "/" + split [ 1 ] ;
return Environment . getExternalStorageDirectory ( ) + "/" + split [ 1 ] ;
}
}
// DownloadsProvider
@ -1272,7 +1020,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
return getDataColumn ( context , contentUri , null , null ) ;
}
// MediaProvider
else if ( isMediaDocument ( uri ) ) {
else
if ( isMediaDocument ( uri ) ) {
final String docId = DocumentsContract . getDocumentId ( uri ) ;
final String [ ] split = docId . split ( ":" ) ;
final String type = split [ 0 ] ;
@ -1335,93 +1084,4 @@ public class NoteEditActivity extends Activity implements OnClickListener,
public boolean isMediaDocument ( Uri uri ) {
return "com.android.providers.media.documents" . equals ( uri . getAuthority ( ) ) ;
}
public void showSingleAlertDiglog ( ) {
final String [ ] items = { "仿宋" , "黑体" , "楷体" , "宋体" , "新宋体" } ;
AlertDialog . Builder alertBuilder = new AlertDialog . Builder ( this ) ;
alertBuilder . setTitle ( "字体选择" ) ;
alertBuilder . setSingleChoiceItems ( items , 0 , ( dialogInterface , i ) - > {
switch ( i ) {
case 0 :
Typeface typeface0 = Typeface . createFromAsset ( getAssets ( ) , "Fonts/simfang.ttf" ) ;
mNoteEditor . setTypeface ( typeface0 ) ;
break ;
case 1 :
Typeface typeface1 = Typeface . createFromAsset ( getAssets ( ) , "Fonts/simhei.ttf" ) ;
mNoteEditor . setTypeface ( typeface1 ) ;
break ;
case 2 :
Typeface typeface2 = Typeface . createFromAsset ( getAssets ( ) , "Fonts/simkai.ttf" ) ;
mNoteEditor . setTypeface ( typeface2 ) ;
break ;
case 3 :
Typeface typeface3 = Typeface . createFromAsset ( getAssets ( ) , "Fonts/simsunb.ttf" ) ;
mNoteEditor . setTypeface ( typeface3 ) ;
break ;
case 4 :
Typeface typeface4 = Typeface . createFromAsset ( getAssets ( ) , "Fonts/simsun.ttc" ) ;
mNoteEditor . setTypeface ( typeface4 ) ;
break ;
}
Toast . makeText ( NoteEditActivity . this , items [ i ] , Toast . LENGTH_SHORT ) . show ( ) ;
} ) ;
alertBuilder . setPositiveButton ( "确定" , ( dialogInterface , i ) - > {
alertDialog2 . dismiss ( ) ;
} ) ;
alertBuilder . setNegativeButton ( "取消" , ( dialogInterface , i ) - > {
alertDialog2 . dismiss ( ) ;
} ) ;
alertDialog2 = alertBuilder . create ( ) ;
alertDialog2 . show ( ) ;
}
private void start ( ) {
Toast . makeText ( NoteEditActivity . this , "请开始说话" , Toast . LENGTH_SHORT ) . show ( ) ;
Map < String , Object > params = new LinkedHashMap < > ( ) ; //传递Map<String,Object>的参数, 会将Map自动序列化为json
String event = null ;
event = SpeechConstant . ASR_START ;
params . put ( SpeechConstant . ACCEPT_AUDIO_VOLUME , false ) ; //回调当前音量
String json = null ;
json = new JSONObject ( params ) . toString ( ) ; //demo用json数据来做数据交换的方式
asr . send ( event , json , null , 0 , 0 ) ; // 初始化EventManager对象,这个实例只能创建一次, 就是我们上方创建的asr, 此处开始传入
}
private void stop ( ) {
//txtResult.append("停止识别: ASR_STOP");
asr . send ( SpeechConstant . ASR_STOP , null , null , 0 , 0 ) ; //此处停止
}
@Override
protected void onDestroy ( ) {
super . onDestroy ( ) ;
asr . send ( SpeechConstant . ASR_CANCEL , "{}" , null , 0 , 0 ) ;
asr . unregisterListener ( this ) ; //退出事件管理器
// 必须与registerListener成对出现, 否则可能造成内存泄露
}
public void onEvent ( String name , String params , byte [ ] data , int offset , int length ) {
String resultTxt = null ;
//Log.i(TAG, params);
if ( name . equals ( SpeechConstant . CALLBACK_EVENT_ASR_PARTIAL ) ) { //识别结果参数
if ( params . contains ( "\"final_result\"" ) ) { //语义结果值
try {
JSONObject json = new JSONObject ( params ) ;
String result = json . getString ( "best_result" ) ; //取得key的识别结果
resultTxt = result ;
} catch ( JSONException e ) {
e . printStackTrace ( ) ;
}
}
}
if ( resultTxt ! = null ) {
resultTxt + = "\n" ;
txtResult . append ( resultTxt ) ;
}
}
private void initView ( ) {
txtResult = findViewById ( R . id . note_edit_view ) ;
startBtn = findViewById ( R . id . listen ) ;
//stopBtn = findViewById(R.id.stop);
}
}