package Ġds . lit vin ov . Drive Ok Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . File Provider Ċ import Ġandroidx . room . Room Ċ import Ġds . lit vin ov . Drive Ok . backup . Zip Ċ import Ġds . lit vin ov . Drive Ok . database . Car DB Ċ import Ġkotlinx . android . synt hetic . main . activity _ backup .* Ċ import Ġjava . io .* Ċ import Ġjava . nio . channels . File Channel Ċ Ċ class ĠBackup Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠREAD _ REQUEST _ CODE Ġ= Ġ 7 7 7 ĊĠĠĠĠĠĠĠ Ġval ĠREAD _ STORAGE _ PERMISSION _ REQUEST _ CODE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġlen : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ backup ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) Ġ// Ð¡ ÑĤÑĢ ÐµÐ» Ð°Ðº Ð° ĠÐ½Ð°Ð· Ð°Ð´ ĊĊĠĠĠ Ġ// Ðŀ ÑĤ Ð¿ÑĢÐ°Ð² ÐºÐ° ĠÑĦÐ°Ð¹ Ð»Ð° ĠÐ½Ð° ĠÑĥÐºÐ°Ð· Ð°Ð½ Ð½ÑĥÑİ ĠÐ¿Ð¾ Ñĩ ÑĤÑĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Button . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( check Permission For Read Ex ter tal Storage ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð¿ Ð¾Ð» ÑĥÑĩ ÐµÐ½Ð¸Ðµ ĠÑĦÐ°Ð¹ Ð»Ð° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile URI Ġ= ĠFile Provider . get Uri For File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ packageName . provider ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexport BD Files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð¿ Ð¾Ð´ Ð³ Ð¾ÑĤ Ð¾Ð² ÐºÐ° ĠÐ¿ Ð¸Ñģ ÑĮ Ð¼ Ð° ĠÐº ĠÐ¾ÑĤ Ð¿ÑĢÐ°Ð² ÐºÐµ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Intent Ġ= ĠIntent ( Intent . ACTION _ SEND ) Ġ// Ð¿Ð¸Ñģ ÑĮ Ð¼ Ð¾ ĠÑģ ĠÐ² Ð» Ð¾Ð¶ ÐµÐ½Ð¸ ÐµÐ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Intent . setType (" plain / text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Intent . putExtra ( Intent . EXTRA _ STREAM , Ġfile URI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Intent . add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð¾ÑĤ Ð¿ÑĢÐ°Ð² ÐºÐ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( email Intent , Ġ" Ðŀ ÑĤ Ð¿ÑĢÐ°Ð² ÐºÐ° ĠÑĦÐ°Ð¹ Ð»Ð° ... ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission For Read Ex ter tal Storage () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType ("* /* ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( Intent . ACTION _ GET _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . create Chooser ( intent , Ġ" Select Ġa Ġfile "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREAD _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĠresultCode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Data : ĠIntent ? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġresult Data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREAD _ REQUEST _ CODE Ġ&& ĠresultCode Ġ== ĠRESULT _ OK Ġ&& Ġresult Data Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri : ĠUri ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġresult Data . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimport BD Files ( uri !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcheck Permission For Read Ex ter tal Storage (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠInt Ġ= Ġthis . check Self Permission ( Manifest . permission . READ _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( java . lang . Exception :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġrequest Permission For Read Ex ter tal Storage () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions (( this Ġas ĠActivity ?) !! , ĠarrayOf ( Manifest . permission . READ _ EXTERNAL _ STORAGE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREAD _ STORAGE _ PERMISSION _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĠÐŁ ÑĢÐ¾Ð² ÐµÑĢ Ñı ÐµÑĤ , ĠÐ´Ð¾ÑģÑĤÑĥÐ¿ Ð½Ð¾ ĠÐ» Ð¸ Ġexternal Ġstorage ĠÐ´Ð»Ñı ĠÑĩ ÑĤ ÐµÐ½Ð¸Ñı ĠÐ¸ ĠÐ·Ð°Ð¿Ð¸Ñģ Ð¸ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġis External Storage Writable (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate : ĠString Ġ= ĠEnvironment . get External Storage State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Environment . MEDIA _ MOUNT ED . equals ( state )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġexport BD Files (): ĠFile Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ÐŁ Ð¾Ð» ÑĥÑĩ Ð¸Ð»Ð¸ ĠÐĳ ÐĶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Database Ġ= ĠRoom . database Builder ( this , ĠCar DB :: class . java , ĠCar DB . DB NAME ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Database . close () Ġ// ÐĹ Ð°Ðº ÑĢÑĭ Ð»Ð¸ ĠÑĦÐ°Ð¹Ð» ĠÐĶ Ðĳ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Name Ġ= ĠCar DB . DB NAME Ġ// ÐĶ Ð»Ñı ĠÐ¿Ð¾ÑģÐ» ÐµÐ´ ÑĥÑİ Ñī ÐµÐ³Ð¾ ĠÐ´Ð¾Ð±Ð°Ð² Ð»ÐµÐ½Ð¸Ñı ĠÐ¾ Ðº Ð¾Ð½ Ñĩ Ð°Ð½Ð¸Ñı ĠÐ¸Ð¼ ÐµÐ½ ĠÑĦÐ°Ð¹Ð» Ð¾Ð² ĠÐĳ ÐĶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb file : ĠFile Ġ= Ġthis . get Database Path ( dbName ) Ġ// ÐŁ Ð¾Ð» ÑĥÑĩ Ð¸Ð»Ð¸ ĠÐ¿ Ñĥ ÑĤÑĮ ĠÐº ĠÐ¸ Ñģ ÑħÐ¾Ð´ Ð½Ð¾Ð¼ Ñĥ ĠÑĦÐ°Ð¹Ð» Ñĥ ĠÐĳ ÐĶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub dir Ġ= ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get External Files Dir ( null ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" DB s aves " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð¡ Ð¾Ð·Ð´ Ð°Ð½Ð¸Ðµ ĠÐ¿Ð¾Ð´ Ðº Ð°ÑĤ Ð°Ð» Ð¾Ð³ Ð° ĠÐ´Ð»Ñı ĠÑģÐ¾ Ñħ ÑĢÐ°Ð½ ÐµÐ½Ð¸Ñı ĠÐ± ÐµÐº Ð°Ð¿ Ð° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is External Storage Writable ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! subdir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub dir . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup DB Ġ= ĠFile ( subdir . path Ġ+ ĠFile . separator Ġ+ ĠCar DB . DB NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup W al DB Ġ= ĠFile ( subdir . path Ġ+ ĠFile . separator Ġ+ Ġ"$ dbName - wal ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup Sh m DB Ġ= ĠFile ( subdir . path Ġ+ ĠFile . separator Ġ+ Ġ"$ dbName - shm ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// DB ĠFile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource : ĠFile Channel Ġ= ĠFileInputStream ( db file ). getChannel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination : ĠFile Channel Ġ= ĠFileOutputStream ( backup DB ). getChannel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination . transfer From ( source , Ġ 0 , Ġsource . size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" File ", Ġ" BD : Ġ" Ġ+ Ġbackup DB ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Sh m ĠFile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Sh m : ĠFile Channel Ġ= ĠFileInputStream ("$ db file - shm "). getChannel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination Sh m : ĠFile Channel Ġ= ĠFileOutputStream ( backup Sh m DB ). getChannel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Sh m . transfer From ( source Sh m , Ġ 0 , Ġsource Sh m . size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Sh m . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Sh m . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" File ", Ġ" BD : Ġ" Ġ+ Ġbackup Sh m DB ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// W al ĠFile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource W al : ĠFile Channel Ġ= ĠFileInputStream ("$ db file - wal "). getChannel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination W al : ĠFile Channel Ġ= ĠFileOutputStream ( backup W al DB ). getChannel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination W al . transfer From ( source W al , Ġ 0 , Ġsource W al . size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource W al . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination W al . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" File ", Ġ" BD ĠW al : Ġ" Ġ+ Ġbackup W al DB ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Error ", Ġe . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= ĠZip (). zip Folder ( subdir ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzip File Ġ= Ġtemp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġzip File ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġimport BD Files ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ÐŁ Ð¾Ð» ÑĥÑĩ Ð¸Ð»Ð¸ ĠÐĳ ÐĶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp Database Ġ= ĠRoom . database Builder ( this , ĠCar DB :: class . java , ĠCar DB . DB NAME ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Database . close () Ġ// ÐĹ Ð°Ðº ÑĢÑĭ Ð»Ð¸ ĠÑĦÐ°Ð¹Ð» ĠÐĶ Ðĳ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Name Ġ= ĠCar DB . DB NAME Ġ// ÐĶ Ð»Ñı ĠÐ¿Ð¾ÑģÐ» ÐµÐ´ ÑĥÑİ Ñī ÐµÐ³Ð¾ ĠÐ´Ð¾Ð±Ð°Ð² Ð»ÐµÐ½Ð¸Ñı ĠÐ¾ Ðº Ð¾Ð½ Ñĩ Ð°Ð½Ð¸Ñı ĠÐ¸Ð¼ ÐµÐ½ ĠÑĦÐ°Ð¹Ð» Ð¾Ð² ĠÐĳ ÐĶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb file : ĠFile Ġ= Ġthis . get Database Path ( dbName ) Ġ// ÐŁ Ð¾Ð» ÑĥÑĩ Ð¸Ð»Ð¸ ĠÐ¿ Ñĥ ÑĤÑĮ ĠÐº ĠÐ¸ Ñģ ÑħÐ¾Ð´ Ð½Ð¾Ð¼ Ñĥ ĠÑĦÐ°Ð¹Ð» Ñĥ ĠÐĳ ÐĶ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub dir Ġ= ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . get External Files Dir ( null ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" DB s aves " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinternal Path Ġ= ĠFile ( db file . toString (). replace ( dbName , Ġ"")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ð¡ Ð¾Ð·Ð´ Ð°Ð½Ð¸Ðµ ĠÐ¿Ð¾Ð´ Ðº Ð°ÑĤ Ð°Ð» Ð¾Ð³ Ð° ĠÐ´Ð»Ñı ĠÑģÐ¾ Ñħ ÑĢÐ°Ð½ ÐµÐ½Ð¸Ñı ĠÐ± ÐµÐº Ð°Ð¿ Ð° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is External Storage Writable ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! subdir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub dir . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ÐĹ Ð°Ð¿ Ð¸Ñģ ÑĮ ĠÑĦÐ°Ð¹ Ð»Ð° ĠÐ¸Ð· ĠURI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout File Ġ= ĠFile ( subdir , Ġ" DB s aves . zip ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimport db Ġ= ĠFileInputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . getContent Resolver (). open FileDescriptor ( uri , Ġ" r ") ?. getFile Descriptor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġout Ġ= ĠFileOutputStream ( out File ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠByteArray ( 1 0 2 4 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( import db . read ( buf ). also ({ Ġlen Ġ= Ġit Ġ}) Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . write ( buf , Ġ 0 , Ġlen !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport db . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ================================================================================ == ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZip (). un Zip ( out File . path , Ġsub dir . path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup DB Ġ= ĠFile ( subdir . path Ġ+ ĠFile . separator Ġ+ ĠCar DB . DB NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup W al DB Ġ= ĠFile ( subdir . path Ġ+ ĠFile . separator Ġ+ Ġ"$ dbName - wal ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackup Sh m DB Ġ= ĠFile ( subdir . path Ġ+ ĠFile . separator Ġ+ Ġ"$ dbName - shm ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// . db Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠFileInputStream ( backup DB ). channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination Ġ= ĠFileOutputStream ("$ internal Path /$ dbName "). channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination !!. transfer From ( source , Ġ 0 , Ġsource !!. size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// - wal Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource W al Ġ= ĠFileInputStream ( backup W al DB ). channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination W al Ġ= ĠFileOutputStream ("$ internal Path /$ dbName - wal "). channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination W al !!. transfer From ( source W al , Ġ 0 , Ġsource W al !!. size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource W al . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination W al . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// - shm Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Sh m Ġ= ĠFileInputStream ( backup Sh m DB ). channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdestination Sh m Ġ= ĠFileOutputStream ("$ internal Path /$ dbName - shm "). channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Sh m !!. transfer From ( source Sh m , Ġ 0 , Ġsource Sh m !!. size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Sh m . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Sh m . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Import ", Ġ" DB Ġsuccessfully ĠImport ed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Import ", Ġe . message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠC ars :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