/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ */ Ċ Ċ package Ġcom . ul . ims . g mdl . reader . view model Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġcom . ul . ims . g mdl . ble offline transfer . utils . B le Utils Ċ import Ġcom . ul . ims . g mdl . cb or data . device Eng agement . Device Eng agement Ċ import Ġcom . ul . ims . g mdl . cb or data . security . Co se Key Ċ import Ġcom . ul . ims . g mdl . offline transfer . app Layer . I offline Transfer Ċ import Ġcom . ul . ims . g mdl . offline transfer . config . App Mode Ċ import Ġcom . ul . ims . g mdl . offline transfer . config . B le Service Mode Ċ import Ġcom . ul . ims . g mdl . offline transfer . data . DataTypes Ċ import Ġcom . ul . ims . g mdl . offline transfer . transport Layer . Transfer Channels Ċ import Ġcom . ul . ims . g mdl . offline transfer . utils . Resource Ċ import Ġcom . ul . ims . g mdl . reader . offline Transfer . Offline Transfer Manager Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġorg . jetbrains . ank o . ui Thread Ċ Ċ class ĠOff line Transfer Status ViewModel ( val Ġapp : ĠApplication ) Ġ: ĠAndroid ViewModel ( app ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġoffline Transfer Verifier : ĠI offline Transfer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġco se Key : ĠC ose Key ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlive Data Mer ger Ġ= ĠMed iator LiveData < Resource < Any >>() ĊĠĠĠ Ġprivate Ġvar Ġble Service Mode : ĠB le Service Mode ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġsetup WiFi Verifier ( ĊĠĠĠĠĠĠĠ Ġdevice Eng agement : ĠDevice Eng agement , ĊĠĠĠĠĠĠĠ Ġrequest Items : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġwifi Pass phrase : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco se Key Ġ= Ġdevice Eng agement . security ?. co se Key ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco se Key ?. let Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠOff line Transfer Manager . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. act As ( App Mode . VER IFIER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Context ( app . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set DataType ( DataTypes . CB OR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Transfer Channel ( Transfer Channels . WiFi Aware ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Wifi Pass phrase ( wifi Pass phrase ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Co se Key ( key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Transfer Verifier Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Transfer Verifier ?. setup Verifier ( key , Ġrequest Items , Ġdevice Eng agement ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Transfer Verifier ?. data ?. let Ġ{ Ġli ved ata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data Mer ger . add Source ( li ved ata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data Mer ger . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsetup B le Verifier ( ĊĠĠĠĠĠĠĠ Ġdevice Eng agement : ĠDevice Eng agement , Ġrequest Items : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġble Role : ĠB le Service Mode ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco se Key Ġ= Ġdevice Eng agement . security ?. co se Key ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġco se Key ?. let Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠOff line Transfer Manager . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. act As ( App Mode . VER IFIER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Context ( app . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set DataType ( DataTypes . CB OR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Transfer Channel ( Transfer Channels . BLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Co se Key ( key ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf ĠB le Service Mode Ġhas Ġnot Ġbeen Ġdetermined , Ġinfer Ġfrom ĠDevice Eng agement Ġstructure ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ble Role Ġ== ĠB le Service Mode . UNKNOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġble Transport Method Ġ= Ġdevice Eng agement . get BLE Transfer Method () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġble Transport Method ?. let Ġ{ Ġble Transport Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboth Ġmodes Ġare Ġsupported ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġble Service Mode Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ble Transport . ble Identification ?. central Client Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġble Transport . ble Identification ?. per ipheral Server Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġthe Ġm DL Ġsupports Ġboth Ġmodes , Ġthe Ġm DL Ġreader Ġshould Ġact Ġas ĠBLE Ġcentral Ġmode . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Service Mode . PER IP HER AL _ SERVER _ MODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonly Ġcentral Ġclient Ġmode Ġsupported ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ble Transport . ble Identification ?. central Client Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Service Mode . C ENTR AL _ CLIENT _ MODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġonly Ġperipheral Ġserver Ġmode Ġsupported ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Service Mode . PER IP HER AL _ SERVER _ MODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġble Service Mode Ġ= Ġble Role ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġble Service Mode ?. let Ġ{ Ġble Mode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is B le Mode Supported ( ble Mode )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set B le Service Mode ( ble Mode ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Transfer Verifier Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Transfer Verifier ?. setup Verifier ( key , Ġrequest Items , Ġdevice Eng agement ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Transfer Verifier ?. data ?. let Ġ{ Ġli ved ata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data Mer ger . add Source ( li ved ata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data Mer ger . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Transfer Data (): ĠLive Data < Resource < Any >> ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlive Data Mer ger ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffline Transfer Verifier ?. te ar Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis B le Mode Supported ( ble Service Mode : ĠB le Service Mode ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( ble Service Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB le Service Mode . PER IP HER AL _ SERVER _ MODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Utils . is Per ipheral Supported ( app . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB le Service Mode . C ENTR AL _ CLIENT _ MODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Utils . is Central Mode Supported ( app . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB le Service Mode . UNKNOWN Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }