更新了所有的顺序图,并完善了文档

main
XinqiQin 1 month ago
parent 462c66ed8f
commit 76108dd0a0

@ -414,7 +414,398 @@ deactivate user
@enduml
6.插入图片顺序图
@startuml
title Minote Insert Image Sequence
skinparam sequenceParticipant underline
hide footbox
actor User
participant NoteEditActivity<<boundary>>
participant ImagePicker<<control>>
participant ContentResolver<<Entity>>
participant NoteEditor<<Entity>>
User -> NoteEditActivity: clickImageButton
activate NoteEditActivity
activate User
NoteEditActivity -> ImagePicker: startActivityForResult(loadImage, PHOTO_REQUEST)
activate ImagePicker
ImagePicker --> User: displayImageSelector
User -> ImagePicker: selectImage
ImagePicker --> NoteEditActivity: returnImageUri
deactivate ImagePicker
NoteEditActivity -> ContentResolver: requestStoragePermission()
activate ContentResolver
ContentResolver --> NoteEditActivity: grantPermission
deactivate ContentResolver
NoteEditActivity -> ContentResolver: getImagePath()
activate ContentResolver
ContentResolver --> NoteEditActivity: returnImagePath
deactivate ContentResolver
NoteEditActivity -> NoteEditor: insertImageToEditor
activate NoteEditor
NoteEditor -> NoteEditor: convertToImage()
NoteEditor --> NoteEditActivity: completeInsertion
deactivate NoteEditor
NoteEditActivity --> User: displayInsertedImage
deactivate NoteEditActivity
@enduml
6.字符数统计
@startuml
title Minote Character Count Sequence
skinparam sequenceParticipant underline
hide footbox
actor User
participant NoteEditActivity<<Boundary>>
participant NoteEditor<<Control>>
participant WorkingNote<<Entity>>
User -> NoteEditActivity: editText()
activate User
activate NoteEditActivity
NoteEditActivity -> NoteEditor: addTextChangedListener(textWatcher)
activate NoteEditor
NoteEditor -> NoteEditor: beforeTextChanged(text:CharSequence, start:int, count:int, after:int)
NoteEditor -> NoteEditor: onTextChanged(text:CharSequence, start:int, before:int, count:int)
NoteEditor -> NoteEditor: afterTextChanged(editable:Editable)
NoteEditor -> WorkingNote: getWorkingText()
activate WorkingNote
WorkingNote -> WorkingNote: getText():String
WorkingNote --> NoteEditor: returnText
deactivate WorkingNote
NoteEditor --> NoteEditActivity: textChangeComplete
deactivate NoteEditor
NoteEditActivity --> User: showCharacterCount
deactivate NoteEditActivity
@enduml
7.富文本
@startuml
title Minote Rich Text Formatting Sequence
skinparam sequenceParticipant underline
hide footbox
actor User
participant NoteEditText<<Control>>
participant PopupWindow<<Entity>>
participant SpannableString<<Entity>>
participant StyleSpan<<Entity>>
User -> NoteEditText: selectText(start:int, end:int)
activate NoteEditText
activate User
NoteEditText -> NoteEditText: showFormatToolbar()
activate PopupWindow
NoteEditText -> PopupWindow: initFormatToolbar(context:Context, layout:int)
PopupWindow --> NoteEditText: toolbarCreated
deactivate PopupWindow
User -> NoteEditText: clickStyleButton(styleType:int)
NoteEditText -> NoteEditText: applyStyle(style:int)
NoteEditText -> NoteEditText: getSelectionStart
NoteEditText -> NoteEditText: getSelectionEnd
NoteEditText -> NoteEditText: getText(Spannable)
alt style == STYLE_BOLD
NoteEditText -> StyleSpan: new StyleSpan(Typeface.BOLD)
activate StyleSpan
NoteEditText -> SpannableString: setSpan(span:StyleSpan, start:int, end:int, flags:int)
activate SpannableString
SpannableString --> NoteEditText: spanApplied
deactivate SpannableString
deactivate StyleSpan
else style == STYLE_HIGHLIGHT
NoteEditText -> SpannableString: new BackgroundColorSpan(Color.YELLOW)
activate SpannableString
NoteEditText -> SpannableString: setSpan(span:BackgroundColorSpan, start:int, end:int, flags:int)
SpannableString --> NoteEditText: spanApplied
deactivate SpannableString
else style == STYLE_ITALIC
NoteEditText -> StyleSpan: new StyleSpan(Typeface.ITALIC)
activate StyleSpan
NoteEditText -> SpannableString: setSpan(span:StyleSpan, start:int, end:int, flags:int)
activate SpannableString
SpannableString --> NoteEditText: spanApplied
deactivate SpannableString
deactivate StyleSpan
end
NoteEditText -> NoteEditText: invalidate()
NoteEditText --> User: displayFormattedText
deactivate NoteEditText
@enduml
8.朗读
@startuml
title Minote TTS (Text-to-Speech) Sequence
skinparam sequenceParticipant underline
hide footbox
actor User
participant NoteEditActivity<<Boundary>>
participant SpeechSynthesizer<<Entity>>
participant TtsListener<<Entity>>
participant NoteEditor<<Entity>>
User -> NoteEditActivity: startTtsButton
activate User
activate NoteEditActivity
NoteEditActivity -> SpeechSynthesizer: createSynthesizer(context:Context, initListener:InitListener)
activate SpeechSynthesizer
SpeechSynthesizer --> NoteEditActivity: returnTtsInstance
deactivate SpeechSynthesizer
User -> NoteEditActivity: clickTtsButton()
NoteEditActivity -> NoteEditor: getText():String
activate NoteEditor
NoteEditor --> NoteEditActivity: returnText
deactivate NoteEditor
NoteEditActivity -> SpeechSynthesizer: setParameter(VOICE_NAME, "xiaoyan")
activate SpeechSynthesizer
NoteEditActivity -> SpeechSynthesizer: setParameter(SPEED, "50")
NoteEditActivity -> SpeechSynthesizer: setParameter(VOLUME, "80")
NoteEditActivity -> SpeechSynthesizer: setParameter(ENGINE_TYPE, TYPE_CLOUD)
NoteEditActivity -> SpeechSynthesizer: startSpeaking(text:String, listener:TtsListener)
SpeechSynthesizer -> TtsListener: onSpeakBegin()
activate TtsListener
alt success
SpeechSynthesizer -> TtsListener: onSpeakProgress(percent:int, beginPos:int, endPos:int)
TtsListener --> User: playingAudio
SpeechSynthesizer -> TtsListener: onCompleted(error:SpeechError)
else error
SpeechSynthesizer -> NoteEditActivity: returnErrorCode
NoteEditActivity --> User: showTip("语音合成失败")
end
TtsListener --> SpeechSynthesizer: speakingComplete
deactivate TtsListener
SpeechSynthesizer --> NoteEditActivity: synthesisComplete
deactivate SpeechSynthesizer
User -> NoteEditActivity: clickStopButton()
NoteEditActivity -> SpeechSynthesizer: stopSpeaking()
activate SpeechSynthesizer
SpeechSynthesizer --> NoteEditActivity: stoppedSpeaking
deactivate SpeechSynthesizer
NoteEditActivity --> User: ttsComplete
deactivate NoteEditActivity
deactivate User
@enduml
9.私密模式
@startuml
title Minote Private Mode Content Masking Sequence
skinparam sequenceParticipant underline
hide footbox
actor User
participant "NotesListActivity" as NotesListActivity <<boundary>>
participant "NotesListAdapter" as NotesListAdapter <<control>>
participant "NoteItemData" as NoteItemData <<entity>>
participant "WorkingNote" as WorkingNote <<entity>>
User -> NotesListActivity: togglePrivateMode()
activate User
activate NotesListActivity
NotesListActivity -> NotesListAdapter: setPrivateMode(isPrivate:boolean)
activate NotesListAdapter
loop for each note item
NotesListAdapter -> NoteItemData: getSnippet(String)
activate NoteItemData
NoteItemData -> WorkingNote: getContent()
activate WorkingNote
WorkingNote --> NoteItemData: originalContent
deactivate WorkingNote
alt isPrivate == true
NoteItemData -> NoteItemData: generateMaskedContent()
NoteItemData --> NotesListAdapter: coverwith"123456789"
else isPrivate == false
NoteItemData --> NotesListAdapter: originalContent
end
deactivate NoteItemData
end
NotesListAdapter -> NotesListAdapter: notifyDataSetChanged()
NotesListAdapter --> NotesListActivity: displayUpdated
deactivate NotesListAdapter
NotesListActivity --> User: showUpdatedList
deactivate NotesListActivity
deactivate User
@enduml
10search
@startuml
title Minote Text Search Sequence
skinparam sequenceParticipant underline
hide footbox
actor User
participant "NoteEditText" as NoteEditText <<boundary>>
participant "SearchToolbar" as SearchToolbar <<boundary>>
participant "InputMethodManager" as InputMethodManager <<control>>
participant "EditText" as EditText <<boundary>>
participant "Editable" as Editable <<entity>>
participant "Layout" as Layout <<entity>>
User -> NoteEditText: clickSearchButton
activate User
activate NoteEditText
NoteEditText -> SearchToolbar: showSearchToolbar
activate SearchToolbar
SearchToolbar -> SearchToolbar: initializeViews
SearchToolbar -> EditText: requestFocus
activate EditText
SearchToolbar -> InputMethodManager: showSoftInput(searchEditText, SHOW_IMPLICIT)
activate InputMethodManager
InputMethodManager --> EditText: showKeyboard
deactivate InputMethodManager
User -> EditText: inputSearchText(text:String)
EditText -> SearchToolbar: onConfirmClick(text:String)
deactivate EditText
SearchToolbar -> NoteEditText: performSearch(searchText:String)
deactivate SearchToolbar
NoteEditText -> NoteEditText: clearSearchHighlights
NoteEditText -> Editable: getText
activate Editable
Editable --> NoteEditText: content
deactivate Editable
loop for each match
NoteEditText -> NoteEditText: findNextMatch(content:String, searchText:String)
NoteEditText -> Editable: setSpan(BackgroundColorSpan, start:int, end:int, flags:int)
activate Editable
Editable --> NoteEditText: highlightApplied
deactivate Editable
end
NoteEditText -> Layout: getLineForOffset(index:int)
activate Layout
Layout --> NoteEditText: lineNumber
NoteEditText -> Layout: getLineTop(line:int)
Layout --> NoteEditText: yPosition
deactivate Layout
NoteEditText -> NoteEditText: scrollTo(0, yPosition)
NoteEditText --> User: displaySearchResults
User -> SearchToolbar: clickCancelButton
activate SearchToolbar
SearchToolbar -> NoteEditText: clearSearchHighlights
SearchToolbar -> SearchToolbar: hideSearchToolbar
SearchToolbar -> InputMethodManager: hideSoftInputFromWindow
deactivate SearchToolbar
NoteEditText --> User: restoreOriginalText
deactivate NoteEditText
deactivate User
@enduml
11.模板便签
@startuml
title Minote Template Note Sequence
skinparam sequenceParticipant underline
hide footbox
actor User
participant "NotesListActivity" as NotesListActivity <<boundary>>
participant "AlertDialog" as AlertDialog <<boundary>>
participant "NoteEditActivity" as NoteEditActivity <<boundary>>
participant "WorkingNote" as WorkingNote <<entity>>
participant "NotesProvider" as NotesProvider <<control>>
participant "ContentValues" as ContentValues <<entity>>
activate User
User -> NotesListActivity: clickNewNote()
activate NotesListActivity
NotesListActivity -> AlertDialog: showTemplateDialog()
activate AlertDialog
AlertDialog -> AlertDialog: setTitle("选择创建的便签")
AlertDialog -> AlertDialog: setItems(templateItems[])
User -> AlertDialog: selectTemplate(index:int)
AlertDialog --> NotesListActivity: createNewNote(templateType:int)
deactivate AlertDialog
NotesListActivity -> WorkingNote: createNote(context:Context, folderId:long)
activate WorkingNote
WorkingNote -> ContentValues: new ContentValues()
activate ContentValues
ContentValues --> WorkingNote: returnValues
deactivate ContentValues
alt templateType == TEMPLATE_TYPE_1
WorkingNote -> WorkingNote: setNoteValue("模板1预设内容")
else templateType == TEMPLATE_TYPE_2
WorkingNote -> WorkingNote: setNoteValue("模板2预设内容")
else templateType == TEMPLATE_TYPE_3
WorkingNote -> WorkingNote: setNoteValue("模板3预设内容")
end
WorkingNote -> NotesProvider: insert(uri:Uri, values:ContentValues)
activate NotesProvider
NotesProvider --> WorkingNote: noteId:long
deactivate NotesProvider
WorkingNote --> NotesListActivity: newNote
deactivate WorkingNote
NotesListActivity -> NoteEditActivity: startActivity(intent:Intent)
activate NoteEditActivity
NoteEditActivity -> NoteEditActivity: loadNoteData(noteId:long)
NoteEditActivity --> User: displayTemplateNote
deactivate NoteEditActivity
NotesListActivity -> NotesListActivity: showToast(templateName:String)
NotesListActivity --> User: templateCreated
deactivate NotesListActivity
deactivate User
@enduml
分界线以下是弃用的UML顺序图

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

