package Ġcom . github . wind se kir un . n ara es ftp . extension Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Settings Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . github . wind se kir un . n ara es ftp . R Ċ import Ġcom . github . wind se kir un . n ara es ftp . extension . file . get MimeType Ċ import Ġcom . github . wind se kir un . n ara es ftp . extension . file . to Uri Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx kotlin . addTo Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠN ar ae SF TP Client Ċ Ġ* ĠClass : ĠFile Op ener Ċ Ġ* ĠCreated Ġby ĠPy x is Ġon Ġ 2 0 1 9 - 0 3 - 1 3 . Ċ Ġ* Ċ Ġ* ĠDescription : Ċ Ġ*/ Ċ object ĠFile Op ener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġopen File ( file : ĠFile , Ġactivity : ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġfile . to Uri ( activity ) ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetData And Type ( uri , Ġfile . get MimeType ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( file . extension . contains (" apk ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 6 Ġ&& Ġ! activity . package Manager . can Request Package Install s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Request Unknown App Request ( intent , Ġactivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen A pk ( intent , Ġactivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactivity . startActivity ( Intent . create Chooser ( intent , Ġ" Open Ġwith ... ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Request Unknown App Request ( intent : ĠIntent , Ġactivity : ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( activity ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( activity . getString ( R . string . request _ package _ message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( activity . getString ( R . string . request _ package _ posit iv ie )) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Unknown App Sources ( intent , Ġactivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( android . R . string . cancel ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Unknown App Sources ( intent : ĠIntent , Ġactivity : ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< Ġ 2 6 ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠRx Activity Result . result () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġdata , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . result Code Ġ!= ĠActivity . RESULT _ OK ) Ġreturn @ subscribe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen A pk ( intent , Ġactivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. addTo ( composite Disposable ) ĊĊĠĠĠĠĠĠĠ ĠRx Activity Result . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . ACTION _ MANAGE _ UNKNOWN _ APP _ SOURCES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" package :${ activity . packageName }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen A pk ( intent : ĠIntent , Ġactivity : ĠAppCompatActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠIntent . ACTION _ VIEW ĊĠĠĠĠĠĠĠ Ġactivity . startActivity ( intent ) ĊĠĠĠ Ġ} Ċ }