@ -1,11 +1,13 @@
package org.thoughtcrime.securesms.loki
package org.thoughtcrime.securesms.loki
import android.Manifest
import android.content.ClipData
import android.content.ClipData
import android.content.ClipboardManager
import android.content.ClipboardManager
import android.content.Context
import android.content.Context
import android.content.Intent
import android.content.Intent
import android.os.AsyncTask
import android.os.AsyncTask
import android.os.Bundle
import android.os.Bundle
import android.support.v4.app.FragmentManager
import android.view.View
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import android.widget.Toast
@ -19,6 +21,8 @@ import org.thoughtcrime.securesms.database.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.database.IdentityDatabase
import org.thoughtcrime.securesms.database.IdentityDatabase
import org.thoughtcrime.securesms.logging.Log
import org.thoughtcrime.securesms.logging.Log
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.qr.ScanListener
import org.thoughtcrime.securesms.util.Hex
import org.thoughtcrime.securesms.util.Hex
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.thoughtcrime.securesms.util.TextSecurePreferences
import org.whispersystems.curve25519.Curve25519
import org.whispersystems.curve25519.Curve25519
@ -32,7 +36,7 @@ import org.whispersystems.signalservice.loki.utilities.retryIfNeeded
import java.io.File
import java.io.File
import java.io.FileOutputStream
import java.io.FileOutputStream
class SeedActivity : BaseActionBarActivity ( ) , DeviceLinkingDelegate {
class SeedActivity : BaseActionBarActivity ( ) , DeviceLinkingDelegate , ScanListener {
private lateinit var languageFileDirectory : File
private lateinit var languageFileDirectory : File
private var mode = Mode . Register
private var mode = Mode . Register
set ( newValue ) { field = newValue ; updateUI ( ) }
set ( newValue ) { field = newValue ; updateUI ( ) }
@ -57,6 +61,23 @@ class SeedActivity : BaseActionBarActivity(), DeviceLinkingDelegate {
toggleRestoreModeButton . setOnClickListener { mode = Mode . Restore }
toggleRestoreModeButton . setOnClickListener { mode = Mode . Restore }
toggleLinkModeButton . setOnClickListener { mode = Mode . Link }
toggleLinkModeButton . setOnClickListener { mode = Mode . Link }
mainButton . setOnClickListener { handleMainButtonTapped ( ) }
mainButton . setOnClickListener { handleMainButtonTapped ( ) }
scanQRButton . setOnClickListener {
Permissions . with ( this )
. request ( Manifest . permission . CAMERA )
. ifNecessary ( )
. withPermanentDenialDialog ( getString ( R . string . fragment _scan _qr _code _camera _permission _dialog _message ) )
. onAllGranted {
val fragment = ScanQRCodeFragment ( )
fragment . mode = ScanQRCodeFragment . Mode . LinkDevice
fragment . scanListener = this
supportFragmentManager . beginTransaction ( ) . replace ( android . R . id . content , fragment ) . addToBackStack ( " QR " ) . commitAllowingStateLoss ( )
publicKeyEditText . clearFocus ( )
val inputMethodManager = getSystemService ( INPUT _METHOD _SERVICE ) as InputMethodManager
inputMethodManager . hideSoftInputFromWindow ( publicKeyEditText . windowToken , 0 )
}
. onAnyDenied { Toast . makeText ( this , R . string . fragment _scan _qr _code _camera _permission _dialog _message , Toast . LENGTH _SHORT ) . show ( ) }
. execute ( )
}
Analytics . shared . track ( " Seed Screen Viewed " )
Analytics . shared . track ( " Seed Screen Viewed " )
}
}
// endregion
// endregion
@ -106,6 +127,7 @@ class SeedActivity : BaseActionBarActivity(), DeviceLinkingDelegate {
mnemonicEditText . visibility = restoreModeVisibility
mnemonicEditText . visibility = restoreModeVisibility
linkExplanationTextView . visibility = linkModeVisibility
linkExplanationTextView . visibility = linkModeVisibility
publicKeyEditText . visibility = linkModeVisibility
publicKeyEditText . visibility = linkModeVisibility
scanQRButton . visibility = linkModeVisibility
toggleRegisterModeButton . visibility = if ( mode != Mode . Register ) View . VISIBLE else View . GONE
toggleRegisterModeButton . visibility = if ( mode != Mode . Register ) View . VISIBLE else View . GONE
toggleRestoreModeButton . visibility = if ( mode != Mode . Restore ) View . VISIBLE else View . GONE
toggleRestoreModeButton . visibility = if ( mode != Mode . Restore ) View . VISIBLE else View . GONE
toggleLinkModeButton . visibility = if ( mode != Mode . Link ) View . VISIBLE else View . GONE
toggleLinkModeButton . visibility = if ( mode != Mode . Link ) View . VISIBLE else View . GONE
@ -236,4 +258,14 @@ class SeedActivity : BaseActionBarActivity(), DeviceLinkingDelegate {
TextSecurePreferences . setPromptedPushRegistration ( this , false )
TextSecurePreferences . setPromptedPushRegistration ( this , false )
}
}
// endregion
// endregion
override fun onQrDataFound ( data : String ? ) {
runOnUiThread {
if ( data != null && PublicKeyValidation . isValid ( data . trim ( ) ) ) {
publicKeyEditText . setText ( data . trim ( ) )
supportFragmentManager . popBackStackImmediate ( " QR " , FragmentManager . POP _BACK _STACK _INCLUSIVE )
handleMainButtonTapped ( )
}
}
}
// endregion
}
}