@ -76,85 +76,92 @@
\@writefile{lof}{\contentsline {figure}{\numberline {21}{\ignorespaces 维护前后xml文件数量对比——饼状图}}{33}{figure.caption.40}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {22}{\ignorespaces 维护前后代码数量对比——柱状图}}{34}{figure.caption.41}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {23}{\ignorespaces 维护前后代码数量对比——饼状图}}{34}{figure.caption.42}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2}维护后的质量分析}{35}{subsubsection.3.3.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {24}{\ignorespaces 代码审查结果}}{35}{figure.caption.43}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {25}{\ignorespaces 代码审查结果}}{36}{figure.caption.44}\protected@file@percent }
\gdef \LT@iv {\LT@entry
{1}{85.35156pt}\LT@entry
{1}{84.95157pt}\LT@entry
{1}{84.95157pt}\LT@entry
{1}{109.13788pt}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2}各功能代码规模}{35}{subsubsection.3.3.2}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {4}{\ignorespaces 代码质量分析详细结果}}{35}{table.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.3}维护后的质量分析}{36}{subsubsection.3.3.3}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {24}{\ignorespaces 代码审查结果}}{36}{figure.caption.43}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {25}{\ignorespaces 代码审查结果}}{37}{figure.caption.44}\protected@file@percent }
\gdef \LT@v {\LT@entry
{1}{85.35156pt}\LT@entry
{1}{60.77263pt}\LT@entry
{1}{326.8pt}}
\@writefile{lot}{\contentsline {table}{\numberline {4}{\ignorespaces 代码质量分析详细结果}}{37}{table.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}维护后的软件原型以及功能展示}{39}{subsection.3.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.1}设置界面背景}{39}{subsubsection.3.4.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {26}{\ignorespaces 设置背景1}}{39}{figure.caption.45}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {27}{\ignorespaces 设置背景按钮}}{39}{figure.caption.45}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {28}{\ignorespaces 设置背景2}}{39}{figure.caption.45}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2}欢迎界面}{40}{subsubsection.3.4.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {29}{\ignorespaces 欢迎界面}}{40}{figure.caption.46}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.3}登录密码}{41}{subsubsection.3.4.3}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {30}{\ignorespaces 新增设置密码的操作}}{41}{figure.caption.47}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {31}{\ignorespaces 新增密码后的登录界面,要求输入密码}}{42}{figure.caption.48}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {32}{\ignorespaces 重新设置密码}}{43}{figure.caption.49}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {33}{\ignorespaces 使用原有的密码登录失败}}{44}{figure.caption.50}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {34}{\ignorespaces 删除设置的密码}}{45}{figure.caption.51}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {35}{\ignorespaces 登录密码的时序图}}{46}{figure.caption.52}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.4}翻译功能}{47}{subsubsection.3.4.4}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {36}{\ignorespaces 翻译功能中的将英文翻译为中文}}{47}{figure.caption.53}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {37}{\ignorespaces 翻译功能中将中文转化为英文}}{48}{figure.caption.54}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {38}{\ignorespaces 翻译功能中的还原操作}}{49}{figure.caption.55}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {39}{\ignorespaces 翻译功能的时序图}}{50}{figure.caption.56}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.5}插入图片}{51}{subsubsection.3.4.5}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {40}{\ignorespaces 将本地相册中的图片导入便签编辑界面中}}{51}{figure.caption.57}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.6}统计字符个数}{52}{subsubsection.3.4.6}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {41}{\ignorespaces 统计字符个数}}{52}{figure.caption.58}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.7}富文本功能}{53}{subsubsection.3.4.7}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {42}{\ignorespaces 富文本功能}}{53}{figure.caption.59}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {43}{\ignorespaces 加粗功能}}{53}{figure.caption.60}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {44}{\ignorespaces 斜体功能}}{53}{figure.caption.61}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {45}{\ignorespaces 删除线功能}}{54}{figure.caption.62}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {46}{\ignorespaces 高亮功能}}{54}{figure.caption.63}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.8}朗读功能}{55}{subsubsection.3.4.8}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {47}{\ignorespaces 朗读功能}}{55}{figure.caption.64}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.9}私密模式}{56}{subsubsection.3.4.9}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {48}{\ignorespaces 私密模式}}{56}{figure.caption.65}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {49}{\ignorespaces 退出私密模式}}{57}{figure.caption.66}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.10}笔记编辑内搜索}{58}{subsubsection.3.4.10}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {50}{\ignorespaces 笔记内搜索}}{58}{figure.caption.67}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {51}{\ignorespaces 笔记内搜索}}{59}{figure.caption.68}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.11}模板便签}{60}{subsubsection.3.4.11}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {52}{\ignorespaces 模板便签(a)}}{60}{figure.caption.69}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {53}{\ignorespaces 模板便签(b)}}{60}{figure.caption.69}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {54}{\ignorespaces 模版1}}{61}{figure.caption.70}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {55}{\ignorespaces 模版2}}{62}{figure.caption.71}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.12}语音听写}{63}{subsubsection.3.4.12}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {56}{\ignorespaces 语音听写(a)}}{63}{figure.caption.72}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {57}{\ignorespaces 语音听写(b)}}{63}{figure.caption.72}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {58}{\ignorespaces 语音听写的时序图}}{64}{figure.caption.73}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.13}语音合成}{65}{subsubsection.3.4.13}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {59}{\ignorespaces 语音合成}}{65}{figure.caption.74}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {60}{\ignorespaces 语音类型}}{66}{figure.caption.75}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {61}{\ignorespaces 音频类型}}{66}{figure.caption.75}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {62}{\ignorespaces 语音合成的时序图}}{67}{figure.caption.76}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.14}对话式大模型}{68}{subsubsection.3.4.14}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {63}{\ignorespaces 对话式大模型}}{68}{figure.caption.77}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {64}{\ignorespaces 对话式大模型的流程图}}{69}{figure.caption.78}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {65}{\ignorespaces 对话式大模型的时序图}}{70}{figure.caption.79}\protected@file@percent }
\gdef \LT@v {\LT@entry
\@writefile{lot}{\contentsline {table}{\numberline {5}{\ignorespaces 代码质量分析详细结果}}{38}{table.5}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}维护后的软件原型以及功能展示}{40}{subsection.3.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.1}设置界面背景}{40}{subsubsection.3.4.1}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {26}{\ignorespaces 设置背景1}}{40}{figure.caption.45}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {27}{\ignorespaces 设置背景按钮}}{40}{figure.caption.45}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {28}{\ignorespaces 设置背景2}}{40}{figure.caption.45}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2}欢迎界面}{41}{subsubsection.3.4.2}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {29}{\ignorespaces 欢迎界面}}{41}{figure.caption.46}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.3}登录密码}{42}{subsubsection.3.4.3}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {30}{\ignorespaces 新增设置密码的操作}}{42}{figure.caption.47}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {31}{\ignorespaces 新增密码后的登录界面,要求输入密码}}{43}{figure.caption.48}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {32}{\ignorespaces 重新设置密码}}{44}{figure.caption.49}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {33}{\ignorespaces 使用原有的密码登录失败}}{45}{figure.caption.50}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {34}{\ignorespaces 删除设置的密码}}{46}{figure.caption.51}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {35}{\ignorespaces 登录密码的时序图}}{47}{figure.caption.52}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.4}翻译功能}{48}{subsubsection.3.4.4}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {36}{\ignorespaces 翻译功能中的将英文翻译为中文}}{48}{figure.caption.53}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {37}{\ignorespaces 翻译功能中将中文转化为英文}}{49}{figure.caption.54}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {38}{\ignorespaces 翻译功能中的还原操作}}{50}{figure.caption.55}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {39}{\ignorespaces 翻译功能的时序图}}{51}{figure.caption.56}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.5}插入图片}{52}{subsubsection.3.4.5}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {40}{\ignorespaces 将本地相册中的图片导入便签编辑界面中}}{52}{figure.caption.57}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.6}统计字符个数}{53}{subsubsection.3.4.6}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {41}{\ignorespaces 统计字符个数}}{53}{figure.caption.58}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.7}富文本功能}{54}{subsubsection.3.4.7}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {42}{\ignorespaces 富文本功能}}{54}{figure.caption.59}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {43}{\ignorespaces 加粗功能}}{54}{figure.caption.60}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {44}{\ignorespaces 斜体功能}}{54}{figure.caption.61}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {45}{\ignorespaces 删除线功能}}{55}{figure.caption.62}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {46}{\ignorespaces 高亮功能}}{55}{figure.caption.63}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.8}朗读功能}{56}{subsubsection.3.4.8}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {47}{\ignorespaces 朗读功能}}{56}{figure.caption.64}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.9}私密模式}{57}{subsubsection.3.4.9}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {48}{\ignorespaces 私密模式}}{57}{figure.caption.65}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {49}{\ignorespaces 退出私密模式}}{58}{figure.caption.66}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.10}笔记编辑内搜索}{59}{subsubsection.3.4.10}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {50}{\ignorespaces 笔记内搜索}}{59}{figure.caption.67}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {51}{\ignorespaces 笔记内搜索}}{60}{figure.caption.68}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.11}模板便签}{61}{subsubsection.3.4.11}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {52}{\ignorespaces 模板便签(a)}}{61}{figure.caption.69}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {53}{\ignorespaces 模板便签(b)}}{61}{figure.caption.69}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {54}{\ignorespaces 模版1}}{62}{figure.caption.70}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {55}{\ignorespaces 模版2}}{63}{figure.caption.71}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.12}语音听写}{64}{subsubsection.3.4.12}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {56}{\ignorespaces 语音听写(a)}}{64}{figure.caption.72}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {57}{\ignorespaces 语音听写(b)}}{64}{figure.caption.72}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {58}{\ignorespaces 语音听写的时序图}}{65}{figure.caption.73}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.13}语音合成}{66}{subsubsection.3.4.13}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {59}{\ignorespaces 语音合成}}{66}{figure.caption.74}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {60}{\ignorespaces 语音类型}}{67}{figure.caption.75}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {61}{\ignorespaces 音频类型}}{67}{figure.caption.75}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {62}{\ignorespaces 语音合成的时序图}}{68}{figure.caption.76}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.14}对话式大模型}{69}{subsubsection.3.4.14}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {63}{\ignorespaces 对话式大模型}}{69}{figure.caption.77}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {64}{\ignorespaces 对话式大模型的流程图}}{70}{figure.caption.78}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {65}{\ignorespaces 对话式大模型的时序图}}{71}{figure.caption.79}\protected@file@percent }
\gdef \LT@vi {\LT@entry
{1}{36.9863pt}\LT@entry
{1}{109.13788pt}\LT@entry
{1}{99.46188pt}}
\@writefile{lot}{\contentsline {table}{\numberline {5}{\ignorespaces \relax }}{71}{table.5}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.15}撤回功能}{72}{subsubsection.3.4.15}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {66}{\ignorespaces 撤回功能}}{72}{figure.caption.80}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.16}获取地理位置}{73}{subsubsection.3.4.16}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {67}{\ignorespaces 获取地理位置}}{73}{figure.caption.81}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {68}{\ignorespaces 清除地理位置}}{73}{figure.caption.81}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {4}实践收获和体会}{74}{section.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}收获}{74}{subsection.4.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}体会}{74}{subsection.4.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}参考文献与网址}{75}{subsection.4.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.1}讯飞智能API介绍}{75}{subsubsection.4.3.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2}百度翻译API介绍}{75}{subsubsection.4.3.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.3}UML建模}{75}{subsubsection.4.3.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.4}CodeArts质量分析}{75}{subsubsection.4.3.4}\protected@file@percent }
\gdef \@abspage@last{75}
\@writefile{lot}{\contentsline {table}{\numberline {6}{\ignorespaces \relax }}{72}{table.6}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.15}撤回功能}{73}{subsubsection.3.4.15}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {66}{\ignorespaces 撤回功能}}{73}{figure.caption.80}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.16}获取地理位置}{74}{subsubsection.3.4.16}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {67}{\ignorespaces 获取地理位置}}{74}{figure.caption.81}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {68}{\ignorespaces 清除地理位置}}{74}{figure.caption.81}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {4}实践收获和体会}{75}{section.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}收获}{75}{subsection.4.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}体会}{75}{subsection.4.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}参考文献与网址}{76}{subsection.4.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.1}讯飞智能API介绍}{76}{subsubsection.4.3.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2}百度翻译API介绍}{76}{subsubsection.4.3.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.3}UML建模}{76}{subsubsection.4.3.3}\protected@file@percent }
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.4}CodeArts质量分析}{76}{subsubsection.4.3.4}\protected@file@percent }
\gdef \@abspage@last{76}

