Browse Source

Merge pull request #2 from mmeister1203/master

Update package naming.
chat
Duke Leto 5 years ago
committed by GitHub
parent
commit
fcf4c543f0
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      app/build.gradle
  2. 2
      app/src/androidTest/java/org/myhush/silentdragon/zqwandroid/ExampleInstrumentedTest.kt
  3. 108
      app/src/main/AndroidManifest.xml
  4. 40
      app/src/main/java/org/myhush/silentdragon/ConnectionManager.kt
  5. 90
      app/src/main/java/org/myhush/silentdragon/DataModel.kt
  6. 39
      app/src/main/java/org/myhush/silentdragon/MainActivity.kt
  7. 6
      app/src/main/java/org/myhush/silentdragon/QrReaderActivity.kt
  8. 2
      app/src/main/java/org/myhush/silentdragon/ReceiveActivity.kt
  9. 32
      app/src/main/java/org/myhush/silentdragon/SendActivity.kt
  10. 5
      app/src/main/java/org/myhush/silentdragon/SettingsActivity.kt
  11. 6
      app/src/main/java/org/myhush/silentdragon/SilentDragonApp.kt
  12. 11
      app/src/main/java/org/myhush/silentdragon/TransactionItemFragment.kt
  13. 8
      app/src/main/java/org/myhush/silentdragon/TxDetailsActivity.kt
  14. 7
      app/src/main/java/org/myhush/silentdragon/UnconfirmedTxItemFragment.kt
  15. 2
      app/src/main/res/layout/activity_main.xml
  16. 2
      app/src/main/res/layout/activity_receive.xml
  17. 2
      app/src/main/res/layout/activity_send.xml
  18. 2
      app/src/main/res/layout/activity_settings.xml
  19. 2
      app/src/main/res/layout/activity_tx_details.xml
  20. 2
      app/src/main/res/layout/content_main.xml
  21. 2
      app/src/main/res/layout/content_receive.xml
  22. 2
      app/src/main/res/layout/content_send.xml
  23. 2
      app/src/main/res/layout/content_tx_details.xml
  24. 2
      app/src/main/res/layout/fragment_transaction_item.xml
  25. 2
      app/src/main/res/layout/fragment_unconfirmed_tx_item.xml
  26. 2
      app/src/main/res/menu/menu_main.xml
  27. 2
      app/src/main/res/menu/menu_nav.xml
  28. 2
      app/src/main/res/menu/menu_qrcodereader.xml
  29. 2
      app/src/main/res/menu/menu_recieve.xml
  30. 2
      app/src/main/res/menu/menu_txdetails.xml
  31. 2
      app/src/test/java/org/myhush/silentdragon/zqwandroid/ExampleUnitTest.kt

4
app/build.gradle

@ -1,13 +1,11 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.adityapk.zcash.zqwandroid"
applicationId "org.myhush.silentdragon"
minSdkVersion 19
targetSdkVersion 28
versionCode 6

2
app/src/androidTest/java/com/adityapk/zcash/zqwandroid/ExampleInstrumentedTest.kt → app/src/androidTest/java/org/myhush/silentdragon/zqwandroid/ExampleInstrumentedTest.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon.zqwandroid
import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4

108
app/src/main/AndroidManifest.xml

