package Ġcom . ky hs ge ek code . dis assembler . ui . tabs Ċ Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . material . AlertDialog Ċ import Ġandroidx . compose . material . Button Ċ import Ġandroidx . compose . material . Icon Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Pending Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . ky hs ge ek code . dis assembler . Analyzer Ċ import Ġcom . ky hs ge ek code . dis assembler . Found String Ċ import Ġcom . ky hs ge ek code . dis assembler . project . Project Data Storage Ċ import Ġcom . ky hs ge ek code . dis assembler . ui . Tab Data Ċ import Ġcom . ky hs ge ek code . dis assembler . ui . Tab Kind Ċ import Ġcom . ky hs ge ek code . dis assembler . ui . components . Number TextField Ċ import Ġcom . ky hs ge ek code . dis assembler . ui . components . TableView Ċ import Ġcom . ky hs ge ek code . dis assembler . view model . Main ViewModel Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Experimental Unsigned Types Ċ class ĠString Tab Data ( val Ġdata : ĠTab Kind . Found String ) Ġ: ĠPrepared Tab Data () Ġ{ ĊĠĠĠ Ġval Ġstrings Ġ= Ġmutable State ListOf < Found String >() ĊĠĠĠ Ġprivate Ġval Ġ_ is Done Ġ= ĠMutable State Flow ( false ) ĊĠĠĠ Ġval Ġis Done Ġ= Ġ_ is Done Ġas ĠState Flow < Boolean > ĊĠĠĠ Ġlateinit Ġvar Ġanalyzer : ĠAnalyzer ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= ĠProject Data Storage . getFile Content ( data . rel Path ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Given Ġrel Path : Ġ${ data . rel Path }") ĊĠĠĠĠĠĠĠ Ġanalyzer Ġ= ĠAnalyzer ( bytes ) ĊĠĠĠĠĠĠĠ Ġanalyzer . search Strings ( data . range . first , Ġdata . range . last ) Ġ{ Ġp , Ġt , Ġfs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfs ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrings . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p Ġ== Ġt ) Ġ{ Ġ// Ġdone ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Done . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Foundation Api Ċ @ Experimental Unsigned Types Ċ @ Composable Ċ fun ĠString Tab ( data : ĠTab Data , ĠviewModel : ĠMain ViewModel ) Ġ{ ĊĠĠĠ Ġval Ġprepared Tab Data : ĠString Tab Data Ġ= ĠviewModel . get Tab Data ( data ) ĊĠĠĠ Ġval Ġstrings Ġ= Ġprepared Tab Data . strings ĊĠĠĠ Ġval Ġis Done Ġ= Ġprepared Tab Data . is Done . collect As State () ĊĠĠĠ ĠRow Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Done . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( image Vector Ġ= ĠIcons . Filled . Pending , Ġcontent Description Ġ= Ġ" Searching ...") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠTable View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitles Ġ= ĠlistOf (" Offset " Ġto Ġ 1 0 0 . dp , Ġ" Length " Ġto Ġ 5 0 . dp , Ġ" String " Ġto Ġ 8 0 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġstrings , ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġitem , Ġcol Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( col ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġitem . offset . toString ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġitem . length . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġitem . string ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" O OB ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠSearch For Strings Dialog ( viewModel : ĠMain ViewModel ) Ġ{ ĊĠĠĠ Ġvar Ġfrom Ġby Ġremember Ġ{ Ġmutable State Of (" 0 ") Ġ} ĊĠĠĠ Ġvar Ġto Ġby Ġremember Ġ{ Ġmutable State Of (" 0 ") Ġ} ĊĠĠĠ ĠAlertDialog ( ĊĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . dismiss Search For Strings Dialog () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Search Ġfor Ġstrings Ġwith Ġlength Ġ? Ġto Ġ? ") ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNumber TextField ( from , Ġ{ Ġfrom Ġ= Ġit Ġ}, Ġmodifier Ġ= ĠModifier . weight ( 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" to .. ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNumber TextField ( to , Ġ{ Ġto Ġ= Ġit Ġ}, Ġmodifier Ġ= ĠModifier . weight ( 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġbuttons Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( all Ġ= Ġ 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . Center ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . weight ( 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĠviewModel . dismiss Search For Strings Dialog () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Cancel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . weight ( 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĠviewModel . really Search For Strings ( from , Ġto ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Search ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