@ -1,9 +1,9 @@
# Fdb version 4
["pdflatex"] 1736778723.92481 "d:/software engineering/xiaomi/xiaomi/doc/代码泛读、标注、维护报告/小米便签泛读、标注和维护报告文档.tex" "小米便签泛读、标注和维护报告文档.pdf" "小米便签泛读、标注和维护报告文档" 1736778737.78584 0
["pdflatex"] 1736843814.91422 "d:/software engineering/xiaomi/xiaomi/xiaomi/doc/代码泛读、标注、维护报告/小米便签泛读、标注和维护报告文档.tex" "小米便签泛读、标注和维护报告文档.pdf" "小米便签泛读、标注和维护报告文档" 1736843825.83444 0
"c:/Windows/Fonts/msyh.ttc" 1733880346 19704352 1e10e74402e59d54499af795caf0b135 ""
"c:/Windows/Fonts/simhei.ttf" 1711630440 9755440 983b60188a8e5a7c29c06c674f428b3d ""
"c:/Windows/Fonts/simsun.ttc" 1733880347 18070492 992f2bdc407dde6953c5ed83ceac9a91 ""
"d:/software engineering/xiaomi/xiaomi/doc/代码泛读、标注、维护报告/小米便签泛读、标注和维护报告文档.tex" 1736778727 76352 7465fbece638828b7152387c00c7c232 ""
"d:/software engineering/xiaomi/xiaomi/xiaomi/doc/代码泛读、标注、维护报告/小米便签泛读、标注和维护报告文档.tex" 1736843824 82584 dae758449fd1570b84d8fd6105996838 ""
"f:/texlive/2024/texmf-dist/fonts/enc/dvips/cm-super/cm-super-ts1.enc" 1735820179 2900 1537cc8184ad1792082cd229ecc269f4 ""
"f:/texlive/2024/texmf-dist/fonts/map/fontname/texfonts.map" 1735821617 3524 cb3e574dea2d1052e39280babc910dc8 ""
"f:/texlive/2024/texmf-dist/fonts/sfd/ttf2pk/UGBK.sfd" 1735864473 182544 bcd31d5d273400b38612a969fcab55f9 ""
@ -75,6 +75,7 @@
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei8f.tfm" 1735865347 1172 e5ac568cbbb10c21a8919c10147ccf70 ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei90.tfm" 1735865347 1172 bf3a9ea28c06174042dcd642737f0ad2 ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei91.tfm" 1735865347 1172 af08f180dd0ec6a7129972d09ff61a98 ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei94.tfm" 1735865347 1172 3342a075989efb631633f68dafc48654 ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei95.tfm" 1735865347 1172 5a7e9ba612e7803abcac167ef6c5a665 ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei96.tfm" 1735865346 1172 baafaa35cbf14b936974ec3a58b5f3e8 ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei97.tfm" 1735865346 1172 909826a1f69146e1bd8f119157e28fcd ""
@ -158,6 +159,7 @@
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong99.tfm" 1735865347 1172 445e3c81b2f1f84601e454216cbde866 ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong9a.tfm" 1735865347 1172 37a3cd36cf03e67f393bee80b1370d05 ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong9e.tfm" 1735865347 1172 e797949130fb017e573d6826989dff50 ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong9f.tfm" 1735865347 1172 9f5913528ac56c45715ab9430a95446c ""
"f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisongff.tfm" 1735865347 1172 156175f4eaa9daea4e21b890ac9fafb8 ""
"f:/texlive/2024/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb" 1735818841 32080 340ef9bf63678554ee606688e7b5339d ""
"f:/texlive/2024/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb" 1735818841 35752 024fb6c41858982481f6968b5fc26508 ""
@ -257,81 +259,85 @@
"f:/texlive/2024/texmf-var/fonts/map/pdftex/updmap/pdftex.map" 1735865434 5513072 3c142b3aa2bb6151fbdf53ce8a9269ac ""
"f:/texlive/2024/texmf-var/web2c/pdftex/pdflatex.fmt" 1735865800 8221527 dde4bcbd8a14ed93bb1ccc7dff478a23 ""
"f:/texlive/2024/texmf.cnf" 1735865389 713 e69b156964470283e0530f5060668171 ""
"picture/1.1.png" 1736726509 100001 6f7d2c00d5d054ba695c8270700e1989 ""
"picture/12.png" 1736218785 359717 34a5050668b51b7c0376b40e435290a5 ""
"picture/13.png" 1736218785 298537 c759c6ea0536af13d4e0582d344a8023 ""
"picture/14.png" 1736218785 338379 00e80518314cb9787aa0c8090f491ab3 ""
"picture/15.png" 1736218785 353100 20995e0b8c379c7af2871ebdb6af1035 ""
"picture/16.png" 1736218785 278909 7f2c25f6b5b2dc812a75612b09adfbbf ""
"picture/17.png" 1736218785 100047 aabb46f1b3fbc1ed034d0e5c7946b9f9 ""
"picture/18.png" 1736218785 113123 354af39d06bfcd863d3263f64da4bf48 ""
"picture/19.png" 1736218785 108072 5aa4f57f5fbdcf17a29b3d33f3578bf1 ""
"picture/2.png" 1736218785 72226 ae35b6edbc55f9cef51841be6e5d69ae ""
"picture/20.png" 1736218785 101173 61394766c552290861a8d665c9ff2c7f ""
"picture/21.png" 1736218785 95200 b4a5a0c74c83deb21355d65015e87bf1 ""
"picture/22.png" 1736218785 337255 2b60da7be806b1b17edcabe32c7b5952 ""
"picture/23.png" 1736218785 130416 aac6613a0320fc9640bc3ce39d723c4b ""
"picture/24.png" 1736218785 105456 ec3d5bfb8ee2a1c09c753443fb53dbb2 ""
"picture/25.png" 1736218785 134114 a7e7d8954fb77cb198d3a66695b221ec ""
"picture/26.png" 1736218785 134852 6f58cedb22cf13cbf693fd4531bb9309 ""
"picture/27.png" 1736218785 135063 a736b025ceba4c4cec4ca50cc852c6f2 ""
"picture/28.png" 1736218785 125615 ce2e5aaf0bcf5c3c3e34060ced136e8b ""
"picture/29.png" 1736218785 102928 c8dfe55924d27079e7cd00a996973ea4 ""
"picture/30.png" 1736218785 148888 15afa99a9d2975e8e80daf48379f1a9f ""
"picture/31.png" 1736218785 18378 95c5f077f665189bdba59e8c142ec14a ""
"picture/32.png" 1736218785 18063 b0c594d2abd1e8ca39958519d328357d ""
"picture/33.png" 1736218785 18546 3cfd1337f3288a2f0199060826dfc9fc ""
"picture/34.png" 1736218785 18439 d5b3c5244a2c3c0ddffaa69f0df741e9 ""
"picture/35.png" 1736218785 17579 4d78bd00353277483189f98712d9e4b7 ""
"picture/36.png" 1736218785 68009 a5842c173acf23b6f97b659634718b6d ""
"picture/37.png" 1736218785 283915 45d99bc11e85e6013d267a22ffc10607 ""
"picture/38.png" 1736218785 337153 b0bba29e3ef6acd6ea921530b94b6e27 ""
"picture/39.png" 1736218785 202762 c54197216340fdf254d8611660aacbc6 ""
"picture/4.png" 1736218785 39580 a23f91f7205a3d7444351d24e4107a91 ""
"picture/40.png" 1736218785 345182 fe0f99d7d5cafda530004723fa3530a8 ""
"picture/41.png" 1736218785 162089 9c3082c7c2d030d74c2a7d9b37184d66 ""
"picture/42.png" 1736218785 166236 d3b6c66b4226d58a98c0a3868759ee82 ""
"picture/46.png" 1736218785 54399 cb9671a4469b22701520d322df2f863c ""
"picture/47.png" 1736218785 16390 91c22e93ca62e82c065c249e0961f45c ""
"picture/48.png" 1736218785 59699 b64a5f2dd105938ffbe25090e832afb0 ""
"picture/7.png" 1736218785 27326 f356481d8ec0d433004bfc710f39a61d ""
"picture/8.png" 1736218785 51137 d7050f61e5db8c949f5559225f2c97d0 ""
"picture/9.png" 1736218785 107915 e3ace6c72f757cea414dfe2d2b637b9c ""
"picture/CodeArts-lastest-1.png" 1736389071 182715 5baf5aa420b4ba410bb99f2ebd1fde1a ""
"picture/CodeArts-master.png" 1736389071 330488 0d8a68423fb09ad6dd559eee401b2c01 ""
"picture/Data bar Chart -java.png" 1736343573 141503 5a33720f0e231500731e2c93b38b0207 ""
"picture/Data bar Chart -xml.png" 1736343573 128685 5c4ac7b145e525b6d0b742a15827f94d ""
"picture/Data pie Chart -java.png" 1736343573 209851 630cfd9010dd9c1d0b03a54a9228dbab ""
"picture/Data pie Chart -xml.png" 1736343573 214977 2cc96f7931facb23356b9edded8a0b97 ""
"picture/Dialogue-based large models.png" 1736343573 178500 4f885e4fcb96f7724a758732a10e3221 ""
"picture/Merge data bar chart.png" 1736343573 120528 950ef5e5720007d091150da992ccc542 ""
"picture/Merge data pie charts.png" 1736343573 184799 ba673fa0d1c77ae0ac7550d7a9322782 ""
"picture/Obtain the geographical location schematic diagram 1.png" 1736343573 97035 19df3cec920de0fab03dd6acddcaabab ""
"picture/Obtain the geographical location schematic diagram 2.png" 1736343573 111512 ac00bda5ec6f8571b45dac1b54f1dc9f ""
"picture/Speech synthesis diagram 1.png" 1736343573 134738 3ecdda3cf1a678992e1e13a26d1627fe ""
"picture/Speech synthesis diagram 2.png" 1736343573 136365 b53e9a84cf8eeb2a0242d3c163b2d909 ""
"picture/Speech synthesis diagram 3.png" 1736343573 107777 36a3f1a5fa826d8893d9dadde11d9aa7 ""
"picture/Structure Package.png" 1736562047 35143 9c39b4cdb8f40083b738c7d1c11101a6 ""
"picture/Template tag 1.png" 1736343573 277781 fd35e861b6e1fecf12886f293ff7880c ""
"picture/Template tag 2.png" 1736343573 117857 d3ef395ee7cd59da9f9d50e57bff4bf9 ""
"picture/Undo function1.png" 1736343573 155642 ce9508ca0dbeffc9b974e1db6fcaa2a3 ""
"picture/java-1.png" 1736510444 415152 453c9ced2e2ed9e83fe2d6def5a1224e ""
"picture/java-2.png" 1736510444 406150 9a95741d69b82489b464c09f1a5e4342 ""
"picture/linsten1.png" 1736343573 127493 917af4d9e9a825fc5d880da416ac4215 ""
"picture/linsten2.png" 1736343573 110317 882eb85892fb092e3b2ede72861658ad ""
"picture/packet.png" 1736562047 179675 b07b7f7c0c89b7149dd9c4f633e72d14 ""
"picture/seq12_Iat.png" 1736386716 107614 f6d35d0debaea4e2c890cfabbe9b6295 ""
"picture/seq13_Tts.png" 1736386575 115127 c6b0c5b6541fedabc431148697abea44 ""
"picture/seq14-LL.png" 1736510444 271500 ef5430b085847fdae02c9e2d2a9e67d0 ""
"picture/seq14-LLM.png" 1736510444 81524 5b80de9b4e3ff92445955625f9fb4951 ""
"picture/seq3_Login.png" 1736388624 145119 af311b15513fdde25d4a0ac67688636e ""
"picture/seq4_Translate.png" 1736387133 62766 173286a4c767290d23bb3717f33cddd8 ""
"picture/xml-1.png" 1736510444 369276 6cc1d9a530cec03be55c53296252d485 ""
"picture/xml-2.png" 1736510444 572565 ba5fa1e4c851a9aea36bd41b76257b55 ""
"小米便签泛读、标注和维护报告文档.aux" 1736778735 17876 4b46415bcb7df2b3e306d48ed64518bf "pdflatex"
"小米便签泛读、标注和维护报告文档.out" 1736778735 4655 886cedc25fdd6659027156306efe92a0 "pdflatex"
"小米便签泛读、标注和维护报告文档.tex" 1736778727 76352 7465fbece638828b7152387c00c7c232 ""
"小米便签泛读、标注和维护报告文档.toc" 1736778735 4792 e23b5b3624a04a8a23fa97906b42b8cb "pdflatex"
"picture/1.1.png" 1736836183 100001 6f7d2c00d5d054ba695c8270700e1989 ""
"picture/111.png" 1736836183 122594 bb8c2de5b3391239d30ed1752a887e78 ""
"picture/112.png" 1736836183 505304 299da676b0adb190c99a07a85e830076 ""
"picture/113.png" 1736836183 202995 d2464340aa5352526764f08d505e846b ""
"picture/114.png" 1736836183 150157 dba5d060dc27662015deaa296b696feb ""
"picture/12.png" 1736836183 359717 34a5050668b51b7c0376b40e435290a5 ""
"picture/13.png" 1736836183 298537 c759c6ea0536af13d4e0582d344a8023 ""
"picture/14.png" 1736836183 338379 00e80518314cb9787aa0c8090f491ab3 ""
"picture/15.png" 1736836183 353100 20995e0b8c379c7af2871ebdb6af1035 ""
"picture/16.png" 1736836183 278909 7f2c25f6b5b2dc812a75612b09adfbbf ""
"picture/17.png" 1736836183 100047 aabb46f1b3fbc1ed034d0e5c7946b9f9 ""
"picture/18.png" 1736836183 113123 354af39d06bfcd863d3263f64da4bf48 ""
"picture/19.png" 1736836183 108072 5aa4f57f5fbdcf17a29b3d33f3578bf1 ""
"picture/2.png" 1736836183 72226 ae35b6edbc55f9cef51841be6e5d69ae ""
"picture/20.png" 1736836183 101173 61394766c552290861a8d665c9ff2c7f ""
"picture/21.png" 1736836183 95200 b4a5a0c74c83deb21355d65015e87bf1 ""
"picture/22.png" 1736836183 337255 2b60da7be806b1b17edcabe32c7b5952 ""
"picture/23.png" 1736836183 130416 aac6613a0320fc9640bc3ce39d723c4b ""
"picture/24.png" 1736836183 105456 ec3d5bfb8ee2a1c09c753443fb53dbb2 ""
"picture/25.png" 1736836183 134114 a7e7d8954fb77cb198d3a66695b221ec ""
"picture/26.png" 1736836183 134852 6f58cedb22cf13cbf693fd4531bb9309 ""
"picture/27.png" 1736836183 135063 a736b025ceba4c4cec4ca50cc852c6f2 ""
"picture/28.png" 1736836183 125615 ce2e5aaf0bcf5c3c3e34060ced136e8b ""
"picture/29.png" 1736836183 102928 c8dfe55924d27079e7cd00a996973ea4 ""
"picture/30.png" 1736836183 148888 15afa99a9d2975e8e80daf48379f1a9f ""
"picture/31.png" 1736836183 18378 95c5f077f665189bdba59e8c142ec14a ""
"picture/32.png" 1736836183 18063 b0c594d2abd1e8ca39958519d328357d ""
"picture/33.png" 1736836183 18546 3cfd1337f3288a2f0199060826dfc9fc ""
"picture/34.png" 1736836183 18439 d5b3c5244a2c3c0ddffaa69f0df741e9 ""
"picture/35.png" 1736836183 17579 4d78bd00353277483189f98712d9e4b7 ""
"picture/36.png" 1736836183 68009 a5842c173acf23b6f97b659634718b6d ""
"picture/37.png" 1736836183 283915 45d99bc11e85e6013d267a22ffc10607 ""
"picture/38.png" 1736836183 337153 b0bba29e3ef6acd6ea921530b94b6e27 ""
"picture/39.png" 1736836183 202762 c54197216340fdf254d8611660aacbc6 ""
"picture/4.png" 1736836183 39580 a23f91f7205a3d7444351d24e4107a91 ""
"picture/40.png" 1736836183 345182 fe0f99d7d5cafda530004723fa3530a8 ""
"picture/41.png" 1736836183 162089 9c3082c7c2d030d74c2a7d9b37184d66 ""
"picture/42.png" 1736836183 166236 d3b6c66b4226d58a98c0a3868759ee82 ""
"picture/46.png" 1736836183 54399 cb9671a4469b22701520d322df2f863c ""
"picture/47.png" 1736836183 16390 91c22e93ca62e82c065c249e0961f45c ""
"picture/48.png" 1736836183 59699 b64a5f2dd105938ffbe25090e832afb0 ""
"picture/7.png" 1736836183 27326 f356481d8ec0d433004bfc710f39a61d ""
"picture/8.png" 1736836183 51137 d7050f61e5db8c949f5559225f2c97d0 ""
"picture/9.png" 1736836183 107915 e3ace6c72f757cea414dfe2d2b637b9c ""
"picture/CodeArts-lastest-1.png" 1736836183 182715 5baf5aa420b4ba410bb99f2ebd1fde1a ""
"picture/CodeArts-master.png" 1736836183 330488 0d8a68423fb09ad6dd559eee401b2c01 ""
"picture/Data bar Chart -java.png" 1736836183 141503 5a33720f0e231500731e2c93b38b0207 ""
"picture/Data bar Chart -xml.png" 1736836183 128685 5c4ac7b145e525b6d0b742a15827f94d ""
"picture/Data pie Chart -java.png" 1736836183 209851 630cfd9010dd9c1d0b03a54a9228dbab ""
"picture/Data pie Chart -xml.png" 1736836183 214977 2cc96f7931facb23356b9edded8a0b97 ""
"picture/Dialogue-based large models.png" 1736836183 178500 4f885e4fcb96f7724a758732a10e3221 ""
"picture/Merge data bar chart.png" 1736836183 120528 950ef5e5720007d091150da992ccc542 ""
"picture/Merge data pie charts.png" 1736836183 184799 ba673fa0d1c77ae0ac7550d7a9322782 ""
"picture/Obtain the geographical location schematic diagram 1.png" 1736836183 97035 19df3cec920de0fab03dd6acddcaabab ""
"picture/Obtain the geographical location schematic diagram 2.png" 1736836183 111512 ac00bda5ec6f8571b45dac1b54f1dc9f ""
"picture/Speech synthesis diagram 1.png" 1736836183 134738 3ecdda3cf1a678992e1e13a26d1627fe ""
"picture/Speech synthesis diagram 2.png" 1736836183 136365 b53e9a84cf8eeb2a0242d3c163b2d909 ""
"picture/Speech synthesis diagram 3.png" 1736836183 107777 36a3f1a5fa826d8893d9dadde11d9aa7 ""
"picture/Structure Package.png" 1736836183 35143 9c39b4cdb8f40083b738c7d1c11101a6 ""
"picture/Template tag 1.png" 1736836183 277781 fd35e861b6e1fecf12886f293ff7880c ""
"picture/Template tag 2.png" 1736836183 117857 d3ef395ee7cd59da9f9d50e57bff4bf9 ""
"picture/Undo function1.png" 1736836183 155642 ce9508ca0dbeffc9b974e1db6fcaa2a3 ""
"picture/java-1.png" 1736836183 415152 453c9ced2e2ed9e83fe2d6def5a1224e ""
"picture/java-2.png" 1736836183 406150 9a95741d69b82489b464c09f1a5e4342 ""
"picture/linsten1.png" 1736836183 127493 917af4d9e9a825fc5d880da416ac4215 ""
"picture/linsten2.png" 1736836183 110317 882eb85892fb092e3b2ede72861658ad ""
"picture/packet.png" 1736836183 179675 b07b7f7c0c89b7149dd9c4f633e72d14 ""
"picture/seq12_Iat.png" 1736836183 107614 f6d35d0debaea4e2c890cfabbe9b6295 ""
"picture/seq13_Tts.png" 1736836183 115127 c6b0c5b6541fedabc431148697abea44 ""
"picture/seq14-LL.png" 1736836183 271500 ef5430b085847fdae02c9e2d2a9e67d0 ""
"picture/seq14_chatLLM.png" 1736836183 87469 c8618935124d9a5d5ff84c21c399bfc5 ""
"picture/seq3_Login.png" 1736836183 145119 af311b15513fdde25d4a0ac67688636e ""
"picture/seq4_Translate.png" 1736836183 62766 173286a4c767290d23bb3717f33cddd8 ""
"picture/xml-1.png" 1736836183 369276 6cc1d9a530cec03be55c53296252d485 ""
"picture/xml-2.png" 1736836183 572565 ba5fa1e4c851a9aea36bd41b76257b55 ""
"小米便签泛读、标注和维护报告文档.aux" 1736843824 19314 1afc4eb2ea1a0c21b2fa9341ee796bfc "pdflatex"
"小米便签泛读、标注和维护报告文档.out" 1736843824 4879 a3391b03f8d4bb0a0afc05053738784c "pdflatex"
"小米便签泛读、标注和维护报告文档.tex" 1736843824 82584 dae758449fd1570b84d8fd6105996838 ""
"小米便签泛读、标注和维护报告文档.toc" 1736843824 5168 8c39aad8b75c255cc64a2dbe887f9ae1 "pdflatex"
(generated)
"小米便签泛读、标注和维护报告文档.aux"
"小米便签泛读、标注和维护报告文档.log"