@ -1,74 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
package="com.adityapk.zcash.zqwandroid">
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.myhush.silentdragon">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<application
tools:replace="android:allowBackup"
android:name="com.adityapk.zcash.zqwandroid.ZQWApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
android:name=".SilentDragonApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:allowBackup">
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings"
android:screenOrientation="portrait"
android:parentActivityName=".SendActivity">
android:name="org.myhush.silentdragon.SettingsActivity"
android:label="@string/title_activity_settings"
android:parentActivityName="org.myhush.silentdragon.SendActivity"
android:screenOrientation="portrait">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.adityapk.zcash.zqwandroid.SendActivity"/>
</activity>
<activity android:name=".QrReaderActivity"
android:screenOrientation="portrait">
android:name="android.support.PARENT_ACTIVITY"
android:value=".SendActivity" />
</activity>
<activity
android:name="org.myhush.silentdragon.QrReaderActivity"
android:screenOrientation="portrait"/>
<activity
android:name=".TxDetailsActivity"
android:label="@string/title_activity_tx_details"
android:screenOrientation="portrait"
android:parentActivityName=".MainActivity"
android:theme="@style/AppTheme.NoActionBar">
android:name="org.myhush.silentdragon.TxDetailsActivity"
android:label="@string/title_activity_tx_details"
android:parentActivityName="org.myhush.silentdragon.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.adityapk.zcash.zqwandroid.MainActivity"/>
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
android:name="org.myhush.silentdragon.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ReceiveActivity"
android:label="@string/title_activity_receive"
android:parentActivityName=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
android:name="org.myhush.silentdragon.ReceiveActivity"
android:label="@string/title_activity_receive"
android:parentActivityName="org.myhush.silentdragon.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.adityapk.zcash.zqwandroid.MainActivity"/>
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity
android:name=".SendActivity"
android:label="@string/title_activity_send"
android:launchMode="singleTop"
android:parentActivityName=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
android:name="org.myhush.silentdragon.SendActivity"
android:label="@string/title_activity_send"
android:launchMode="singleTop"
android:parentActivityName="org.myhush.silentdragon.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.adityapk.zcash.zqwandroid.MainActivity"/>
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
</application>

