From 22666021f188efb2f8657140a3fe5db14626934f Mon Sep 17 00:00:00 2001 From: Severiano Jaramillo Date: Thu, 13 Dec 2018 11:24:18 -0600 Subject: [PATCH] - Add Navigation's SafeArgs plugin to the project, this plugin enables to pass arguments between fragments in a safe way. - Use the Navigation AAC to create the navigation from the Balances to the Send and Receive fragments, using Navigation's SafeArgs to activate the camera in SendTransactionFragment in the case the user tapped on the camera button instead ofjust the send button in the Balances. --- app/build.gradle | 2 +- .../fragments/BalancesFragment.kt | 23 ++++++++++--- .../fragments/SendTransactionFragment.kt | 5 ++- app/src/main/res/layout/fragment_balances.xml | 1 - .../main/res/navigation/mobile_navigation.xml | 32 +++++++++++++++++++ build.gradle | 1 + 6 files changed, 57 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b01f760..555ae82 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: "androidx.navigation.safeargs" apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' @@ -52,7 +53,6 @@ dependencies { implementation "android.arch.navigation:navigation-fragment-ktx:$nav_version" implementation "android.arch.navigation:navigation-ui-ktx:$nav_version" - implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1' implementation 'org.bitcoinj:bitcoinj-core:0.14.3' diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/BalancesFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/BalancesFragment.kt index 955aa12..2d3fed9 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/BalancesFragment.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/BalancesFragment.kt @@ -6,19 +6,17 @@ import android.preference.PreferenceManager import android.view.* import androidx.fragment.app.Fragment import androidx.lifecycle.Observer +import androidx.navigation.Navigation +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration -import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import cy.agorise.bitsybitshareswallet.R import cy.agorise.bitsybitshareswallet.adapters.BalancesAdapter -import cy.agorise.bitsybitshareswallet.adapters.TransfersDetailsAdapter import cy.agorise.bitsybitshareswallet.database.entities.UserAccount import cy.agorise.bitsybitshareswallet.database.joins.BalanceDetail -import cy.agorise.bitsybitshareswallet.database.joins.TransferDetail import cy.agorise.bitsybitshareswallet.utils.Constants import cy.agorise.bitsybitshareswallet.viewmodels.BalanceDetailViewModel -import cy.agorise.bitsybitshareswallet.viewmodels.TransferDetailViewModel import cy.agorise.bitsybitshareswallet.viewmodels.UserAccountViewModel import kotlinx.android.synthetic.main.fragment_balances.* @@ -60,6 +58,23 @@ class BalancesFragment : Fragment() { mBalanceDetailViewModel.getAll().observe(this, Observer> { balancesDetails -> balancesAdapter.replaceAll(balancesDetails) }) + + // Navigate to the Receive Transaction Fragment + fabReceiveTransaction.setOnClickListener ( + Navigation.createNavigateOnClickListener(R.id.receive_action) + ) + + // Navigate to the Send Transaction Fragment without activating the camera + fabSendTransaction.setOnClickListener( + Navigation.createNavigateOnClickListener(R.id.send_action) + ) + + // Navigate to the Send Transaction Fragment using Navigation's SafeArgs to activate the camera + fabSendTransactionCamera.setOnClickListener { + val action = BalancesFragmentDirections.sendActionCamera() + action.setOpenCamera(true) + findNavController().navigate(action) + } } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { diff --git a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SendTransactionFragment.kt b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SendTransactionFragment.kt index 0bc7c24..93a52f9 100644 --- a/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SendTransactionFragment.kt +++ b/app/src/main/java/cy/agorise/bitsybitshareswallet/fragments/SendTransactionFragment.kt @@ -122,7 +122,10 @@ class SendTransactionFragment : Fragment(), ZXingScannerView.ResultHandler, Serv if (userId != "") mUserAccount = UserAccount(userId) - verifyCameraPermission() + // Use Navigation SafeArgs to decide if we should activate or not the camera feed + val safeArgs = SendTransactionFragmentArgs.fromBundle(arguments) + if (safeArgs.openCamera) + verifyCameraPermission() fabOpenCamera.setOnClickListener { if (isCameraPreviewVisible) stopCameraPreview() else verifyCameraPermission() } diff --git a/app/src/main/res/layout/fragment_balances.xml b/app/src/main/res/layout/fragment_balances.xml index dcd4724..d19c24a 100644 --- a/app/src/main/res/layout/fragment_balances.xml +++ b/app/src/main/res/layout/fragment_balances.xml @@ -54,7 +54,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" app:fabSize="mini" - app:maxImageSize="18dp" android:src="@drawable/ic_camera" android:backgroundTint="@color/colorSend" app:layout_constraintTop_toTopOf="parent" diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 73c210a..c00a28f 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -11,6 +11,19 @@ android:name="cy.agorise.bitsybitshareswallet.fragments.BalancesFragment" android:label="@string/app_name" tools:layout="@layout/fragment_balances"> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index ff630b8..c22b77e 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0-alpha08" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files