@ -1,8 +1,8 @@
PWD d:/software engineering/xiaomi/xiaomi/doc/代码泛读、标注、维护报告
PWD d:/software engineering/xiaomi/xiaomi/xiaomi/doc/代码泛读、标注、维护报告
INPUT f:/texlive/2024/texmf.cnf
INPUT f:/texlive/2024/texmf-dist/web2c/texmf.cnf
INPUT f:/texlive/2024/texmf-var/web2c/pdftex/pdflatex.fmt
INPUT d:/software engineering/xiaomi/xiaomi/doc/代码泛读、标注、维护报告/小米便签泛读、标注和维护报告文档.tex
INPUT d:/software engineering/xiaomi/xiaomi/xiaomi/doc/代码泛读、标注、维护报告/小米便签泛读、标注和维护报告文档.tex
OUTPUT 小米便签泛读、标注和维护报告文档.log
INPUT f:/texlive/2024/texmf-dist/tex/latex/base/article.cls
INPUT f:/texlive/2024/texmf-dist/tex/latex/base/article.cls
@ -298,6 +298,7 @@ INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong71.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong59.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei68.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong90.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong5d.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong58.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei52.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei80.tfm
@ -307,7 +308,6 @@ INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei7e.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong7f.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong84.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong9a.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong5d.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong81.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong6b.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong94.tfm
@ -567,6 +567,19 @@ INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei5e.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei6e.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei66.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei6d.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unisong/unisong9f.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei79.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei94.tfm
INPUT ./picture/113.png
INPUT ./picture/113.png
INPUT ./picture/113.png
INPUT ./picture/113.png
INPUT ./picture/113.png
INPUT ./picture/112.png
INPUT ./picture/112.png
INPUT ./picture/112.png
INPUT ./picture/112.png
INPUT ./picture/112.png
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei78.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei65.tfm
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei91.tfm
@ -780,7 +793,6 @@ INPUT ./picture/36.png
INPUT ./picture/36.png
INPUT ./picture/36.png
INPUT ./picture/36.png
INPUT f:/texlive/2024/texmf-dist/fonts/tfm/zhmetrics/unihei/unihei79.tfm
INPUT ./picture/37.png
INPUT ./picture/37.png
INPUT ./picture/37.png
@ -841,6 +853,16 @@ INPUT ./picture/Template tag 2.png
INPUT ./picture/Template tag 2.png
INPUT ./picture/Template tag 2.png
INPUT ./picture/Template tag 2.png
INPUT ./picture/111.png
INPUT ./picture/111.png
INPUT ./picture/111.png
INPUT ./picture/111.png
INPUT ./picture/111.png
INPUT ./picture/114.png
INPUT ./picture/114.png
INPUT ./picture/114.png
INPUT ./picture/114.png
INPUT ./picture/114.png
INPUT ./picture/linsten1.png
INPUT ./picture/linsten1.png
INPUT ./picture/linsten1.png
@ -886,11 +908,11 @@ INPUT ./picture/seq14-LL.png
INPUT ./picture/seq14-LL.png
INPUT ./picture/seq14-LL.png
INPUT ./picture/seq14-LL.png
INPUT ./picture/seq14-LLM.png
INPUT ./picture/seq14-LLM.png
INPUT ./picture/seq14-LLM.png
INPUT ./picture/seq14-LLM.png
INPUT ./picture/seq14-LLM.png
INPUT ./picture/seq14_chatLLM.png
INPUT ./picture/seq14_chatLLM.png
INPUT ./picture/seq14_chatLLM.png
INPUT ./picture/seq14_chatLLM.png
INPUT ./picture/seq14_chatLLM.png
INPUT ./picture/Undo function1.png
INPUT ./picture/Undo function1.png
INPUT ./picture/Undo function1.png
@ -932,6 +954,8 @@ INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simhei.ttf
@ -986,7 +1010,6 @@ INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simsun.ttc
@ -1035,6 +1058,7 @@ INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simsun.ttc
INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simhei.ttf
INPUT c:/Windows/Fonts/simsun.ttc

