diff --git a/.gitignore b/.gitignore index 39b6783..3cba989 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ *.apk *.ap_ +# Built libraries +*.aar +# *.so + # Files for the ART/Dalvik VM *.dex @@ -12,6 +16,7 @@ bin/ gen/ out/ +target/ # Gradle files .gradle/ @@ -19,6 +24,7 @@ build/ # Local configuration file (sdk path, etc) local.properties +.DS_Store # Proguard folder generated by Eclipse proguard/ @@ -34,17 +40,10 @@ captures/ # IntelliJ *.iml -.idea/workspace.xml -.idea/tasks.xml -.idea/gradle.xml -.idea/assetWizardSettings.xml -.idea/dictionaries -.idea/libraries -.idea/caches +.idea # Keystore files -# Uncomment the following line if you do not want to check your keystore files in. -#*.jks +*.jks # External native build folder generated in Android Studio 2.2 and later .externalNativeBuild diff --git a/zcash-android-wallet-app/README.md b/zcash-android-wallet-app/README.md deleted file mode 100644 index ed9eb2e..0000000 --- a/zcash-android-wallet-app/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Wallet App -Proof of concept for a zcash wallet. The Android app will leverage the SDK. diff --git a/zcash-android-wallet-app/app/.gitignore b/zcash-android-wallet-app/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/zcash-android-wallet-app/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/zcash-android-wallet-app/app/build.gradle b/zcash-android-wallet-app/app/build.gradle new file mode 100644 index 0000000..366c031 --- /dev/null +++ b/zcash-android-wallet-app/app/build.gradle @@ -0,0 +1,41 @@ +apply plugin: 'com.android.application' + +apply plugin: 'kotlin-android' + +apply plugin: 'kotlin-android-extensions' + +android { + compileSdkVersion 28 + buildToolsVersion "28.0.3" + defaultConfig { + applicationId "cash.z.wallet.app" + minSdkVersion 21 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation project(":sdk") + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.0.0-beta01' + implementation 'android.arch.navigation:navigation-fragment:1.0.0-alpha06' + implementation 'android.arch.navigation:navigation-ui:1.0.0-alpha06' + implementation 'android.arch.navigation:navigation-fragment-ktx:1.0.0-alpha06' + implementation 'android.arch.navigation:navigation-ui-ktx:1.0.0-alpha06' + implementation 'androidx.core:core-ktx:1.0.0' + implementation 'com.google.android.material:material:1.0.0-beta01' + implementation 'androidx.constraintlayout:constraintlayout:1.1.2' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test:runner:1.1.0-alpha4' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4' +} diff --git a/zcash-android-wallet-app/app/proguard-rules.pro b/zcash-android-wallet-app/app/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/zcash-android-wallet-app/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/zcash-android-wallet-app/app/src/androidTest/java/cash/z/wallet/app/ExampleInstrumentedTest.kt b/zcash-android-wallet-app/app/src/androidTest/java/cash/z/wallet/app/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..d4f36b1 --- /dev/null +++ b/zcash-android-wallet-app/app/src/androidTest/java/cash/z/wallet/app/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package cash.z.wallet.app + +import androidx.test.InstrumentationRegistry +import androidx.test.runner.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getTargetContext() + assertEquals("cash.z.wallet.app", appContext.packageName) + } +} diff --git a/zcash-android-wallet-app/app/src/main/AndroidManifest.xml b/zcash-android-wallet-app/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ee73090 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zcash-android-wallet-app/app/src/main/java/cash/z/wallet/app/MainActivity.kt b/zcash-android-wallet-app/app/src/main/java/cash/z/wallet/app/MainActivity.kt new file mode 100644 index 0000000..c707770 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/java/cash/z/wallet/app/MainActivity.kt @@ -0,0 +1,48 @@ +package cash.z.wallet.app + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import cash.z.wallet.sdk.jni.JniConverter +import com.google.android.material.bottomnavigation.BottomNavigationView +import kotlinx.android.synthetic.main.activity_main.* + +class MainActivity : AppCompatActivity() { + + var converter: JniConverter = JniConverter() + + private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item -> + when (item.itemId) { + R.id.navigation_send -> { + message.setText(R.string.title_send) + return@OnNavigationItemSelectedListener true + } + R.id.navigation_receive -> { + message.setText(R.string.title_recieve) + return@OnNavigationItemSelectedListener true + } + R.id.navigation_invoice -> { + val homeText = "${getString(R.string.title_invoice)}\n${getString(R.string.sdk_test_message)}\n${checkJni()}" + message.setText(homeText) + return@OnNavigationItemSelectedListener true + } + } + false + } + + private fun checkJni(): String { + try { + return when(converter.getMagicInt("forty-two")) { + 42 -> "Rust lib is connected!" + else -> "JNI call returned unexpected value" + } + } catch (t: Throwable) {} + return "Failure reading from JNI" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) + } +} diff --git a/zcash-android-wallet-app/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/zcash-android-wallet-app/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..485bbd3 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/zcash-android-wallet-app/app/src/main/res/drawable/ic_launcher_background.xml b/zcash-android-wallet-app/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..7ca0909 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/zcash-android-wallet-app/app/src/main/res/drawable/ic_qrcode_black_24dp.xml b/zcash-android-wallet-app/app/src/main/res/drawable/ic_qrcode_black_24dp.xml new file mode 100644 index 0000000..ecfee41 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/drawable/ic_qrcode_black_24dp.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/zcash-android-wallet-app/app/src/main/res/drawable/ic_receipt_black_24dp.xml b/zcash-android-wallet-app/app/src/main/res/drawable/ic_receipt_black_24dp.xml new file mode 100644 index 0000000..4714dde --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/drawable/ic_receipt_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/zcash-android-wallet-app/app/src/main/res/drawable/ic_send_black_24dp.xml b/zcash-android-wallet-app/app/src/main/res/drawable/ic_send_black_24dp.xml new file mode 100644 index 0000000..e145ca8 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/drawable/ic_send_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/zcash-android-wallet-app/app/src/main/res/layout/activity_main.xml b/zcash-android-wallet-app/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..090c654 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,34 @@ + + + + + + + + \ No newline at end of file diff --git a/zcash-android-wallet-app/app/src/main/res/menu/navigation.xml b/zcash-android-wallet-app/app/src/main/res/menu/navigation.xml new file mode 100644 index 0000000..57e02bc --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/menu/navigation.xml @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/zcash-android-wallet-app/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..bbd3e02 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/zcash-android-wallet-app/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..bbd3e02 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-hdpi/ic_launcher.png b/zcash-android-wallet-app/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..898f3ed Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/zcash-android-wallet-app/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..dffca36 Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-mdpi/ic_launcher.png b/zcash-android-wallet-app/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..64ba76f Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/zcash-android-wallet-app/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..dae5e08 Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/zcash-android-wallet-app/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..e5ed465 Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/zcash-android-wallet-app/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..14ed0af Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/zcash-android-wallet-app/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..b0907ca Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/zcash-android-wallet-app/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..d8ae031 Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/zcash-android-wallet-app/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..2c18de9 Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/zcash-android-wallet-app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..beed3cd Binary files /dev/null and b/zcash-android-wallet-app/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/zcash-android-wallet-app/app/src/main/res/navigation/mobile_navigation.xml b/zcash-android-wallet-app/app/src/main/res/navigation/mobile_navigation.xml new file mode 100644 index 0000000..8220304 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/navigation/mobile_navigation.xml @@ -0,0 +1,5 @@ + + + + diff --git a/zcash-android-wallet-app/app/src/main/res/values/colors.xml b/zcash-android-wallet-app/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..69b2233 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #008577 + #00574B + #D81B60 + diff --git a/zcash-android-wallet-app/app/src/main/res/values/dimens.xml b/zcash-android-wallet-app/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..47c8224 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/values/dimens.xml @@ -0,0 +1,5 @@ + + + 16dp + 16dp + diff --git a/zcash-android-wallet-app/app/src/main/res/values/strings.xml b/zcash-android-wallet-app/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..5f14330 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + Zcash Wallet + Send + Recieve + Invoice + diff --git a/zcash-android-wallet-app/app/src/main/res/values/styles.xml b/zcash-android-wallet-app/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..5885930 --- /dev/null +++ b/zcash-android-wallet-app/app/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/zcash-android-wallet-app/app/src/test/java/cash/z/wallet/app/ExampleUnitTest.kt b/zcash-android-wallet-app/app/src/test/java/cash/z/wallet/app/ExampleUnitTest.kt new file mode 100644 index 0000000..23d877d --- /dev/null +++ b/zcash-android-wallet-app/app/src/test/java/cash/z/wallet/app/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package cash.z.wallet.app + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} diff --git a/zcash-android-wallet-app/build.gradle b/zcash-android-wallet-app/build.gradle new file mode 100644 index 0000000..0527a64 --- /dev/null +++ b/zcash-android-wallet-app/build.gradle @@ -0,0 +1,28 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext.kotlin_version = '1.2.71' + repositories { + google() + jcenter() + + } + dependencies { + classpath 'com.android.tools.build:gradle:3.3.0-alpha12' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/zcash-android-wallet-app/gradle.properties b/zcash-android-wallet-app/gradle.properties new file mode 100644 index 0000000..c73d239 --- /dev/null +++ b/zcash-android-wallet-app/gradle.properties @@ -0,0 +1,19 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true diff --git a/zcash-android-wallet-app/gradle/wrapper/gradle-wrapper.jar b/zcash-android-wallet-app/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..f6b961f Binary files /dev/null and b/zcash-android-wallet-app/gradle/wrapper/gradle-wrapper.jar differ diff --git a/zcash-android-wallet-app/gradle/wrapper/gradle-wrapper.properties b/zcash-android-wallet-app/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..0ff6d98 --- /dev/null +++ b/zcash-android-wallet-app/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Oct 08 16:02:00 EDT 2018 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip diff --git a/zcash-android-wallet-app/gradlew b/zcash-android-wallet-app/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/zcash-android-wallet-app/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/zcash-android-wallet-app/gradlew.bat b/zcash-android-wallet-app/gradlew.bat new file mode 100644 index 0000000..e95643d --- /dev/null +++ b/zcash-android-wallet-app/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/zcash-android-wallet-app/sdk b/zcash-android-wallet-app/sdk new file mode 120000 index 0000000..b694fe5 --- /dev/null +++ b/zcash-android-wallet-app/sdk @@ -0,0 +1 @@ +../zcash-android-wallet-sdk-poc \ No newline at end of file diff --git a/zcash-android-wallet-app/settings.gradle b/zcash-android-wallet-app/settings.gradle new file mode 100644 index 0000000..228642e --- /dev/null +++ b/zcash-android-wallet-app/settings.gradle @@ -0,0 +1 @@ +include ':app', ':sdk' diff --git a/zcash-android-wallet-sdk-poc/build.gradle b/zcash-android-wallet-sdk-poc/build.gradle new file mode 100644 index 0000000..026dc5f --- /dev/null +++ b/zcash-android-wallet-sdk-poc/build.gradle @@ -0,0 +1,40 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 28 + buildToolsVersion "28.0.3" + + + defaultConfig { + minSdkVersion 16 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + + implementation 'com.android.support:appcompat-v7:28.0.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} +repositories { + mavenCentral() +} diff --git a/zcash-android-wallet-sdk-poc/proguard-rules.pro b/zcash-android-wallet-sdk-poc/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/zcash-android-wallet-sdk-poc/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/zcash-android-wallet-sdk-poc/src/androidTest/java/cash/z/wallet/sdk/ExampleInstrumentedTest.java b/zcash-android-wallet-sdk-poc/src/androidTest/java/cash/z/wallet/sdk/ExampleInstrumentedTest.java new file mode 100644 index 0000000..3a330ad --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/androidTest/java/cash/z/wallet/sdk/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package cash.z.wallet.sdk; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("cash.z.wallet.sdk.test", appContext.getPackageName()); + } +} diff --git a/zcash-android-wallet-sdk-poc/src/main/AndroidManifest.xml b/zcash-android-wallet-sdk-poc/src/main/AndroidManifest.xml new file mode 100644 index 0000000..fdcda29 --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/zcash-android-wallet-sdk-poc/src/main/java/cash/z/wallet/sdk/jni/JniConverter.kt b/zcash-android-wallet-sdk-poc/src/main/java/cash/z/wallet/sdk/jni/JniConverter.kt new file mode 100644 index 0000000..6adf044 --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/java/cash/z/wallet/sdk/jni/JniConverter.kt @@ -0,0 +1,13 @@ +package cash.z.wallet.sdk.jni + +class JniConverter { + + external fun getMagicInt(value: String): Int + + companion object { + init { + System.loadLibrary("zcashwalletsdk") + } + } + +} \ No newline at end of file diff --git a/zcash-android-wallet-sdk-poc/src/main/jniLibs/arm64-v8a/libzcashwalletsdk.so b/zcash-android-wallet-sdk-poc/src/main/jniLibs/arm64-v8a/libzcashwalletsdk.so new file mode 120000 index 0000000..4f7703b --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/jniLibs/arm64-v8a/libzcashwalletsdk.so @@ -0,0 +1 @@ +../../rust/target/aarch64-linux-android/release/libzcashwalletsdk.so \ No newline at end of file diff --git a/zcash-android-wallet-sdk-poc/src/main/jniLibs/armeabi-v7a/libzcashwalletsdk.so b/zcash-android-wallet-sdk-poc/src/main/jniLibs/armeabi-v7a/libzcashwalletsdk.so new file mode 120000 index 0000000..200778b --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/jniLibs/armeabi-v7a/libzcashwalletsdk.so @@ -0,0 +1 @@ +../../rust/target/armv7-linux-androideabi/release/libzcashwalletsdk.so \ No newline at end of file diff --git a/zcash-android-wallet-sdk-poc/src/main/jniLibs/x86/libzcashwalletsdk.so b/zcash-android-wallet-sdk-poc/src/main/jniLibs/x86/libzcashwalletsdk.so new file mode 120000 index 0000000..58a26c8 --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/jniLibs/x86/libzcashwalletsdk.so @@ -0,0 +1 @@ +../../rust/target/i686-linux-android/release/libzcashwalletsdk.so \ No newline at end of file diff --git a/zcash-android-wallet-sdk-poc/src/main/res/values/strings.xml b/zcash-android-wallet-sdk-poc/src/main/res/values/strings.xml new file mode 100644 index 0000000..2ecbf2e --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Library linking is working! + diff --git a/zcash-android-wallet-sdk-poc/src/main/rust/Cargo.lock b/zcash-android-wallet-sdk-poc/src/main/rust/Cargo.lock new file mode 100644 index 0000000..a7c017e --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/rust/Cargo.lock @@ -0,0 +1,177 @@ +[[package]] +name = "ascii" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "byteorder" +version = "1.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "cfg-if" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "combine" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ascii 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "error-chain" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "jni" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cesu8 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "combine 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)", + "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "jni-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.43" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "log" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "log" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "same-file" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "walkdir" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "same-file 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "zcash-wallet-sdk-poc" +version = "0.0.1" +dependencies = [ + "jni 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum ascii 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae7d751998c189c1d4468cf0a39bb2eae052a9c58d50ebb3b9591ee3813ad50" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781" +"checksum cesu8 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +"checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3" +"checksum combine 2.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1645a65a99c7c8d345761f4b75a6ffe5be3b3b27a93ee731fccc5050ba6be97c" +"checksum error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3" +"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +"checksum jni 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ef6a7c128e004695664548814f96ea78b458d94e52eb88c42a3b1d4e9a14ac1e" +"checksum jni-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +"checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d" +"checksum log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +"checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f" +"checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd" +"checksum same-file 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "10f7794e2fda7f594866840e95f5c5962e886e228e68b6505885811a94dd728c" +"checksum walkdir 2.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "af464bc7be7b785c7ac72e266a6b67c4c9070155606f51655a650a6686204e35" +"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "afc5508759c5bf4285e61feb862b6083c8480aec864fa17a81fdec6f69b461ab" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/zcash-android-wallet-sdk-poc/src/main/rust/Cargo.toml b/zcash-android-wallet-sdk-poc/src/main/rust/Cargo.toml new file mode 100644 index 0000000..2e8f830 --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/rust/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "zcash-wallet-sdk-poc" +version = "0.0.1" +authors = ["Kevin Gorham "] +description = "Simple PoC that rust can work with protobufs over JNO" +publish = false + +[dependencies] +rand = "0.4" + +[target.'cfg(target_os="android")'.dependencies] +jni = { version = "0.9", default-features = false } + +[lib] +name = "zcashwalletsdk" +path = "zcash/jni/lib.rs" +crate-type = ["staticlib", "cdylib"] diff --git a/zcash-android-wallet-sdk-poc/src/main/rust/build.sh b/zcash-android-wallet-sdk-poc/src/main/rust/build.sh new file mode 100755 index 0000000..8206331 --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/rust/build.sh @@ -0,0 +1,3 @@ +cargo build --target aarch64-linux-android --release +cargo build --target i686-linux-android --release +cargo build --target armv7-linux-androideabi --release \ No newline at end of file diff --git a/zcash-android-wallet-sdk-poc/src/main/rust/zcash/jni/lib.rs b/zcash-android-wallet-sdk-poc/src/main/rust/zcash/jni/lib.rs new file mode 100644 index 0000000..2995328 --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/main/rust/zcash/jni/lib.rs @@ -0,0 +1,30 @@ +use std::os::raw::{c_char, c_int}; + +/// For now, this just returns a magic number +#[no_mangle] +pub extern "C" fn test_response(input: *const c_char) -> c_int { + let magic_number = 42; + magic_number +} + + +/// JNI interface +#[cfg(target_os="android")] +#[allow(non_snake_case)] +pub mod android { + extern crate jni; + + use super::*; + use self::jni::JNIEnv; + use self::jni::objects::{JClass, JString}; + use self::jni::sys::{jint, jlong}; + + #[no_mangle] + pub unsafe extern "C" fn Java_cash_z_wallet_sdk_jni_JniConverter_getMagicInt(env: JNIEnv, _: JClass, test_input: JString) -> jint { + let jvm_text = env.get_string(test_input).expect("unable to find text for test input"); + test_response(jvm_text.as_ptr()) + } +} + + + diff --git a/zcash-android-wallet-sdk-poc/src/test/java/cash/z/wallet/sdk/ExampleUnitTest.java b/zcash-android-wallet-sdk-poc/src/test/java/cash/z/wallet/sdk/ExampleUnitTest.java new file mode 100644 index 0000000..e335846 --- /dev/null +++ b/zcash-android-wallet-sdk-poc/src/test/java/cash/z/wallet/sdk/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package cash.z.wallet.sdk; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/zcash-android-wallet-sdk/README.md b/zcash-android-wallet-sdk/README.md deleted file mode 100644 index c9109b8..0000000 --- a/zcash-android-wallet-sdk/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Wallet SDK -Proof of concept for an SDK to support the Android wallet app. \ No newline at end of file