40
app/src/main/java/com/adityapk/zcash/zqwandroid/ConnectionManager.kt → app/src/main/java/org/myhush/silentdragon/ConnectionManager.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.content.Intent
import android.util.Log
@ -26,7 +26,8 @@ object ConnectionManager {
// Attempt a connection to the server. If there is no saved connection, we'll set the connection status
// to None
private fun makeConnection(directConn : Boolean = true) {
val connString = DataModel.getConnString(ZQWApp.appContext!!)
val connString =
DataModel.getConnString(SilentDragonApp.appContext!!)
if (connString.isNullOrBlank()) {
// The user might have just disconnected, so make sure we are disconnected
@ -54,7 +55,8 @@ object ConnectionManager {
// If direct connection, then connect to the URL in connection string
if (directConn) {
// Update status to connecting, so we can update the UI
DataModel.connStatus = DataModel.ConnectionStatus.CONNECTING
DataModel.connStatus =
DataModel.ConnectionStatus.CONNECTING
println("Connstatus = connecting")
val client = OkHttpClient.Builder().connectTimeout(2, TimeUnit.SECONDS).build()
@ -64,7 +66,8 @@ object ConnectionManager {
DataModel.ws = client.newWebSocket(request, listener)
} else {
// Connect to the wormhole
DataModel.connStatus = DataModel.ConnectionStatus.CONNECTING
DataModel.connStatus =
DataModel.ConnectionStatus.CONNECTING
println("Connstatus = connecting")
@ -85,14 +88,14 @@ object ConnectionManager {
val i = Intent(DATA_SIGNAL)
i.putExtra("action", "refresh")
i.putExtra("finished", finished)
ZQWApp.appContext?.sendBroadcast(i)
SilentDragonApp.appContext?.sendBroadcast(i)
}
fun sendUpdateDataSignal(updateTxns: Boolean = false) {
val i = Intent(DATA_SIGNAL)
i.putExtra("action", "newdata")
i.putExtra("updateTxns", updateTxns)
ZQWApp.appContext?.sendBroadcast(i)
SilentDragonApp.appContext?.sendBroadcast(i)
}
fun sendErrorSignal(msg: String? = null, doDisconnect: Boolean = false) {
@ -100,7 +103,7 @@ object ConnectionManager {
i.putExtra("action", "error")
i.putExtra("msg", msg)
i.putExtra("doDisconnect", doDisconnect)
ZQWApp.appContext?.sendBroadcast(i)
SilentDragonApp.appContext?.sendBroadcast(i)
}
@ -110,7 +113,8 @@ object ConnectionManager {
override fun onOpen(webSocket: WebSocket, response: Response) {
Log.d(TAG, "Opened Websocket")
DataModel.connStatus = DataModel.ConnectionStatus.CONNECTED
DataModel.connStatus =
DataModel.ConnectionStatus.CONNECTED
println("Connstatus = connected")
// If direct connection, start making API calls to get data.
@ -123,7 +127,9 @@ object ConnectionManager {
// Delay sending the API calls a bit to let the register call finish
Timer().schedule(object : TimerTask() {
override fun run() { DataModel.makeAPICalls()}}, 100)
override fun run() {
DataModel.makeAPICalls()
}}, 100)
}
}
@ -136,7 +142,10 @@ object ConnectionManager {
val r = DataModel.parseResponse(text!!)
if (r.displayMsg != null) {
sendErrorSignal(r.displayMsg, r.doDisconnect)
sendErrorSignal(
r.displayMsg,
r.doDisconnect
)
if (r.doDisconnect) {
// We don't pass a reason here, because we already sent the error signal above
@ -154,7 +163,8 @@ object ConnectionManager {
}
override fun onClosing(webSocket: WebSocket, code: Int, reason: String?) {
DataModel.connStatus = DataModel.ConnectionStatus.DISCONNECTED
DataModel.connStatus =
DataModel.ConnectionStatus.DISCONNECTED
println("Connstatus = disconnected")
Log.i(TAG,"Closing : $code / $reason")
@ -166,7 +176,8 @@ object ConnectionManager {
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
Log.e(TAG,"Failed $t")
DataModel.connStatus = DataModel.ConnectionStatus.DISCONNECTED
DataModel.connStatus =
DataModel.ConnectionStatus.DISCONNECTED
val allowInternet = DataModel.getAllowInternet() && DataModel.getGlobalAllowInternet()
@ -190,7 +201,10 @@ object ConnectionManager {
makeConnection(false)
} else {
// Not a direct connection (or we're not allowed to connect to internet) and there was a failure.
sendErrorSignal(t.localizedMessage, true)
sendErrorSignal(
t.localizedMessage,
true
)
sendRefreshSignal(true)
}
}

90
app/src/main/java/com/adityapk/zcash/zqwandroid/DataModel.kt → app/src/main/java/org/myhush/silentdragon/DataModel.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.content.Context
import android.util.Log
@ -35,7 +35,8 @@ object DataModel {
CONNECTED(3)
}
var connStatus: ConnectionStatus = ConnectionStatus.DISCONNECTED
var connStatus: ConnectionStatus =
ConnectionStatus.DISCONNECTED
fun clear() {
mainResponseData = null
@ -63,7 +64,11 @@ object DataModel {
// Check if it has errored out
if (json.containsKey("error")) {
return ParseResponse(false, "Couldn't connect: ${json["error"].toString()}", true)
return ParseResponse(
false,
"Couldn't connect: ${json["error"].toString()}",
true
)
}
if (json.containsKey("ping")) {
@ -72,14 +77,25 @@ object DataModel {
// Check if input string is encrypted
if (json.containsKey("nonce")) {
val decrypted = decrypt(json["nonce"].toString(), json["payload"].toString())
val decrypted = decrypt(
json["nonce"].toString(),
json["payload"].toString()
)
if (decrypted.startsWith("error")) {
return ParseResponse(false, "Encryption Error: $decrypted", true)
return ParseResponse(
false,
"Encryption Error: $decrypted",
true
)
}
return parseDecryptedResponse(decrypted)
} else {
// The input is unrecognized
return ParseResponse(false, "Unknown message received, JSON was missing a 'nonce'", true)
return ParseResponse(
false,
"Unknown message received, JSON was missing a 'nonce'",
true
)
}
}
@ -93,7 +109,11 @@ object DataModel {
mainResponseData = Klaxon().parse<MainResponse>(response)
// Call the next API call
ws?.send(encrypt(json { obj("command" to "getTransactions") }.toJsonString()))
ws?.send(
encrypt(
json { obj("command" to "getTransactions") }.toJsonString()
)
)
return ParseResponse()
}
"getTransactions" -> {
@ -105,7 +125,8 @@ object DataModel {
tx.string("memo") ?: "",
tx.string("address") ?: "",
tx.string("txid") ?: "",
tx.long("confirmations") ?: 0)
tx.long("confirmations") ?: 0
)
}
return ParseResponse(true)
}
@ -115,11 +136,17 @@ object DataModel {
}
"sendTxSubmitted" -> {
val txid = json.string("txid")
return ParseResponse(false, "Tx submitted: $txid")
return ParseResponse(
false,
"Tx submitted: $txid"
)
}
"sendTxFailed" -> {
val err = json.string("err")
return ParseResponse(false, "Tx displayMsg: $err")
return ParseResponse(
false,
"Tx displayMsg: $err"
)
}
else -> {
Log.e(TAG, "Unknown command ${json.string("command")}")
@ -148,7 +175,11 @@ object DataModel {
)) }
Log.w(TAG, payload.toJsonString(true))
ws?.send(encrypt(payload.toJsonString()))
ws?.send(
encrypt(
payload.toJsonString()
)
)
}
fun makeAPICalls() {
@ -159,7 +190,11 @@ object DataModel {
// We make only the first API call here. The subsequent ones are made in parseResponsegit (), when this
// call returns a reply
val phoneName = "${android.os.Build.MANUFACTURER} ${android.os.Build.MODEL}"
ws?.send(encrypt(json { obj("command" to "getInfo", "name" to phoneName) }.toJsonString()))
ws?.send(
encrypt(
json { obj("command" to "getInfo", "name" to phoneName) }.toJsonString()
)
)
}
}
@ -199,12 +234,14 @@ object DataModel {
val noncebin = nonceHex.hexStringToByteArray(Sodium.crypto_secretbox_noncebytes())
val result = Sodium.crypto_secretbox_open_easy(decrypted, encbin, encsize, noncebin, getSecret())
val result = Sodium.crypto_secretbox_open_easy(decrypted, encbin, encsize, noncebin,
getSecret()
)
if (result != 0) {
return "error: Decryption Error"
}
Log.i(this.TAG, "Decrypted to: ${String(decrypted).replace("\n", " ")}")
Log.i(TAG, "Decrypted to: ${String(decrypted).replace("\n", " ")}")
updateRemoteNonce(nonceHex)
return String(decrypted)
}
@ -226,7 +263,9 @@ object DataModel {
// Increment nonce
val localNonce = incAndGetLocalNonce()
val ret = Sodium.crypto_secretbox_easy(encrypted, msg, msg.size, localNonce, getSecret())
val ret = Sodium.crypto_secretbox_easy(encrypted, msg, msg.size, localNonce,
getSecret()
)
if (ret != 0) {
println("Encryption failed")
}
@ -241,7 +280,7 @@ object DataModel {
}
private fun checkRemoteNonce(remoteNonce: String): Boolean {
val settings = ZQWApp.appContext!!.getSharedPreferences("Secret", 0)
val settings = SilentDragonApp.appContext!!.getSharedPreferences("Secret", 0)
val prevNonceHex = settings.getString("remotenonce", "00".repeat(Sodium.crypto_secretbox_noncebytes()))!!
// The problem is the nonces are hex encoded in little endian, but the BigDecimal contructor expects the nonces
@ -252,14 +291,14 @@ object DataModel {
}
private fun updateRemoteNonce(remoteNonce: String) {
val settings = ZQWApp.appContext!!.getSharedPreferences("Secret", 0)
val settings = SilentDragonApp.appContext!!.getSharedPreferences("Secret", 0)
val editor = settings.edit()
editor.putString("remotenonce", remoteNonce)
editor.apply()
}
private fun incAndGetLocalNonce() : ByteArray {
val settings = ZQWApp.appContext!!.getSharedPreferences("Secret", 0)
val settings = SilentDragonApp.appContext!!.getSharedPreferences("Secret", 0)
val nonceHex = settings.getString("localnonce", "00".repeat(Sodium.crypto_secretbox_noncebytes()))
val nonce = nonceHex!!.hexStringToByteArray(Sodium.crypto_secretbox_noncebytes())
@ -278,7 +317,8 @@ object DataModel {
return null
val tobin1 = ByteArray(Sodium.crypto_hash_sha256_bytes())
Sodium.crypto_hash_sha256(tobin1, getSecret(), getSecret()!!.size)
Sodium.crypto_hash_sha256(tobin1,
getSecret(), getSecret()!!.size)
val tobin2 = ByteArray(Sodium.crypto_hash_sha256_bytes())
Sodium.crypto_hash_sha256(tobin2, tobin1, tobin1.size)
@ -292,7 +332,7 @@ object DataModel {
return
}
val settings = ZQWApp.appContext!!.getSharedPreferences("Secret", 0)
val settings = SilentDragonApp.appContext!!.getSharedPreferences("Secret", 0)
val editor = settings.edit()
editor.putString("secret", secretHex)
@ -302,7 +342,7 @@ object DataModel {
}
fun getSecret() : ByteArray? {
val settings = ZQWApp.appContext!!.getSharedPreferences("Secret", 0)
val settings = SilentDragonApp.appContext!!.getSharedPreferences("Secret", 0)
val secretHex = settings.getString("secret", "")
if (secretHex.isNullOrEmpty()) {
@ -314,7 +354,7 @@ object DataModel {
fun setGlobalAllowInternet(allow: Boolean) {
val settings = ZQWApp.appContext!!.getSharedPreferences("Secret", 0)
val settings = SilentDragonApp.appContext!!.getSharedPreferences("Secret", 0)
val editor = settings.edit()
editor.putBoolean("globalallowinternet", allow)
@ -322,12 +362,12 @@ object DataModel {
}
fun getGlobalAllowInternet(): Boolean {
val settings = ZQWApp.appContext!!.getSharedPreferences("Secret", 0)
val settings = SilentDragonApp.appContext!!.getSharedPreferences("Secret", 0)
return settings.getBoolean("globalallowinternet", true)
}
fun setAllowInternet(allow: Boolean) {
val settings = ZQWApp.appContext!!.getSharedPreferences("Secret", 0)
val settings = SilentDragonApp.appContext!!.getSharedPreferences("Secret", 0)
val editor = settings.edit()
editor.putBoolean("allowinternet", allow)
@ -335,7 +375,7 @@ object DataModel {
}
fun getAllowInternet(): Boolean {
val settings = ZQWApp.appContext!!.getSharedPreferences("Secret", 0)
val settings = SilentDragonApp.appContext!!.getSharedPreferences("Secret", 0)
return settings.getBoolean("allowinternet", false)
}

39
app/src/main/java/com/adityapk/zcash/zqwandroid/MainActivity.kt → app/src/main/java/org/myhush/silentdragon/MainActivity.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.annotation.SuppressLint
import android.app.Activity
@ -19,15 +19,17 @@ import android.widget.Button
import android.widget.ScrollView
import android.widget.TextView
import android.widget.Toast
import com.adityapk.zcash.zqwandroid.DataModel.ConnectionStatus
import com.adityapk.zcash.zqwandroid.DataModel.connStatus
import org.myhush.silentdragon.DataModel.ConnectionStatus
import org.myhush.silentdragon.DataModel.connStatus
import com.beust.klaxon.Klaxon
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.content_main.*
import java.text.DecimalFormat
class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInteractionListener , UnconfirmedTxItemFragment.OnFragmentInteractionListener{
class MainActivity : AppCompatActivity(),
TransactionItemFragment.OnFragmentInteractionListener,
UnconfirmedTxItemFragment.OnFragmentInteractionListener {
override fun onFragmentInteraction(uri: Uri) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
@ -47,8 +49,12 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
btnConnect.setOnClickListener {
val intent = Intent(this, QrReaderActivity::class.java)
intent.putExtra("REQUEST_CODE", QrReaderActivity.REQUEST_CONNDATA)
startActivityForResult(intent, QrReaderActivity.REQUEST_CONNDATA)
intent.putExtra("REQUEST_CODE",
QrReaderActivity.REQUEST_CONNDATA
)
startActivityForResult(intent,
QrReaderActivity.REQUEST_CONNDATA
)
}
btnReconnect.setOnClickListener {
@ -108,7 +114,7 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
swiperefresh.isRefreshing = false
// Hide the reconnect button if there is no connection string
if (DataModel.getConnString(ZQWApp.appContext!!).isNullOrBlank() ||
if (DataModel.getConnString(SilentDragonApp.appContext!!).isNullOrBlank() ||
DataModel.getSecret() == null) {
btnReconnect.visibility = Button.GONE
lblConnectionOr.visibility = TextView.GONE
@ -198,7 +204,10 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
for (tx in unconfirmed) {
fragTx.add(
txList.id ,
UnconfirmedTxItemFragment.newInstance(Klaxon().toJsonString(tx), ""),
UnconfirmedTxItemFragment.newInstance(
Klaxon().toJsonString(tx),
""
),
"tag1"
)
}
@ -211,7 +220,10 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
for (tx in confirmed) {
fragTx.add(
txList.id,
TransactionItemFragment.newInstance(Klaxon().toJsonString(tx), oddeven),
TransactionItemFragment.newInstance(
Klaxon().toJsonString(tx),
oddeven
),
"tag1"
)
oddeven = if (oddeven == "odd") "even" else "odd"
@ -312,8 +324,13 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
val allowInternetConnections = if (conComponents.size == 3) conComponents[2] == "1" else false
DataModel.setSecretHex(secretHex)
DataModel.setConnString(conString, applicationContext)
DataModel.setAllowInternet(allowInternetConnections)
DataModel.setConnString(
conString,
applicationContext
)
DataModel.setAllowInternet(
allowInternetConnections
)
ConnectionManager.refreshAllData()
}

6
app/src/main/java/com/adityapk/zcash/zqwandroid/QrReaderActivity.kt → app/src/main/java/org/myhush/silentdragon/QrReaderActivity.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.app.Activity
import android.content.Intent
@ -19,14 +19,10 @@ import com.google.android.gms.vision.barcode.Barcode
import com.google.android.gms.vision.barcode.BarcodeDetector
import kotlinx.android.synthetic.main.activity_qr_reader.*
import java.io.IOException
import android.R.string.cancel
import android.app.AlertDialog
import android.content.DialogInterface
import android.text.InputType
import android.widget.EditText
class QrReaderActivity : AppCompatActivity() {
companion object {

2
app/src/main/java/com/adityapk/zcash/zqwandroid/ReceiveActivity.kt → app/src/main/java/org/myhush/silentdragon/ReceiveActivity.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.content.ClipData
import android.content.ClipboardManager

32
app/src/main/java/com/adityapk/zcash/zqwandroid/SendActivity.kt → app/src/main/java/org/myhush/silentdragon/SendActivity.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.annotation.SuppressLint
import android.app.Activity
@ -50,8 +50,12 @@ class SendActivity : AppCompatActivity() {
imageButton.setOnClickListener { view ->
val intent = Intent(this, QrReaderActivity::class.java)
intent.putExtra("REQUEST_CODE", QrReaderActivity.REQUEST_ADDRESS)
startActivityForResult(intent, QrReaderActivity.REQUEST_ADDRESS)
intent.putExtra("REQUEST_CODE",
QrReaderActivity.REQUEST_ADDRESS
)
startActivityForResult(intent,
QrReaderActivity.REQUEST_ADDRESS
)
}
sendAddress.addTextChangedListener(object : TextWatcher {
@ -62,10 +66,14 @@ class SendActivity : AppCompatActivity() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
if (DataModel.isValidAddress(s.toString())) {
txtValidAddress.text = "\u2713 Valid address"
txtValidAddress.setTextColor(ContextCompat.getColor(applicationContext, R.color.colorPrimary))
txtValidAddress.setTextColor(ContextCompat.getColor(applicationContext,
R.color.colorPrimary
))
} else {
txtValidAddress.text = "Not a valid address"
txtValidAddress.setTextColor(ContextCompat.getColor(applicationContext, R.color.colorAccent))
txtValidAddress.setTextColor(ContextCompat.getColor(applicationContext,
R.color.colorAccent
))
}
if (s?.startsWith("t") == true) {
@ -114,9 +122,13 @@ class SendActivity : AppCompatActivity() {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
txtMemoSize.text = "${s?.length ?: 0} / 512"
if (s?.length ?: 0 > 512) {
txtMemoSize.setTextColor(ContextCompat.getColor(applicationContext, R.color.colorAccent))
txtMemoSize.setTextColor(ContextCompat.getColor(applicationContext,
R.color.colorAccent
))
} else {
txtMemoSize.setTextColor(ContextCompat.getColor(applicationContext, R.color.colorPrimary))
txtMemoSize.setTextColor(ContextCompat.getColor(applicationContext,
R.color.colorPrimary
))
}
}
})
@ -192,8 +204,10 @@ class SendActivity : AppCompatActivity() {
val memo = txtSendMemo.text.toString() + getReplyToAddressIfChecked(toAddr)
val intent = Intent(this, TxDetailsActivity::class.java)
val tx = DataModel.TransactionItem("confirm", 0, parsedAmt, memo,
toAddr, "", 0)
val tx = DataModel.TransactionItem(
"confirm", 0, parsedAmt, memo,
toAddr, "", 0
)
intent.putExtra("EXTRA_TXDETAILS", Klaxon().toJsonString(tx))
startActivityForResult(intent, REQUEST_CONFIRM)
}

5
app/src/main/java/com/adityapk/zcash/zqwandroid/SettingsActivity.kt → app/src/main/java/org/myhush/silentdragon/SettingsActivity.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
@ -32,7 +32,8 @@ class SettingsActivity : AppCompatActivity() {
}
fun updateUI() {
txtSettingsConnString.text = DataModel.getConnString(ZQWApp.appContext!!) ?: "Not Connected"
txtSettingsConnString.text = DataModel.getConnString(SilentDragonApp.appContext!!)
?: "Not Connected"
chkDisallowInternet.isChecked = !DataModel.getGlobalAllowInternet()

6
app/src/main/java/com/adityapk/zcash/zqwandroid/ZQWApp.kt → app/src/main/java/org/myhush/silentdragon/SilentDragonApp.kt

@ -1,13 +1,13 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.app.Application
import android.content.Context
class ZQWApp : Application() {
class SilentDragonApp : Application() {
override fun onCreate() {
super.onCreate()
ZQWApp.appContext = applicationContext
appContext = applicationContext
}
companion object {

11
app/src/main/java/com/adityapk/zcash/zqwandroid/TransactionItemFragment.kt → app/src/main/java/org/myhush/silentdragon/TransactionItemFragment.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.annotation.SuppressLint
import android.content.Context
@ -14,7 +14,6 @@ import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import com.beust.klaxon.Klaxon
import kotlinx.android.synthetic.main.fragment_transaction_item.*
import java.text.DateFormat
import java.text.DecimalFormat
import java.util.*
@ -74,10 +73,14 @@ class TransactionItemFragment : Fragment() {
if (tx?.type == "send") {
col.setImageResource(R.color.colorAccent)
amt.setTextColor(ContextCompat.getColor(view.context, R.color.colorAccent))
amt.setTextColor(ContextCompat.getColor(view.context,
R.color.colorAccent
))
} else {
col.setImageResource(R.color.colorPrimary)
amt.setTextColor(ContextCompat.getColor(view.context, R.color.colorPrimary))
amt.setTextColor(ContextCompat.getColor(view.context,
R.color.colorPrimary
))
}
if (param2 == "odd")

8
app/src/main/java/com/adityapk/zcash/zqwandroid/TxDetailsActivity.kt → app/src/main/java/org/myhush/silentdragon/TxDetailsActivity.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.annotation.SuppressLint
import android.app.Activity
@ -18,7 +18,6 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
class TxDetailsActivity : AppCompatActivity() {
private var tx : DataModel.TransactionItem? = null
@ -93,7 +92,10 @@ class TxDetailsActivity : AppCompatActivity() {
val lastPost = memo.trim().lastIndexOfAny("\r\n".toCharArray())
val lastWord = memo.substring(lastPost + 1)
return if (DataModel.isValidAddress(lastWord) && DataModel.isSaplingAddress(lastWord))
return if (DataModel.isValidAddress(lastWord) && DataModel.isSaplingAddress(
lastWord
)
)
lastWord
else
null

7
app/src/main/java/com/adityapk/zcash/zqwandroid/UnconfirmedTxItemFragment.kt → app/src/main/java/org/myhush/silentdragon/UnconfirmedTxItemFragment.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon
import android.content.Context
import android.content.Intent
@ -6,17 +6,12 @@ import android.net.Uri
import android.os.Bundle
import android.support.constraint.ConstraintLayout
import android.support.v4.app.Fragment
import android.support.v4.content.ContextCompat
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import com.beust.klaxon.Klaxon
import java.text.DateFormat
import java.text.DecimalFormat
import java.util.*
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER

2
app/src/main/res/layout/activity_main.xml

@ -5,7 +5,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
tools:context="org.myhush.silentdragon.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"

2
app/src/main/res/layout/activity_receive.xml

@ -5,7 +5,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ReceiveActivity">
tools:context="org.myhush.silentdragon.ReceiveActivity">
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"

2
app/src/main/res/layout/activity_send.xml

@ -5,7 +5,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SendActivity">
tools:context="org.myhush.silentdragon.SendActivity">
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"

2
app/src/main/res/layout/activity_settings.xml

@ -5,7 +5,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SettingsActivity">
tools:context="org.myhush.silentdragon.SettingsActivity">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"

2
app/src/main/res/layout/activity_tx_details.xml

@ -5,7 +5,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TxDetailsActivity">
tools:context="org.myhush.silentdragon.TxDetailsActivity">
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"

2
app/src/main/res/layout/content_main.xml

@ -7,7 +7,7 @@
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main"
tools:context=".MainActivity">
tools:context="org.myhush.silentdragon.MainActivity">
<ImageView
android:layout_width="0dp"

2
app/src/main/res/layout/content_receive.xml

@ -7,7 +7,7 @@
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_receive"
tools:context=".ReceiveActivity">
tools:context="org.myhush.silentdragon.ReceiveActivity">
<ImageView
android:layout_width="0dp"

2
app/src/main/res/layout/content_send.xml

@ -7,7 +7,7 @@
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_send"
tools:context=".SendActivity">
tools:context="org.myhush.silentdragon.SendActivity">
<ScrollView
android:layout_width="match_parent"

2
app/src/main/res/layout/content_tx_details.xml

@ -7,7 +7,7 @@
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_tx_details"
tools:context=".TxDetailsActivity">
tools:context="org.myhush.silentdragon.TxDetailsActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">

2
app/src/main/res/layout/fragment_transaction_item.xml

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".TransactionItemFragment" android:id="@+id/outlineLayout"
tools:context="org.myhush.silentdragon.TransactionItemFragment" android:id="@+id/outlineLayout"
android:background="@color/light_grey">
<!-- TODO: Update blank fragment layout -->

2
app/src/main/res/layout/fragment_unconfirmed_tx_item.xml

@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".UnconfirmedTxItemFragment" android:id="@+id/frameLayout">
tools:context="org.myhush.silentdragon.UnconfirmedTxItemFragment" android:id="@+id/frameLayout">
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent"

2
app/src/main/res/menu/menu_main.xml

@ -2,7 +2,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:compat="http://schemas.android.com/apk/res-auto"
tools:context="com.adityapk.zcash.zqwandroid.MainActivity">
tools:context="com.adityapk.zcash.zqwandroid.org.adityapk.zcash.zqwandroid.MainActivity">
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"

2
app/src/main/res/menu/menu_nav.xml

@ -1,7 +1,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.adityapk.zcash.zqwandroid.MainActivity">
tools:context="com.adityapk.zcash.zqwandroid.org.adityapk.zcash.zqwandroid.MainActivity">
<item android:id="@+id/action_send"
android:title="Send"
android:orderInCategory="300"

2
app/src/main/res/menu/menu_qrcodereader.xml

@ -2,7 +2,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:compat="http://schemas.android.com/apk/res-auto"
tools:context="com.adityapk.zcash.zqwandroid.QrReaderActivity">
tools:context="com.adityapk.zcash.zqwandroid.org.adityapk.zcash.zqwandroid.QrReaderActivity">
<item android:id="@+id/action_manual_input"
android:title="Manual Input"
android:orderInCategory="100"

2
app/src/main/res/menu/menu_recieve.xml

@ -2,7 +2,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:compat="http://schemas.android.com/apk/res-auto"
tools:context="com.adityapk.zcash.zqwandroid.ReceiveActivity">
tools:context="com.adityapk.zcash.zqwandroid.org.adityapk.zcash.zqwandroid.ReceiveActivity">
<item android:id="@+id/action_share"
android:title="Share"
android:orderInCategory="100"

2
app/src/main/res/menu/menu_txdetails.xml

@ -2,7 +2,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:compat="http://schemas.android.com/apk/res-auto"
tools:context="com.adityapk.zcash.zqwandroid.TxDetailsActivity">
tools:context="com.adityapk.zcash.zqwandroid.org.adityapk.zcash.zqwandroid.TxDetailsActivity">
<item android:id="@+id/action_view"
android:title="View"
android:orderInCategory="100"

2
app/src/test/java/com/adityapk/zcash/zqwandroid/ExampleUnitTest.kt → app/src/test/java/org/myhush/silentdragon/zqwandroid/ExampleUnitTest.kt

@ -1,4 +1,4 @@
package com.adityapk.zcash.zqwandroid
package org.myhush.silentdragon.zqwandroid
import org.junit.Test
Loading…
Cancel
Save