@ -13,29 +13,30 @@
\BOOKMARK [3][-]{subsubsection.3.2.3}{\376\377\165\114\227\142\213\276\213\241}{subsection.3.2}% 13
\BOOKMARK [2][-]{subsection.3.3}{\376\377\176\364\142\244\116\343\170\001\145\160\221\317\116\345\123\312\215\050\221\317\140\305\121\265}{section.3}% 14
\BOOKMARK [3][-]{subsubsection.3.3.1}{\376\377\176\364\142\244\116\343\170\001\145\160\221\317}{subsection.3.3}% 15
\BOOKMARK [3][-]{subsubsection.3.3.2}{\376\377\176\364\142\244\124\016\166\204\215\050\221\317\122\006\147\220}{subsection.3.3}% 16
\BOOKMARK [2][-]{subsection.3.4}{\376\377\176\364\142\244\124\016\166\204\217\157\116\366\123\237\127\213\116\345\123\312\122\237\200\375\134\125\171\072}{section.3}% 17
\BOOKMARK [3][-]{subsubsection.3.4.1}{\376\377\213\276\177\156\165\114\227\142\200\314\146\157}{subsection.3.4}% 18
\BOOKMARK [3][-]{subsubsection.3.4.2}{\376\377\153\042\217\316\165\114\227\142}{subsection.3.4}% 19
\BOOKMARK [3][-]{subsubsection.3.4.3}{\376\377\166\173\137\125\133\306\170\001}{subsection.3.4}% 20
\BOOKMARK [3][-]{subsubsection.3.4.4}{\376\377\177\373\213\321\122\237\200\375}{subsection.3.4}% 21
\BOOKMARK [3][-]{subsubsection.3.4.5}{\376\377\143\322\121\145\126\376\162\107}{subsection.3.4}% 22
\BOOKMARK [3][-]{subsubsection.3.4.6}{\376\377\176\337\213\241\133\127\173\046\116\052\145\160}{subsection.3.4}% 23
\BOOKMARK [3][-]{subsubsection.3.4.7}{\376\377\133\314\145\207\147\054\122\237\200\375}{subsection.3.4}% 24
\BOOKMARK [3][-]{subsubsection.3.4.8}{\376\377\147\027\213\373\122\237\200\375}{subsection.3.4}% 25
\BOOKMARK [3][-]{subsubsection.3.4.9}{\376\377\171\301\133\306\152\041\137\017}{subsection.3.4}% 26
\BOOKMARK [3][-]{subsubsection.3.4.10}{\376\377\173\024\213\260\177\026\217\221\121\205\144\034\175\042}{subsection.3.4}% 27
\BOOKMARK [3][-]{subsubsection.3.4.11}{\376\377\152\041\147\177\117\277\173\176}{subsection.3.4}% 28
\BOOKMARK [3][-]{subsubsection.3.4.12}{\376\377\213\355\227\363\124\054\121\231}{subsection.3.4}% 29
\BOOKMARK [3][-]{subsubsection.3.4.13}{\376\377\213\355\227\363\124\010\142\020}{subsection.3.4}% 30
\BOOKMARK [3][-]{subsubsection.3.4.14}{\376\377\133\371\213\335\137\017\131\047\152\041\127\213}{subsection.3.4}% 31
\BOOKMARK [3][-]{subsubsection.3.4.15}{\376\377\144\244\126\336\122\237\200\375}{subsection.3.4}% 32
\BOOKMARK [3][-]{subsubsection.3.4.16}{\376\377\203\267\123\326\127\060\164\006\117\115\177\156}{subsection.3.4}% 33
\BOOKMARK [1][-]{section.4}{\376\377\133\236\215\365\145\066\203\267\124\214\117\123\117\032}{}% 34
\BOOKMARK [2][-]{subsection.4.1}{\376\377\145\066\203\267}{section.4}% 35
\BOOKMARK [2][-]{subsection.4.2}{\376\377\117\123\117\032}{section.4}% 36
\BOOKMARK [2][-]{subsection.4.3}{\376\377\123\302\200\003\145\207\163\056\116\016\177\121\127\100}{section.4}% 37
\BOOKMARK [3][-]{subsubsection.4.3.1}{\376\377\213\257\230\336\146\172\200\375\000A\000P\000I\116\313\176\315}{subsection.4.3}% 38
\BOOKMARK [3][-]{subsubsection.4.3.2}{\376\377\166\176\136\246\177\373\213\321\000A\000P\000I\116\313\176\315}{subsection.4.3}% 39
\BOOKMARK [3][-]{subsubsection.4.3.3}{\376\377\000U\000M\000L\136\372\152\041}{subsection.4.3}% 40
\BOOKMARK [3][-]{subsubsection.4.3.4}{\376\377\000C\000o\000d\000e\000A\000r\000t\000s\215\050\221\317\122\006\147\220}{subsection.4.3}% 41
\BOOKMARK [3][-]{subsubsection.3.3.2}{\376\377\124\004\122\237\200\375\116\343\170\001\211\304\152\041}{subsection.3.3}% 16
\BOOKMARK [3][-]{subsubsection.3.3.3}{\376\377\176\364\142\244\124\016\166\204\215\050\221\317\122\006\147\220}{subsection.3.3}% 17
\BOOKMARK [2][-]{subsection.3.4}{\376\377\176\364\142\244\124\016\166\204\217\157\116\366\123\237\127\213\116\345\123\312\122\237\200\375\134\125\171\072}{section.3}% 18
\BOOKMARK [3][-]{subsubsection.3.4.1}{\376\377\213\276\177\156\165\114\227\142\200\314\146\157}{subsection.3.4}% 19
\BOOKMARK [3][-]{subsubsection.3.4.2}{\376\377\153\042\217\316\165\114\227\142}{subsection.3.4}% 20
\BOOKMARK [3][-]{subsubsection.3.4.3}{\376\377\166\173\137\125\133\306\170\001}{subsection.3.4}% 21
\BOOKMARK [3][-]{subsubsection.3.4.4}{\376\377\177\373\213\321\122\237\200\375}{subsection.3.4}% 22
\BOOKMARK [3][-]{subsubsection.3.4.5}{\376\377\143\322\121\145\126\376\162\107}{subsection.3.4}% 23
\BOOKMARK [3][-]{subsubsection.3.4.6}{\376\377\176\337\213\241\133\127\173\046\116\052\145\160}{subsection.3.4}% 24
\BOOKMARK [3][-]{subsubsection.3.4.7}{\376\377\133\314\145\207\147\054\122\237\200\375}{subsection.3.4}% 25
\BOOKMARK [3][-]{subsubsection.3.4.8}{\376\377\147\027\213\373\122\237\200\375}{subsection.3.4}% 26
\BOOKMARK [3][-]{subsubsection.3.4.9}{\376\377\171\301\133\306\152\041\137\017}{subsection.3.4}% 27
\BOOKMARK [3][-]{subsubsection.3.4.10}{\376\377\173\024\213\260\177\026\217\221\121\205\144\034\175\042}{subsection.3.4}% 28
\BOOKMARK [3][-]{subsubsection.3.4.11}{\376\377\152\041\147\177\117\277\173\176}{subsection.3.4}% 29
\BOOKMARK [3][-]{subsubsection.3.4.12}{\376\377\213\355\227\363\124\054\121\231}{subsection.3.4}% 30
\BOOKMARK [3][-]{subsubsection.3.4.13}{\376\377\213\355\227\363\124\010\142\020}{subsection.3.4}% 31
\BOOKMARK [3][-]{subsubsection.3.4.14}{\376\377\133\371\213\335\137\017\131\047\152\041\127\213}{subsection.3.4}% 32
\BOOKMARK [3][-]{subsubsection.3.4.15}{\376\377\144\244\126\336\122\237\200\375}{subsection.3.4}% 33
\BOOKMARK [3][-]{subsubsection.3.4.16}{\376\377\203\267\123\326\127\060\164\006\117\115\177\156}{subsection.3.4}% 34
\BOOKMARK [1][-]{section.4}{\376\377\133\236\215\365\145\066\203\267\124\214\117\123\117\032}{}% 35
\BOOKMARK [2][-]{subsection.4.1}{\376\377\145\066\203\267}{section.4}% 36
\BOOKMARK [2][-]{subsection.4.2}{\376\377\117\123\117\032}{section.4}% 37
\BOOKMARK [2][-]{subsection.4.3}{\376\377\123\302\200\003\145\207\163\056\116\016\177\121\127\100}{section.4}% 38
\BOOKMARK [3][-]{subsubsection.4.3.1}{\376\377\213\257\230\336\146\172\200\375\000A\000P\000I\116\313\176\315}{subsection.4.3}% 39
\BOOKMARK [3][-]{subsubsection.4.3.2}{\376\377\166\176\136\246\177\373\213\321\000A\000P\000I\116\313\176\315}{subsection.4.3}% 40
\BOOKMARK [3][-]{subsubsection.4.3.3}{\376\377\000U\000M\000L\136\372\152\041}{subsection.4.3}% 41
\BOOKMARK [3][-]{subsubsection.4.3.4}{\376\377\000C\000o\000d\000e\000A\000r\000t\000s\215\050\221\317\122\006\147\220}{subsection.4.3}% 42

