From 14f4b46e1974486392cb159ab795ce2f03621744 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 1 Sep 2020 21:38:18 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle | 2 +- .../main/java/com/tangem/tap/MainActivity.kt | 14 +++ .../java/com/tangem/tap/TapApplication.kt | 14 ++- .../tap/common/extensions/Navigation.kt | 2 + .../com/tangem/tap/common/extensions/UI.kt | 3 + .../com/tangem/tap/common/redux/AppReducer.kt | 9 +- .../com/tangem/tap/common/redux/AppState.kt | 11 ++- .../redux/navigation/NavigationState.kt | 2 +- .../tap/features/send/BaseStoreFragment.kt | 45 +++++++++ .../tap/features/send/redux/LogMiddleware.kt | 17 ++++ .../tap/features/send/redux/SendAction.kt | 14 +++ .../tap/features/send/redux/SendReducer.kt | 45 +++++++++ .../tap/features/send/redux/SendState.kt | 21 +++++ .../tap/features/send/ui/SendFragment.kt | 49 ++++++++++ .../FragmentStateSubscriber.kt | 21 +++++ .../stateSubscribers/SendStateSubscriber.kt | 41 +++++++++ .../stateSubscribers/WalletStateSubscriber.kt | 13 +++ .../tap/features/wallet/ui/WalletFragment.kt | 4 + .../tangem/tap/network/NetworkConnectivity.kt | 40 ++++++++ .../res/color/selector_chip_background.xml | 6 +- app/src/main/res/layout/fragment_send.xml | 91 ++++++++++++------- .../res/layout/layout_send_network_fee.xml | 85 +++++++++-------- app/src/main/res/values/strings.xml | 1 + 23 files changed, 463 insertions(+), 87 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/features/send/BaseStoreFragment.kt create mode 100644 app/src/main/java/com/tangem/tap/features/send/redux/LogMiddleware.kt create mode 100644 app/src/main/java/com/tangem/tap/features/send/redux/SendAction.kt create mode 100644 app/src/main/java/com/tangem/tap/features/send/redux/SendReducer.kt create mode 100644 app/src/main/java/com/tangem/tap/features/send/redux/SendState.kt create mode 100644 app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt create mode 100644 app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/FragmentStateSubscriber.kt create mode 100644 app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt create mode 100644 app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/WalletStateSubscriber.kt create mode 100644 app/src/main/java/com/tangem/tap/network/NetworkConnectivity.kt diff --git a/app/build.gradle b/app/build.gradle index 04a330ca2b..d363ee436d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -64,7 +64,7 @@ dependencies { implementation 'com.google.android.material:material:1.2.0' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10' - implementation 'com.tangem:blockchain:1.25.0' + implementation 'com.tangem:blockchain:1.27.0' //lifecycle implementation "androidx.lifecycle:lifecycle-runtime:2.2.0" diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index cbf1d9ccbb..b2947e0c13 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -1,7 +1,10 @@ package com.tangem.tap +import android.app.Activity import android.content.pm.ActivityInfo +import android.os.Build import android.os.Bundle +import android.view.WindowManager import androidx.appcompat.app.AppCompatActivity import com.tangem.CardFilter import com.tangem.Config @@ -76,4 +79,15 @@ class MainActivity : AppCompatActivity() { store.dispatch(NavigationAction.ActivityDestroyed) super.onDestroy() } +} + +fun setTranslucent(activity: Activity, translucent: Boolean) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + val w = activity.getWindow(); + if (translucent) { + w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } else { + w.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 4ab0e12db4..4b49e6ff0a 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -3,7 +3,10 @@ package com.tangem.tap import android.app.Application import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.appReducer +import com.tangem.tap.network.NetworkConnectivity +import com.tangem.wallet.BuildConfig import org.rekotlin.Store +import timber.log.Timber val store = Store( reducer = ::appReducer, @@ -11,4 +14,13 @@ val store = Store( state = AppState() ) -class TapApplication : Application() \ No newline at end of file +class TapApplication : Application() { + override fun onCreate() { + super.onCreate() + + if (BuildConfig.DEBUG) { + Timber.plant(Timber.DebugTree()) + } + NetworkConnectivity(store, this) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt index a1f13c87d4..1890cabce0 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt @@ -5,6 +5,7 @@ import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentManager import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.features.home.HomeFragment +import com.tangem.tap.features.send.ui.SendFragment import com.tangem.tap.features.wallet.ui.WalletFragment import com.tangem.wallet.R @@ -34,5 +35,6 @@ private fun fragmentFactory(screen: AppScreen): Fragment { return when (screen) { AppScreen.Home -> HomeFragment() AppScreen.Wallet -> WalletFragment() + AppScreen.Send -> SendFragment() } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt index 8e68a1bd6f..06bd7b850e 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt @@ -29,14 +29,17 @@ fun View.show(show: Boolean) { } fun View.show() { + if (this.visibility == View.VISIBLE) return this.visibility = View.VISIBLE } fun View.hide() { + if (this.visibility == View.GONE) return this.visibility = View.GONE } fun View.makeInvisible() { + if (this.visibility == View.INVISIBLE) return this.visibility = View.INVISIBLE } diff --git a/app/src/main/java/com/tangem/tap/common/redux/AppReducer.kt b/app/src/main/java/com/tangem/tap/common/redux/AppReducer.kt index 1431c3b890..3888f22fcf 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/AppReducer.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/AppReducer.kt @@ -2,16 +2,19 @@ package com.tangem.tap.common.redux import com.tangem.tap.common.redux.global.globalReducer import com.tangem.tap.common.redux.navigation.navigationReducer +import com.tangem.tap.features.send.redux.SendReducer import com.tangem.tap.features.wallet.redux.walletReducer import org.rekotlin.Action fun appReducer(action: Action, state: AppState?): AppState { requireNotNull(state) if (action is AppAction.RestoreState) return action.state + return AppState( - navigationState = navigationReducer(action, state), - globalState = globalReducer(action, state), - walletState = walletReducer(action, state), + navigationState = navigationReducer(action, state), + globalState = globalReducer(action, state), + walletState = walletReducer(action, state), + sendState = SendReducer.reduce(action, state.sendState) ) } diff --git a/app/src/main/java/com/tangem/tap/common/redux/AppState.kt b/app/src/main/java/com/tangem/tap/common/redux/AppState.kt index 8b147b94f0..2a03f03e25 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/AppState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/AppState.kt @@ -4,21 +4,24 @@ import com.tangem.tap.common.redux.global.GlobalState import com.tangem.tap.common.redux.navigation.NavigationState import com.tangem.tap.common.redux.navigation.navigationMiddleware import com.tangem.tap.features.home.redux.homeMiddleware +import com.tangem.tap.features.send.redux.SendState +import com.tangem.tap.features.send.redux.logMiddleware import com.tangem.tap.features.wallet.redux.WalletState import com.tangem.tap.features.wallet.redux.walletMiddleware import org.rekotlin.Middleware import org.rekotlin.StateType data class AppState( - val navigationState: NavigationState = NavigationState(), - val globalState: GlobalState = GlobalState(), - val walletState: WalletState = WalletState() + val navigationState: NavigationState = NavigationState(), + val globalState: GlobalState = GlobalState(), + val walletState: WalletState = WalletState(), + val sendState: SendState = SendState(), ) : StateType { companion object { fun getMiddleware(): List> { return listOf( - navigationMiddleware, notificationsMiddleware, + logMiddleware, navigationMiddleware, notificationsMiddleware, homeMiddleware, walletMiddleware, ) } diff --git a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt index 72463f9da8..7fcff63909 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt @@ -9,4 +9,4 @@ data class NavigationState( val activity: WeakReference? = null ) : StateType -enum class AppScreen { Home, Wallet } \ No newline at end of file +enum class AppScreen { Home, Wallet, Send } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/BaseStoreFragment.kt b/app/src/main/java/com/tangem/tap/features/send/BaseStoreFragment.kt new file mode 100644 index 0000000000..20669d7f3b --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/send/BaseStoreFragment.kt @@ -0,0 +1,45 @@ +package com.tangem.tap.features.send + +import android.os.Bundle +import android.view.View +import androidx.activity.OnBackPressedCallback +import androidx.fragment.app.Fragment +import com.tangem.tap.common.redux.navigation.NavigationAction +import com.tangem.tap.store +import kotlinx.android.synthetic.main.fragment_wallet.* +import org.rekotlin.StoreSubscriber + +/** +[REDACTED_AUTHOR] + */ +abstract class BaseStoreFragment(layoutId: Int) : Fragment(layoutId) { + + abstract fun subscribeToStore() + + protected val storeSubscribersList = mutableListOf>() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + activity?.onBackPressedDispatcher?.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + store.dispatch(NavigationAction.PopBackTo()) + } + }) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + toolbar.setNavigationOnClickListener { store.dispatch(NavigationAction.PopBackTo()) } + } + + override fun onStart() { + super.onStart() + subscribeToStore() + } + + + override fun onStop() { + storeSubscribersList.forEach { store.unsubscribe(it) } + super.onStop() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/LogMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/LogMiddleware.kt new file mode 100644 index 0000000000..3d6f5b59d6 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/send/redux/LogMiddleware.kt @@ -0,0 +1,17 @@ +package com.tangem.tap.features.send.redux + +import com.tangem.tap.common.redux.AppState +import org.rekotlin.Middleware +import timber.log.Timber + +/** +[REDACTED_AUTHOR] + */ +val logMiddleware: Middleware = { dispatch, appState -> + { nextDispatch -> + { action -> + Timber.d("$action") + nextDispatch(action) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/SendAction.kt b/app/src/main/java/com/tangem/tap/features/send/redux/SendAction.kt new file mode 100644 index 0000000000..6621539b8d --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/send/redux/SendAction.kt @@ -0,0 +1,14 @@ +package com.tangem.tap.features.send.redux + +import org.rekotlin.Action + +/** +[REDACTED_AUTHOR] + */ +interface SendAction : Action + +sealed class FeeLayout : SendAction { + object ToggleFeeLayoutVisibility : FeeLayout() + data class ChangeSelectedFee(val id: Int) : FeeLayout() + class ChangeLoremState(val isChecked: Boolean) : FeeLayout() +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/SendReducer.kt b/app/src/main/java/com/tangem/tap/features/send/redux/SendReducer.kt new file mode 100644 index 0000000000..7e70ffe625 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/send/redux/SendReducer.kt @@ -0,0 +1,45 @@ +package com.tangem.tap.features.send.redux + +import android.view.View +import org.rekotlin.Action +import org.rekotlin.StateType + +/** +[REDACTED_AUTHOR] + */ +class SendReducer { + companion object { + fun reduce(action: Action, state: SendState): SendState { + val sendAction = action as? SendAction ?: return state + + return when (sendAction) { + is FeeLayout -> handleFeeLayoutAction(sendAction, state, state.feeLayoutState) + else -> state + } + } + + private fun handleFeeLayoutAction(action: FeeLayout, sendState: SendState, state: FeeLayoutState): SendState { + return when (action) { + is FeeLayout.ToggleFeeLayoutVisibility -> { + val visibility = if (state.visibility == View.VISIBLE) View.GONE + else View.VISIBLE + + val result = state.copy(visibility = visibility) + updateLastState(sendState.copy(feeLayoutState = result), result) + } + is FeeLayout.ChangeSelectedFee -> { + val result = state.copy(selectedFeeId = action.id) + updateLastState(sendState.copy(feeLayoutState = result), result) + } + is FeeLayout.ChangeLoremState -> { + val result = state.copy(swLoremIsChecked = action.isChecked) + updateLastState(sendState.copy(feeLayoutState = result), result) + } + } + } + + private fun updateLastState(sendState: SendState, state: StateType): SendState { + return sendState.copy(lastChangedStateType = state) + } + } +} diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/SendState.kt b/app/src/main/java/com/tangem/tap/features/send/redux/SendState.kt new file mode 100644 index 0000000000..9baf474de8 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/send/redux/SendState.kt @@ -0,0 +1,21 @@ +package com.tangem.tap.features.send.redux + +import android.view.View +import com.tangem.wallet.R +import org.rekotlin.StateType + +/** +[REDACTED_AUTHOR] + */ +data class SendState( + val lastChangedStateType: StateType = NoneState(), + val feeLayoutState: FeeLayoutState = FeeLayoutState() +) : StateType + +class NoneState : StateType + +data class FeeLayoutState( + val visibility: Int = View.GONE, + val selectedFeeId: Int = R.id.chipNormal, + val swLoremIsChecked: Boolean = false +) : StateType \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt b/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt new file mode 100644 index 0000000000..f7880fec0e --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/send/ui/SendFragment.kt @@ -0,0 +1,49 @@ +package com.tangem.tap.features.send.ui + +import android.os.Bundle +import android.view.View +import com.tangem.tap.features.send.BaseStoreFragment +import com.tangem.tap.features.send.redux.FeeLayout +import com.tangem.tap.features.send.ui.stateSubscribers.SendStateSubscriber +import com.tangem.tap.features.send.ui.stateSubscribers.WalletStateSubscriber +import com.tangem.tap.store +import com.tangem.wallet.R +import kotlinx.android.synthetic.main.layout_send_network_fee.* + +/** +[REDACTED_AUTHOR] + */ +class SendFragment : BaseStoreFragment(R.layout.fragment_send) { + + private val sendSubscriber = SendStateSubscriber(this) + private val walletSubscriber = WalletStateSubscriber(this) + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + flExpandCollapse.setOnClickListener { + store.dispatch(FeeLayout.ToggleFeeLayoutVisibility) + } + chipGroup.setOnCheckedChangeListener { group, checkedId -> + store.dispatch(FeeLayout.ChangeSelectedFee(checkedId)) + } + swLorem.setOnCheckedChangeListener { btn, isChecked -> + store.dispatch(FeeLayout.ChangeLoremState(isChecked)) + } + } + + override fun subscribeToStore() { + store.subscribe(walletSubscriber) { appState -> + appState.skipRepeats { oldState, newState -> false }.select { it.walletState } + } + store.subscribe(sendSubscriber) { appState -> + appState.skipRepeats { oldState, newState -> false }.select { it.sendState } + } + + storeSubscribersList.add(walletSubscriber) + storeSubscribersList.add(sendSubscriber) + } +} + + + diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/FragmentStateSubscriber.kt b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/FragmentStateSubscriber.kt new file mode 100644 index 0000000000..58949c7df7 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/FragmentStateSubscriber.kt @@ -0,0 +1,21 @@ +package com.tangem.tap.features.send.ui.stateSubscribers + +import androidx.fragment.app.Fragment +import org.rekotlin.StateType +import org.rekotlin.StoreSubscriber +import java.lang.ref.WeakReference + +/** +[REDACTED_AUTHOR] + */ +abstract class FragmentStateSubscriber(fragment: Fragment) : StoreSubscriber { + private val weakFragment: WeakReference = WeakReference(fragment) + + abstract fun updateWithNewState(fg: Fragment, state: S) + + override fun newState(state: S) { + val fg = weakFragment.get() ?: return + + updateWithNewState(fg, state) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt new file mode 100644 index 0000000000..9e98f807ba --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt @@ -0,0 +1,41 @@ +package com.tangem.tap.features.send.ui.stateSubscribers + +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.transition.TransitionManager +import com.tangem.tap.features.send.redux.FeeLayoutState +import com.tangem.tap.features.send.redux.SendState +import kotlinx.android.synthetic.main.btn_expand_collapse.* +import kotlinx.android.synthetic.main.layout_send_network_fee.* +import timber.log.Timber + +/** +[REDACTED_AUTHOR] + */ +class SendStateSubscriber(fragment: Fragment) : FragmentStateSubscriber(fragment) { + + override fun updateWithNewState(fg: Fragment, state: SendState) { + when (state.lastChangedStateType) { + is FeeLayoutState -> handleFeeLayoutState(fg, state.feeLayoutState) + } + } + + private fun handleFeeLayoutState(fg: Fragment, layoutState: FeeLayoutState) { + Timber.d("handleFeeLayoutState") + if (fg.llFeeContainer.visibility != layoutState.visibility) { + val rotationAngle = if (fg.imvExpandCollapse.rotation == 0f) 180f else 0f + fg.imvExpandCollapse.rotation = rotationAngle + + (fg.llFeeContainer.parent?.parent as? ViewGroup)?.let { TransitionManager.beginDelayedTransition(it) } + fg.llFeeContainer.visibility = layoutState.visibility + } + + if (fg.swLorem.isChecked != layoutState.swLoremIsChecked) { + fg.swLorem.isChecked = layoutState.swLoremIsChecked + } + + if (fg.chipGroup.checkedChipId != layoutState.selectedFeeId) { + fg.chipGroup.check(layoutState.selectedFeeId) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/WalletStateSubscriber.kt b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/WalletStateSubscriber.kt new file mode 100644 index 0000000000..980f39ba73 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/WalletStateSubscriber.kt @@ -0,0 +1,13 @@ +package com.tangem.tap.features.send.ui.stateSubscribers + +import androidx.fragment.app.Fragment +import com.tangem.tap.features.wallet.redux.WalletState + +/** +[REDACTED_AUTHOR] + */ +class WalletStateSubscriber(fragment: Fragment) : FragmentStateSubscriber(fragment) { + override fun updateWithNewState(fg: Fragment, state: WalletState) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt index 72617cc32a..f0415fea1b 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt @@ -6,6 +6,7 @@ import androidx.activity.OnBackPressedCallback import androidx.fragment.app.Fragment import com.tangem.tap.common.extensions.hide import com.tangem.tap.common.extensions.show +import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.redux.PayIdState @@ -55,6 +56,9 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), StoreSubscriber, + context: Context +) { + private val connectivityManager = context.applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + + private val receiver = object : BroadcastReceiver() { + override fun onReceive(c: Context?, intent: Intent?) { + store.dispatch(NetworkStateChanged(isOnlineOrConnecting())) + } + } + + init { + val intentFilter = IntentFilter() + intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION) + context.registerReceiver(receiver, intentFilter) + store.dispatch(NetworkStateChanged(isOnlineOrConnecting())) + } + + + fun isOnlineOrConnecting(): Boolean { + val netInfo = connectivityManager.activeNetworkInfo + return netInfo != null && netInfo.isConnectedOrConnecting + } +} + +data class NetworkStateChanged(val isOnline: Boolean) : Action \ No newline at end of file diff --git a/app/src/main/res/color/selector_chip_background.xml b/app/src/main/res/color/selector_chip_background.xml index 14a32680dd..21a6b77707 100644 --- a/app/src/main/res/color/selector_chip_background.xml +++ b/app/src/main/res/color/selector_chip_background.xml @@ -1,9 +1,9 @@ - - - + + + diff --git a/app/src/main/res/layout/fragment_send.xml b/app/src/main/res/layout/fragment_send.xml index f0b7ab503a..0768fc3cf5 100644 --- a/app/src/main/res/layout/fragment_send.xml +++ b/app/src/main/res/layout/fragment_send.xml @@ -3,49 +3,70 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" + android:layout_marginTop="24dp" android:orientation="vertical"> - + android:layout_height="?attr/actionBarSize" + app:layout_constraintTop_toTopOf="parent" + app:navigationIcon="@drawable/ic_baseline_arrow_back_24" + app:title="@string/send_title" /> - + android:layout_height="wrap_content"> - + - + - + - + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_send_network_fee.xml b/app/src/main/res/layout/layout_send_network_fee.xml index 156e8a2016..17385e89d0 100644 --- a/app/src/main/res/layout/layout_send_network_fee.xml +++ b/app/src/main/res/layout/layout_send_network_fee.xml @@ -13,12 +13,12 @@ android:layout_marginStart="16dp" android:text="@string/send_network_fee" android:textSize="13sp" - app:layout_constraintBottom_toBottomOf="@+id/include" + app:layout_constraintBottom_toBottomOf="@+id/flExpandCollapse" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@+id/include" /> + app:layout_constraintTop_toTopOf="parent" /> - + app:layout_constraintTop_toBottomOf="@+id/flExpandCollapse"> - + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" + android:translationY="-8dp" + app:singleLine="true" + app:singleSelection="true"> - + + + + + + + + + android:layout_marginStart="16dp" + android:layout_marginEnd="8dp" + android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. At tristique ornare auctor in." /> - + - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 541fb90bac..99d4f806f6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,6 +31,7 @@ Error response while creating PayID. + Send Address or PayID Network fee Low