@ -71,10 +71,10 @@ linkcolor=black
梳理了类与类之间的交互关系,聚焦核心功能(如便签创建、删除、移动)的实现路径,为后续功能扩展奠定了基础。
\item \textbf{代码标注}
对6个包中39个类的源码完成了3924行详细注释包括类的功能说明、关键方法逻辑解析及重要变量定义增强了代码的可读性和可维护性。
对6个包中39个类的源码以及res包中部分xml文件完成了总计3924左右行详细注释,包括类的功能说明、关键方法逻辑解析、关键语句和语句块功能说明以及重要变量定义,增强了代码的可读性和可维护性。
\item \textbf{功能扩展与维护}
在项目的基础上新增了16项功能涵盖文本处理、界面优化、隐私保护、文本处理、语音交互、翻译等领域,显著提升了应用的实用性与用户体验。
在项目的基础上新增了16项功能涵盖文本处理、界面优化、隐私保护、语音交互、翻译、大模型使用等领域,显著提升了应用的实用性与用户体验。
新增代码量约7000行优化了代码质量并通过质量检测工具验证确保结构清晰、逻辑一致。
\end{enumerate}
@ -370,7 +370,7 @@ Gtask包用于存放与数据更新同步检测异常相关的类和方法
\section{小米便签的代码标注}
小组对6个包中共39个类的代码进行了标注标注的代码行数共有2350行
小组对6个包中共39个类的代码进行了标注标注的代码行数共有3924行左右
具体的这些代码注释的分部如表2所示。
\begin{longtable}{|p{0.05\textwidth}|p{0.15\textwidth}|p{0.27\textwidth}|p{0.4\textwidth}|}
@ -537,7 +537,7 @@ Gtask包用于存放与数据更新同步检测异常相关的类和方法
\newpage
\subsection{开源软件维护后所产生的设计}
\noindent维护后的小米便签主要增加和更改类的类图见图10,维护后产生的体系架构图见图11。
\noindent维护后的小米便签主要更改了ui包和增加了第三方API包ui包和第三方API包中增加和更改类的类图见图10,维护后产生的体系架构图见图11。
\begin{figure}[H]
\centering
@ -593,7 +593,7 @@ Gtask包用于存放与数据更新同步检测异常相关的类和方法
\paragraph{5. 语音识别和语音合成相关类}
\begin{itemize}
\item \textbf{IATActivity}\textbf{IflytekActivity}: 处理语音输入功能,通过字段 \texttt{mIat: SpeechRecognizer} 初始化语音识别功能 (\texttt{initSpeech()} 方法)。
\item \textbf{IATActivity}\textbf{IflytekActivity}: 处理语音输入功能,通过字段 \texttt{SpeechRecognizer} 初始化语音识别功能 (\texttt{initSpeech()} 方法)。
\item \textbf{TtsDemo}\textbf{TtsSettings}: 提供语音合成功能,其核心方法 \texttt{initSpeechSynthesizer()} 用于初始化语音合成引擎。
\item \textbf{SpeechApp}: 用作全局应用类,管理与语音相关的初始化参数,如 \texttt{PRIVACY\_KEY}\texttt{msInitialize}
\end{itemize}
@ -823,6 +823,51 @@ Gtask包用于存放与数据更新同步检测异常相关的类和方法
\end{figure}
\end{enumerate}
\newpage
\subsubsection{各功能代码规模}
\begin{longtable}{|p{0.15\textwidth}|p{0.15\textwidth}|p{0.15\textwidth}|p{0.2\textwidth}|}
\caption{代码质量分析详细结果} \\
\hline
\footnotesize 序号 & \footnotesize 维护类别 & \footnotesize 名称 & \footnotesize 受影响的代码行数 \\
\hline
\footnotesize 1 & \footnotesize 新增功能 & \footnotesize 设置界面背景 & \footnotesize 42 \\
\hline
\footnotesize 2 & \footnotesize 新增功能 & \footnotesize 欢迎界面 & \footnotesize 115 \\
\hline
\footnotesize 3 & \footnotesize 新增功能 & \footnotesize 登陆密码 & \footnotesize 224 \\
\hline
\footnotesize 4 & \footnotesize 新增功能 & \footnotesize 翻译功能 & \footnotesize 255 \\
\hline
\footnotesize 5 & \footnotesize 新增功能 & \footnotesize 插入图片 & \footnotesize 242 \\
\hline
\footnotesize 6 & \footnotesize 新增功能 & \footnotesize 统计字符个数 & \footnotesize 169 \\
\hline
\footnotesize 7 & \footnotesize 新增功能 & \footnotesize 富文本功能 & \footnotesize 224 \\
\hline
\footnotesize 8 & \footnotesize 新增功能 & \footnotesize 朗读功能 & \footnotesize 114 \\
\hline
\footnotesize 9 & \footnotesize 新增功能 & \footnotesize 私密模式 & \footnotesize 186 \\
\hline
\footnotesize 10 & \footnotesize 新增功能 & \footnotesize 笔记编辑框内搜索 & \footnotesize 185 \\
\hline
\footnotesize 11 & \footnotesize 新增功能 & \footnotesize 模板便签 & \footnotesize 102 \\
\hline
\footnotesize 12 & \footnotesize 新增功能 & \footnotesize 语音听写 & \footnotesize 781 \\
\hline
\footnotesize 13 & \footnotesize 新增功能 & \footnotesize 语音合成 & \footnotesize 797 \\
\hline
\footnotesize 14 & \footnotesize 新增功能 & \footnotesize 对话式大模型 & \footnotesize 672 \\
\hline
\footnotesize 15 & \footnotesize 新增功能 & \footnotesize 撤回功能 & \footnotesize 116 \\
\hline
\footnotesize 16 & \footnotesize 新增功能 & \footnotesize 获取地理位置 & \footnotesize 147 \\
\hline
\end{longtable}
\newpage
\subsubsection{维护后的质量分析}
在代码维护之后我们小组再次对代码进行了质量分析使用CodeArts中的代码审查功能对代码的质量进行分析。
@ -1423,7 +1468,7 @@ Gtask包用于存放与数据更新同步检测异常相关的类和方法
\newpage
这里对对话式大模型以及语音合成与转写功能进行一部分特殊说明由于使用了第三方SDK并且需要与第三方服务器Iflytek Server等连接因此虚拟机
必须需要连接网络这一点百度翻译也是一样的。其次讯飞星火大模型和语音识别功能还依赖官方提供的特定MSC和aar文件这些库依赖需要在build.gradle中额外声明包括dependencies依赖项声明和依赖树结构值得一提的是该MSA和AAR文件都只支持arm64-v8a或armeabi-v7a处理器部分虚拟机可能不具备调试的前提最后讯飞的SDK服务有一定期限到期后需要用户重新购买服务并在本项目中替换appid、密钥等信息。
必须需要连接网络这一点百度翻译也是一样的。其次讯飞星火大模型和语音识别功能还依赖官方提供的特定MSC和aar文件这些库依赖需要在build.gradle中额外声明包括dependencies依赖项声明和依赖树结构对应的MSC和AAR文件已经上传至项目中的源码文件夹下的app子包的libs包中值得一提的是该MSA和AAR文件都只支持arm64-v8a或armeabi-v7a处理器部分虚拟机可能不具备调试的前提最后讯飞的SDK服务有一定期限到期后需要用户重新购买服务并在本项目中替换appid、密钥等信息。
MSC的部分文件如表5所示
\begin{longtable}{|p{0.05\textwidth}|p{0.20\textwidth}|p{0.18\textwidth}|}
\caption{} \\

@ -31,29 +31,30 @@
\contentsline {paragraph}{界面整体布局分析}{28}{section*.30}%
\contentsline {subsection}{\numberline {3.3}维护代码数量以及质量情况}{31}{subsection.3.3}%
\contentsline {subsubsection}{\numberline {3.3.1}维护代码数量}{31}{subsubsection.3.3.1}%
\contentsline {subsubsection}{\numberline {3.3.2}维护后的质量分析}{35}{subsubsection.3.3.2}%
\contentsline {subsection}{\numberline {3.4}维护后的软件原型以及功能展示}{39}{subsection.3.4}%
\contentsline {subsubsection}{\numberline {3.4.1}设置界面背景}{39}{subsubsection.3.4.1}%
\contentsline {subsubsection}{\numberline {3.4.2}欢迎界面}{40}{subsubsection.3.4.2}%
\contentsline {subsubsection}{\numberline {3.4.3}登录密码}{41}{subsubsection.3.4.3}%
\contentsline {subsubsection}{\numberline {3.4.4}翻译功能}{47}{subsubsection.3.4.4}%
\contentsline {subsubsection}{\numberline {3.4.5}插入图片}{51}{subsubsection.3.4.5}%
\contentsline {subsubsection}{\numberline {3.4.6}统计字符个数}{52}{subsubsection.3.4.6}%
\contentsline {subsubsection}{\numberline {3.4.7}富文本功能}{53}{subsubsection.3.4.7}%
\contentsline {subsubsection}{\numberline {3.4.8}朗读功能}{55}{subsubsection.3.4.8}%
\contentsline {subsubsection}{\numberline {3.4.9}私密模式}{56}{subsubsection.3.4.9}%
\contentsline {subsubsection}{\numberline {3.4.10}笔记编辑内搜索}{58}{subsubsection.3.4.10}%
\contentsline {subsubsection}{\numberline {3.4.11}模板便签}{60}{subsubsection.3.4.11}%
\contentsline {subsubsection}{\numberline {3.4.12}语音听写}{63}{subsubsection.3.4.12}%
\contentsline {subsubsection}{\numberline {3.4.13}语音合成}{65}{subsubsection.3.4.13}%
\contentsline {subsubsection}{\numberline {3.4.14}对话式大模型}{68}{subsubsection.3.4.14}%
\contentsline {subsubsection}{\numberline {3.4.15}撤回功能}{72}{subsubsection.3.4.15}%
\contentsline {subsubsection}{\numberline {3.4.16}获取地理位置}{73}{subsubsection.3.4.16}%
\contentsline {section}{\numberline {4}实践收获和体会}{74}{section.4}%
\contentsline {subsection}{\numberline {4.1}收获}{74}{subsection.4.1}%
\contentsline {subsection}{\numberline {4.2}体会}{74}{subsection.4.2}%
\contentsline {subsection}{\numberline {4.3}参考文献与网址}{75}{subsection.4.3}%
\contentsline {subsubsection}{\numberline {4.3.1}讯飞智能API介绍}{75}{subsubsection.4.3.1}%
\contentsline {subsubsection}{\numberline {4.3.2}百度翻译API介绍}{75}{subsubsection.4.3.2}%
\contentsline {subsubsection}{\numberline {4.3.3}UML建模}{75}{subsubsection.4.3.3}%
\contentsline {subsubsection}{\numberline {4.3.4}CodeArts质量分析}{75}{subsubsection.4.3.4}%
\contentsline {subsubsection}{\numberline {3.3.2}各功能代码规模}{35}{subsubsection.3.3.2}%
\contentsline {subsubsection}{\numberline {3.3.3}维护后的质量分析}{36}{subsubsection.3.3.3}%
\contentsline {subsection}{\numberline {3.4}维护后的软件原型以及功能展示}{40}{subsection.3.4}%
\contentsline {subsubsection}{\numberline {3.4.1}设置界面背景}{40}{subsubsection.3.4.1}%
\contentsline {subsubsection}{\numberline {3.4.2}欢迎界面}{41}{subsubsection.3.4.2}%
\contentsline {subsubsection}{\numberline {3.4.3}登录密码}{42}{subsubsection.3.4.3}%
\contentsline {subsubsection}{\numberline {3.4.4}翻译功能}{48}{subsubsection.3.4.4}%
\contentsline {subsubsection}{\numberline {3.4.5}插入图片}{52}{subsubsection.3.4.5}%
\contentsline {subsubsection}{\numberline {3.4.6}统计字符个数}{53}{subsubsection.3.4.6}%
\contentsline {subsubsection}{\numberline {3.4.7}富文本功能}{54}{subsubsection.3.4.7}%
\contentsline {subsubsection}{\numberline {3.4.8}朗读功能}{56}{subsubsection.3.4.8}%
\contentsline {subsubsection}{\numberline {3.4.9}私密模式}{57}{subsubsection.3.4.9}%
\contentsline {subsubsection}{\numberline {3.4.10}笔记编辑内搜索}{59}{subsubsection.3.4.10}%
\contentsline {subsubsection}{\numberline {3.4.11}模板便签}{61}{subsubsection.3.4.11}%
\contentsline {subsubsection}{\numberline {3.4.12}语音听写}{64}{subsubsection.3.4.12}%
\contentsline {subsubsection}{\numberline {3.4.13}语音合成}{66}{subsubsection.3.4.13}%
\contentsline {subsubsection}{\numberline {3.4.14}对话式大模型}{69}{subsubsection.3.4.14}%
\contentsline {subsubsection}{\numberline {3.4.15}撤回功能}{73}{subsubsection.3.4.15}%
\contentsline {subsubsection}{\numberline {3.4.16}获取地理位置}{74}{subsubsection.3.4.16}%
\contentsline {section}{\numberline {4}实践收获和体会}{75}{section.4}%
\contentsline {subsection}{\numberline {4.1}收获}{75}{subsection.4.1}%
\contentsline {subsection}{\numberline {4.2}体会}{75}{subsection.4.2}%
\contentsline {subsection}{\numberline {4.3}参考文献与网址}{76}{subsection.4.3}%
\contentsline {subsubsection}{\numberline {4.3.1}讯飞智能API介绍}{76}{subsubsection.4.3.1}%
\contentsline {subsubsection}{\numberline {4.3.2}百度翻译API介绍}{76}{subsubsection.4.3.2}%
\contentsline {subsubsection}{\numberline {4.3.3}UML建模}{76}{subsubsection.4.3.3}%
\contentsline {subsubsection}{\numberline {4.3.4}CodeArts质量分析}{76}{subsubsection.4.3.4}%

@ -1,270 +0,0 @@
package net.micode.notes.SparkChain;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.iflytek.sparkchain.core.LLM;
import com.iflytek.sparkchain.core.LLMCallbacks;
import com.iflytek.sparkchain.core.LLMConfig;
import com.iflytek.sparkchain.core.LLMError;
import com.iflytek.sparkchain.core.LLMEvent;
import com.iflytek.sparkchain.core.LLMFactory;
import com.iflytek.sparkchain.core.LLMOutput;
import com.iflytek.sparkchain.core.LLMResult;
import com.iflytek.sparkchain.core.SparkChain;
import com.iflytek.sparkchain.core.SparkChainConfig;
import net.micode.notes.R;
import java.util.ArrayList;
public class ImageGenerationActivity extends Activity implements View.OnClickListener{
private static final String TAG = "AEE_ImageGeneration";
LLM llm;
private ImageView imageView;
private TextView tv_result;
private Button btn_imageGeneration_run_start,btn_imageGeneration_arun_start,btn_imageGeneration_stop;
private EditText ed_input;
private boolean isAuth = false;
//Android permission ask for
private void Android_Permission_init(){
ArrayList<String> NOPER_List = new ArrayList<String>();
String tempList[];
String Perm[] = {android.Manifest.permission.RECORD_AUDIO, //录音权限
android.Manifest.permission.ACCESS_NETWORK_STATE, //络连接信息权限
android.Manifest.permission.INTERNET, //连网权限
Manifest.permission.READ_EXTERNAL_STORAGE,//qxq:
Manifest.permission.MANAGE_EXTERNAL_STORAGE,//qxq:
Manifest.permission.WRITE_EXTERNAL_STORAGE}; //应用写入设备的外部存储
//is permission granted ? otherwise add to 'List'
for(String P : Perm)
if(PackageManager.PERMISSION_GRANTED!= ContextCompat.checkSelfPermission(this,P))
NOPER_List.add(P);
tempList = new String[NOPER_List.size()];
if(!NOPER_List.isEmpty())
ActivityCompat.requestPermissions(this,NOPER_List.toArray(tempList),123);
initSDK();
}
/*************************
* SparkChainSDK
* *******************************/
private void initSDK() {
Log.d(TAG,"initSDK");
// 初始化SDKAppid等信息在清单中配置
SparkChainConfig sparkChainConfig = SparkChainConfig.builder();
sparkChainConfig.appID(getResources().getString(R.string.appid))
.apiKey(getResources().getString(R.string.apikey))
.apiSecret(getResources().getString(R.string.apiSecret))//应用申请的appid三元组
// .uid(getAndroidId())
.logLevel(666);
int ret = SparkChain.getInst().init(getApplicationContext(),sparkChainConfig);
String mresult;
if(ret == 0){
mresult = "qxq:spark pro SDK初始化成功,请选择相应的功能点击体验。";
isAuth = true;
}else{
mresult = "SDK初始化失败,错误码:" + ret;
isAuth = false;
}
Log.d(TAG,mresult);
mshowInfo(mresult);
}
private void mshowInfo(String text){
runOnUiThread(new Runnable() {
@Override
public void run() {
//tv_result.setText(text);
}
});
}
/*********
*
* ***********/
private LLMCallbacks mLLMCallbacksListener = new LLMCallbacks() {
@Override
public void onLLMResult(LLMResult result, Object o) {
if(result.getImage()==null)
{
Log.d(TAG, "qxq:result return null,cannot show image");
}
byte [] bytes = result.getImage();//获取图片生成结果二进制流,大模型一次性返回
showImage(bytes);
showInfo("图片生成结束。");
}
@Override
public void onLLMEvent(LLMEvent llmEvent, Object o) {
}
@Override
public void onLLMError(LLMError error, Object o) {
int errCode = error.getErrCode();
String errMsg = error.getErrMsg();
String errInfo = "出错了,错误码:" + errCode + ",错误信息:" + errMsg;
showInfo(errInfo);
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_generation);
ed_input = findViewById(R.id.imageGeneration_input_text);
imageView = findViewById(R.id.imageGeneration_output_iv);
tv_result = findViewById(R.id.imageGeneration_Notification);
btn_imageGeneration_run_start = findViewById(R.id.imageGeneration_run_start_btn);
btn_imageGeneration_arun_start = findViewById(R.id.imageGeneration_arun_start_btn);
btn_imageGeneration_stop = findViewById(R.id.imageGeneration_stop_btn);
btn_imageGeneration_run_start.setOnClickListener(this);
btn_imageGeneration_arun_start.setOnClickListener(this);
btn_imageGeneration_stop.setOnClickListener(this);
setLLMConfig();
Android_Permission_init();//qxq:进行模块分离之后SDK的初始化在每个类中都要有
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.imageGeneration_arun_start_btn:
if(llm != null){
clearImage();
showInfo("图片生成中,请稍后.....");
imageGeneration_arun_start();
}
break;
case R.id.imageGeneration_run_start_btn:
if(llm != null){
clearImage();
showInfo("图片生成中,请稍后.....");
new Thread(){
@Override
public void run() {//由于同步请求后该线程会卡主,为了防止卡主线程,故开启一个线程进行同步请求
super.run();
imageGeneration_run_start();
}
}.start();
}
break;
case R.id.imageGeneration_stop_btn:
if(llm != null){
imageGeneration_stop();
showInfo("已取消图片生成。");
}
break;
}
}
/***************
*
* ****************/
private void imageGeneration_stop(){
llm.stop();
}
/***************
*
* ****************/
private void imageGeneration_arun_start(){
String content = ed_input.getText().toString();
Log.d("SparkChain","content: " + content);
//异步请求
llm.arun(content);
Log.d("SparkChain","qxq:发出请求: " + content);
}
/***************
*
* ****************/
private void imageGeneration_run_start(){
String content = ed_input.getText().toString();
Log.d("SparkChain","content: " + content);
//同步请求
LLMOutput syncOutput = llm.run(content);
if(syncOutput.getErrCode() == 0) {
byte [] bytes = syncOutput.getImage();
if(bytes!=null)
Log.d(TAG, "同步调用:" + bytes.length);
else {
Log.d(TAG, "同步调用:获取结果失败");
return;
}
showImage(bytes);
showInfo("图片生成结束。");
}else {
Log.d(TAG, "同步调用:" + "errCode" + syncOutput.getErrCode() + " errMsg:" + syncOutput.getErrMsg());
}
}
private void showImage(byte [] bytes){
runOnUiThread(new Runnable() {
@Override
public void run() {
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);//把二进制图片流转换成图片
imageView.setImageBitmap(Bitmap.createScaledBitmap(bmp,bmp.getWidth(),bmp.getHeight(),false));//把图片设置到对应的控件
}
});
}
private void clearImage(){
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageDrawable(null);
}
});
}
private void showInfo(String text){
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_result.setText(text);
}
});
}
/***************
* LLM
* ******************/
private void setLLMConfig(){
llm = LLMFactory.imageGeneration(1024,1024);
llm.registerLLMCallbacks(mLLMCallbacksListener);
}
@Override
protected void onDestroy() {
super.onDestroy();
SparkChain.getInst().unInit();//qxq:逆初始化
}
}

@ -1,349 +0,0 @@
package net.micode.notes.SparkChain;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.iflytek.sparkchain.core.LLM;
import com.iflytek.sparkchain.core.LLMCallbacks;
import com.iflytek.sparkchain.core.LLMConfig;
import com.iflytek.sparkchain.core.LLMError;
import com.iflytek.sparkchain.core.LLMEvent;
import com.iflytek.sparkchain.core.LLMFactory;
import com.iflytek.sparkchain.core.LLMOutput;
import com.iflytek.sparkchain.core.LLMResult;
import com.iflytek.sparkchain.core.Memory;
import com.iflytek.sparkchain.core.SparkChain;
import com.iflytek.sparkchain.core.SparkChainConfig;
import net.micode.notes.R;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ImageUnderstanding extends Activity implements View.OnClickListener{
private static final String TAG = "AEE_imageUnderstanding";
private static final int AUDIO_FILE_SELECT_CODE = 1024;
private Button btn_imgInput,btn_arunStart,btn_stop;
private TextView tv_Notification;
private EditText ed_textInput;
private String imagePath = null;
private int token = 0;
LLM llm;
/*********
*
* ***********/
private LLMCallbacks mLLMCallbacksListener = new LLMCallbacks() {
@Override
public void onLLMResult(LLMResult llmResult, Object usrContext) {
if(token == (int)usrContext){
Log.d(TAG,"onLLMResult\n");
String content = llmResult.getContent();//获取大模型返回的结果信息
Log.e(TAG,"onLLMResult:" + content);
int status = llmResult.getStatus();
if(content != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_Notification.append(content);
toend();
}
});
}
if(status == 2){//2表示大模型结果返回完成
int completionTokens = llmResult.getCompletionTokens();
int promptTokens = llmResult.getPromptTokens();//
int totalTokens = llmResult.getTotalTokens();
Log.e(TAG,"completionTokens:" + completionTokens + "promptTokens:" + promptTokens + "totalTokens:" + totalTokens);
}
}
}
@Override
public void onLLMEvent(LLMEvent llmEvent, Object o) {
}
@Override
public void onLLMError(LLMError error, Object o) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_Notification.append("错误:" + " err:" + error.getErrCode() + " errDesc:" + error.getErrMsg() + "\n");
}
});
}
};
private boolean isAuth = false;
/*************************
* SparkChainSDK
* *******************************/
private void initSDK() {
Log.d(TAG,"initSDK");
//qxq:初始化SDKAppid等信息在清单中配置
SparkChainConfig sparkChainConfig = SparkChainConfig.builder();
sparkChainConfig.appID(getResources().getString(R.string.appid))
.apiKey(getResources().getString(R.string.apikey))
.apiSecret(getResources().getString(R.string.apiSecret))//应用申请的appid三元组
// .uid(getAndroidId())
.logLevel(666);
int ret = SparkChain.getInst().init(getApplicationContext(),sparkChainConfig);
String myresult;
if(ret == 0){
myresult = "qxq:spark pro SDK初始化成功,请选择相应的功能点击体验。";
isAuth = true;
}else{
myresult = "SDK初始化失败,错误码:" + ret;
isAuth = false;
}
Log.d(TAG,myresult);
myshowInfo(myresult);
}
private void myshowInfo(String text){
runOnUiThread(new Runnable() {
@Override
public void run() {
//tv_result.setText(text);
}
});
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_understanding);
initView();
initSDK();//qxq:
}
private void initView(){
btn_imgInput = findViewById(R.id.image_understanding_imginput);
btn_arunStart = findViewById(R.id.image_understanding_arun_start_btn);
btn_stop = findViewById(R.id.image_understanding_arun_stop_btn);
tv_Notification = findViewById(R.id.image_understanding_Notification);
tv_Notification.setMovementMethod(new ScrollingMovementMethod());
ed_textInput = findViewById(R.id.image_understanding_input_text);
btn_imgInput.setOnClickListener(this);
btn_arunStart.setOnClickListener(this);
btn_stop.setOnClickListener(this);
setLLMConfig();
}
private void showInfo(String text){
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_Notification.setText(text);
}
});
}
/***************
* LLM
* ******************/
private void setLLMConfig(){
LLMConfig llmConfig = LLMConfig.builder()
.domain("image");
Memory window_memory = Memory.windowMemory(5);
llm = LLMFactory.imageUnderstanding(llmConfig,window_memory);
llm.registerLLMCallbacks(mLLMCallbacksListener);
}
/***************
*
* ****************/
private void startChat() {
if(llm == null){
Log.e(TAG,"startChat failed,please setLLMConfig before!");
return;
}
String usrInputText = ed_textInput.getText().toString();
Log.d(TAG,"用户输入:" + usrInputText);
if(usrInputText.length() >= 1)
tv_Notification.append("\n输入:\n " + usrInputText + "\n");
token++;
Log.e(TAG,"SparkChain imagePath:\n" + imagePath);
int ret = -1;
if(imagePath!=null) {
llm.clearHistory();//重新传图片前需要清空memory因为memory带有上一次图片的信息
ret = llm.arun(usrInputText, readFileByBytes(imagePath), token);//首轮会话需要带上图片信息
}else {
ret = llm.arun(usrInputText, token);//多轮会话可以不用携带图片信息SDK会在历史会话中自动拼接图片信息。
}
if(ret != 0){
Log.e(TAG,"SparkChain failed:\n" + ret);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
ed_textInput.setText("");
tv_Notification.append("输出:\n ");
imagePath = null;//第一轮会话后清空图片信息
}
});
}
/***************
* 使demo使
* ****************/
private void syncStartChat(){
if(llm == null){
Log.e(TAG,"startChat failed,please setLLMConfig before!");
return;
}
String usrInputText = ed_textInput.getText().toString();
Log.d(TAG,"用户输入:" + usrInputText);
if(usrInputText.length() >= 1)
tv_Notification.append("\n输入:\n " + usrInputText + "\n");
token++;
Log.e(TAG,"SparkChain imagePath:\n" + imagePath);
int ret = -1;
LLMOutput syncOutput = null;
if(imagePath!=null){
llm.clearHistory();//重新传图片前需要清空memory因为memory带有上一次图片的信息
syncOutput = llm.run(usrInputText,readFileByBytes(imagePath));
} else{
syncOutput = llm.run(usrInputText);
}
if(syncOutput.getErrCode() == 0) {
Log.i(TAG, "同步调用:" + syncOutput.getRole() + ":" + syncOutput.getContent());
String results = syncOutput.getContent();
showInfo(results);
}else {
String results = "同步调用:" + "errCode" + syncOutput.getErrCode() + " errMsg:" + syncOutput.getErrMsg();
showInfo(results);
Log.e(TAG, results);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
ed_textInput.setText("");
tv_Notification.append("输出:\n ");
imagePath = null;
}
});
}
/***************
*
* ****************/
private void stop(){
if(llm == null){
Log.e(TAG,"startChat failed,please setLLMConfig before!");
return;
}
llm.stop();
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.image_understanding_imginput:
showFileChooser();
break;
case R.id.image_understanding_arun_start_btn:
startChat();
// syncStartChat();
break;
case R.id.image_understanding_arun_stop_btn:
stop();
break;
}
}
/***************
*
* ****************/
private void showFileChooser() {
Log.d(TAG,"showFileChooser");
//调用系统文件管理器
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
//设置文件格式
intent.setType("*/*");
startActivityForResult(intent, AUDIO_FILE_SELECT_CODE);
}
/***************
*
* ****************/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode) {
case AUDIO_FILE_SELECT_CODE:
if (data != null) {
Uri uri = data.getData();
//String path = com.example.sparkchaindemo.image_understanding.GetFilePathFromUri.getFileAbsolutePath(this, uri);
String path = net.micode.notes.SparkChain.GetFilePathFromUri.getFileAbsolutePath(this, uri);
imagePath = path;
}
showInfo("图片已设置完成:"+imagePath);
break;
}
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG,"imagePath = " + imagePath);
}
/***************
*
* ****************/
private byte[] readFileByBytes(String fileName) {
FileInputStream in = null;
try {
in = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
Log.e("AEE", "readFileByBytes:" + e.toString());
}
byte[] bytes = null;
try {
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
byte[] temp = new byte[1024];
int size = 0;
while ((size = in.read(temp)) != -1) {
out.write(temp, 0, size);
}
in.close();
bytes = out.toByteArray();
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return bytes;
}
public void toend(){
int scrollAmount = tv_Notification.getLayout().getLineTop(tv_Notification.getLineCount()) - tv_Notification.getHeight();
if (scrollAmount > 0) {
tv_Notification.scrollTo(0, scrollAmount+10);
}
}
}
Loading…
Cancel
Save