diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dd7fbab95..a5fbb0b94 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -68,11 +68,9 @@ android { getByName("debug") { isJniDebuggable = true - buildConfigField("String", "GIPHY_KEY", "\"${secretProperties["giphy.key"]}\"") } getByName("release") { - buildConfigField("String", "GIPHY_KEY", "\"${secretProperties["giphy.key"]}\"") isMinifyEnabled = true isShrinkResources = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") @@ -90,12 +88,12 @@ android { productFlavors { create("regular") { dimension = "privacy-mode" - buildConfigField("String", "NOTIFICATIONS_API_KEY", "\"${loadSecretProps()["service.notifications.api_key"]}\"") // todo use new API KEY + buildConfigField("String", "NOTIFICATIONS_API_KEY", "\"${loadSecretProps()["service.notifications.api_key"]}\"") proguardFile("regular-proguard-rules.pro") } create("privacy") { dimension = "privacy-mode" - buildConfigField("String", "NOTIFICATIONS_API_KEY", "\"${loadSecretProps()["service.notifications.api_key"]}\"")// todo use new API KEY + buildConfigField("String", "NOTIFICATIONS_API_KEY", "\"${loadSecretProps()["service.notifications.api_key"]}\"") } } @@ -235,6 +233,7 @@ dependencies { implementation(Dependencies.AndroidX.legacySupport) implementation(Dependencies.AndroidX.recyclerview) implementation(Dependencies.AndroidX.viewpager2) + implementation(Dependencies.AndroidX.material) implementation(Dependencies.AndroidX.activityKtx) implementation(Dependencies.AndroidX.fragmentKtx) implementation(Dependencies.AndroidX.Lifecycle.extensions) @@ -248,17 +247,12 @@ dependencies { implementation(Dependencies.AndroidX.Compose.uiTooling) implementation(Dependencies.AndroidX.Compose.uiToolingPreview) implementation(Dependencies.AndroidX.Compose.activity) - implementation(Dependencies.AndroidX.Compose.webView) implementation(Dependencies.Coroutines.android) implementation(Dependencies.Coroutines.core) - implementation(Dependencies.Coroutines.rx2) implementation(Dependencies.flexbox) - implementation(Dependencies.glide) - ksp(Dependencies.glideCompiler) - implementation(Dependencies.dagger) ksp(Dependencies.daggerCompiler) @@ -301,7 +295,6 @@ dependencies { // sentry - crash analytics implementation(Dependencies.Sentry.sentryAndroid) - implementation(Dependencies.rxandroid) implementation(Dependencies.rxjava) // spring animation @@ -320,10 +313,6 @@ dependencies { implementation(Dependencies.blessedAndroid) - implementation(Dependencies.giphySdkUi) { - exclude(group = "com.android.support") - } - implementation(Dependencies.itext7Core) implementation(Dependencies.keyboardVisibilityEvent) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 204b037d1..b0f640351 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -36,14 +36,6 @@ -keep enum com.tari.android.wallet.application.Network { *; } --keep class com.tari.android.wallet.ui.common.giphy.api.dto.SearchGIFResponse { *; } --keep class com.tari.android.wallet.ui.common.giphy.api.dto.SearchGIFsResponse { *; } --keep class com.tari.android.wallet.ui.common.giphy.api.dto.Data { *; } --keep class com.tari.android.wallet.ui.common.giphy.api.dto.Meta { *; } --keep class com.tari.android.wallet.ui.common.giphy.api.dto.Images { *; } --keep class com.tari.android.wallet.ui.common.giphy.api.dto.ImageVariant { *; } --keep class com.tari.android.wallet.ui.common.giphy.api.dto.Original { *; } - -keep class **Fragment** { *; } -keep class **ViewModel** { *; } diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt index d33119c4f..a402ff678 100644 --- a/app/src/main/cpp/CMakeLists.txt +++ b/app/src/main/cpp/CMakeLists.txt @@ -74,7 +74,6 @@ add_library( jniSeedWords.cpp jniEmojiSet.cpp jniTransactionSendStatus.cpp - jniCovenant.cpp jniOutputFeatures.cpp jniTariFeePerGramStats.cpp jniTariFeePerGramStat.cpp diff --git a/app/src/main/cpp/jniCovenant.cpp b/app/src/main/cpp/jniCovenant.cpp deleted file mode 100644 index a4ba6fd02..000000000 --- a/app/src/main/cpp/jniCovenant.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include "jniCommon.cpp" - -extern "C" -JNIEXPORT void JNICALL -Java_com_tari_android_wallet_ffi_FFICovenant_jniCreateFromBytes( - JNIEnv *jEnv, - jobject jThis, - jobject bytes, - jobject error) { - ExecuteWithError(jEnv, error, [&](int *errorPointer) { - auto pBytes = GetPointerField(jEnv, bytes); - TariCovenant *pTariCovenant = covenant_create_from_bytes(pBytes, errorPointer); - SetPointerField(jEnv, jThis, reinterpret_cast(pTariCovenant)); - }); -} - -extern "C" -JNIEXPORT void JNICALL -Java_com_tari_android_wallet_ffi_FFICovenant_jniDestroy( - JNIEnv *jEnv, - jobject jThis) { - covenant_destroy(GetPointerField(jEnv, jThis)); - SetNullPointerField(jEnv, jThis); -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/application/TariWalletApplication.kt b/app/src/main/java/com/tari/android/wallet/application/TariWalletApplication.kt index 00159f2b3..0f839476a 100644 --- a/app/src/main/java/com/tari/android/wallet/application/TariWalletApplication.kt +++ b/app/src/main/java/com/tari/android/wallet/application/TariWalletApplication.kt @@ -45,7 +45,6 @@ import com.tari.android.wallet.di.ApplicationScope import com.tari.android.wallet.di.DiContainer import com.tari.android.wallet.infrastructure.logging.LoggerAdapter import com.tari.android.wallet.notification.NotificationHelper -import com.tari.android.wallet.ui.common.giphy.GiphyAdapter import com.tari.android.wallet.util.DebugConfig import io.sentry.android.core.SentryAndroid import kotlinx.coroutines.CoroutineScope @@ -78,9 +77,6 @@ class TariWalletApplication : Application() { @Inject lateinit var yatAdapter: YatAdapter - @Inject - lateinit var giphyAdapter: GiphyAdapter - @Inject @ApplicationScope lateinit var applicationScope: CoroutineScope @@ -135,8 +131,6 @@ class TariWalletApplication : Application() { yatAdapter.initYat(this) - giphyAdapter.init() - loggerAdapter.init() } diff --git a/app/src/main/java/com/tari/android/wallet/application/YatAdapter.kt b/app/src/main/java/com/tari/android/wallet/application/YatAdapter.kt index 2b24bf4d1..55400c079 100644 --- a/app/src/main/java/com/tari/android/wallet/application/YatAdapter.kt +++ b/app/src/main/java/com/tari/android/wallet/application/YatAdapter.kt @@ -9,7 +9,6 @@ import com.orhanobut.logger.Logger import com.tari.android.wallet.BuildConfig import com.tari.android.wallet.R import com.tari.android.wallet.data.sharedPrefs.CorePrefRepository -import com.tari.android.wallet.data.sharedPrefs.network.NetworkPrefRepository import com.tari.android.wallet.data.sharedPrefs.yat.YatPrefRepository import com.tari.android.wallet.model.EmojiId import com.tari.android.wallet.ui.screen.send.common.TransactionData @@ -30,7 +29,6 @@ import javax.inject.Singleton @Singleton class YatAdapter @Inject constructor( private val yatSharedRepository: YatPrefRepository, - private val networkRepository: NetworkPrefRepository, private val commonRepository: CorePrefRepository ) : YatIntegration.Delegate { diff --git a/app/src/main/java/com/tari/android/wallet/application/walletManager/WalletManager.kt b/app/src/main/java/com/tari/android/wallet/application/walletManager/WalletManager.kt index 786330101..07fbec0b4 100644 --- a/app/src/main/java/com/tari/android/wallet/application/walletManager/WalletManager.kt +++ b/app/src/main/java/com/tari/android/wallet/application/walletManager/WalletManager.kt @@ -33,7 +33,6 @@ package com.tari.android.wallet.application.walletManager import com.orhanobut.logger.Logger -import com.tari.android.wallet.BuildConfig import com.tari.android.wallet.application.AppStateHandler import com.tari.android.wallet.application.baseNodes.BaseNodesManager import com.tari.android.wallet.application.walletManager.WalletCallbacks.Companion.MAIN_WALLET_CONTEXT_ID @@ -57,7 +56,6 @@ import com.tari.android.wallet.ffi.FFITariTransportConfig import com.tari.android.wallet.ffi.FFITariWalletAddress import com.tari.android.wallet.ffi.FFIWallet import com.tari.android.wallet.ffi.HexString -import com.tari.android.wallet.ffi.LogFileObserver import com.tari.android.wallet.ffi.NetAddressString import com.tari.android.wallet.ffi.runWithDestroy import com.tari.android.wallet.model.MicroTari @@ -138,7 +136,6 @@ class WalletManager @Inject constructor( private val _txSentConfirmations = MutableStateFlow(emptyList()) val txSentConfirmations = _txSentConfirmations.asStateFlow() - private var logFileObserver: LogFileObserver? = null private val logger get() = Logger.t(WalletManager::class.simpleName) @@ -230,8 +227,6 @@ class WalletManager @Inject constructor( walletCallbacks = walletCallbacks, ) - startLogFileObserver() - if (DebugConfig.selectBaseNodeEnabled) { baseNodesManager.refreshBaseNodeList(wallet) if (baseNodesManager.currentBaseNode == null) { @@ -282,17 +277,6 @@ class WalletManager @Inject constructor( ) } - /** - * Starts the log file observer only in debug mode. - * Will skip if the app is in release config. - */ - private fun startLogFileObserver() { - if (BuildConfig.DEBUG) { - logFileObserver = LogFileObserver(walletConfig.getWalletLogFilePath()) - logFileObserver?.startWatching() - } - } - /** * Stores wallet's Base58 address and emoji id into the shared prefs * for future convenience. diff --git a/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefBigIntegerDelegate.kt b/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefBigIntegerDelegate.kt deleted file mode 100644 index f7bc6ca16..000000000 --- a/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefBigIntegerDelegate.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.tari.android.wallet.data.sharedPrefs.delegates - -import android.content.SharedPreferences -import com.tari.android.wallet.data.sharedPrefs.CommonPrefRepository -import java.math.BigInteger -import kotlin.reflect.KProperty - -class SharedPrefBigIntegerDelegate( - val prefs: SharedPreferences, - val commonRepository: CommonPrefRepository, - val name: String, - val defValue: BigInteger, -) { - init { - commonRepository.updateNotifier.onNext(Unit) - } - - operator fun getValue(thisRef: Any?, property: KProperty<*>): BigInteger = - prefs.getString(name, defValue.toString())?.run(::BigInteger) ?: defValue - - operator fun setValue(thisRef: Any?, property: KProperty<*>, value: BigInteger) = - prefs.edit().run { - putString(name, value.toString()) - apply() - commonRepository.updateNotifier.onNext(Unit) - } -} - diff --git a/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefBigIntegerNullableDelegate.kt b/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefBigIntegerNullableDelegate.kt deleted file mode 100644 index 6737391bb..000000000 --- a/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefBigIntegerNullableDelegate.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.tari.android.wallet.data.sharedPrefs.delegates - -import android.content.SharedPreferences -import com.tari.android.wallet.data.sharedPrefs.CommonPrefRepository -import java.math.BigInteger -import kotlin.reflect.KProperty - -class SharedPrefBigIntegerNullableDelegate( - val prefs: SharedPreferences, - val commonRepository: CommonPrefRepository, - val name: String, - val defValue: BigInteger? = null -) { - init { - commonRepository.updateNotifier.onNext(Unit) - } - - operator fun getValue(thisRef: Any?, property: KProperty<*>): BigInteger? = prefs.getString(name, defValue?.toString())?.run(::BigInteger) - - operator fun setValue(thisRef: Any?, property: KProperty<*>, value: BigInteger?) = - prefs.edit().run { - putString(name, value?.toString()) - apply() - commonRepository.updateNotifier.onNext(Unit) - } -} - diff --git a/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefDateTimeNullableDelegate.kt b/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefDateTimeNullableDelegate.kt deleted file mode 100644 index fbd1b0de8..000000000 --- a/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefDateTimeNullableDelegate.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.tari.android.wallet.data.sharedPrefs.delegates - -import android.content.SharedPreferences -import com.tari.android.wallet.data.sharedPrefs.CommonPrefRepository -import org.joda.time.DateTime -import kotlin.reflect.KProperty - -class SharedPrefDateTimeNullableDelegate( - val prefs: SharedPreferences, - val commonRepository: CommonPrefRepository, - val name: String, - val defValue: DateTime? = null -) { - init { - commonRepository.updateNotifier.onNext(Unit) - } - - operator fun getValue(thisRef: Any?, property: KProperty<*>): DateTime? = - prefs.getLong(name, defValue?.millis ?: -1L) - .let { if (it == -1L) null else DateTime(it) } - - operator fun setValue(thisRef: Any?, property: KProperty<*>, value: DateTime?) { - prefs.edit().apply { - if (value == null) remove(name) - else putLong(name, value.millis) - }.apply() - commonRepository.updateNotifier.onNext(Unit) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefIntDelegate.kt b/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefIntDelegate.kt deleted file mode 100644 index 82e5c47bd..000000000 --- a/app/src/main/java/com/tari/android/wallet/data/sharedPrefs/delegates/SharedPrefIntDelegate.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.tari.android.wallet.data.sharedPrefs.delegates - -import android.content.SharedPreferences -import com.tari.android.wallet.data.sharedPrefs.CommonPrefRepository -import kotlin.reflect.KProperty - -class SharedPrefIntDelegate( - val prefs: SharedPreferences, - val commonRepository: CommonPrefRepository, - val name: String, - val defValue: Int = -1 -) { - init { - commonRepository.updateNotifier.onNext(Unit) - } - - operator fun getValue(thisRef: Any?, property: KProperty<*>): Int = prefs.getInt(name, defValue) - - operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Int?): Unit = prefs.edit().run { - if (value == null) { - remove(name) - } else { - putInt(name, value) - apply() - } - commonRepository.updateNotifier.onNext(Unit) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/data/tx/TxDto.kt b/app/src/main/java/com/tari/android/wallet/data/tx/TxDto.kt index 26fc007c3..4c5fcc096 100644 --- a/app/src/main/java/com/tari/android/wallet/data/tx/TxDto.kt +++ b/app/src/main/java/com/tari/android/wallet/data/tx/TxDto.kt @@ -6,4 +6,13 @@ import com.tari.android.wallet.model.tx.Tx data class TxDto( val tx: Tx, val contact: ContactDto?, -) \ No newline at end of file +) { + fun contains(searchQuery: String): Boolean = this.tx.tariContact.walletAddress.fullEmojiId.contains(searchQuery, ignoreCase = true) + || this.tx.tariContact.walletAddress.fullBase58.contains(searchQuery, ignoreCase = true) + || this.tx.tariContact.alias.contains(searchQuery, ignoreCase = true) + || this.tx.message.contains(searchQuery, ignoreCase = true) + || this.tx.paymentId.contains(searchQuery, ignoreCase = true) + || this.tx.amount.formattedTariValue.contains(searchQuery, ignoreCase = true) + || this.tx.amount.formattedValue.contains(searchQuery, ignoreCase = true) + || this.contact?.contactInfo?.getAlias()?.contains(searchQuery, ignoreCase = true) == true +} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/data/tx/TxListData.kt b/app/src/main/java/com/tari/android/wallet/data/tx/TxListData.kt index 55886c908..160471b34 100644 --- a/app/src/main/java/com/tari/android/wallet/data/tx/TxListData.kt +++ b/app/src/main/java/com/tari/android/wallet/data/tx/TxListData.kt @@ -1,18 +1,17 @@ package com.tari.android.wallet.data.tx +import com.tari.android.wallet.model.TxStatus import com.tari.android.wallet.model.tx.CancelledTx import com.tari.android.wallet.model.tx.CompletedTx import com.tari.android.wallet.model.tx.PendingInboundTx import com.tari.android.wallet.model.tx.PendingOutboundTx import com.tari.android.wallet.model.tx.Tx -import com.tari.android.wallet.model.TxStatus data class TxListData( val cancelledTxs: List = emptyList(), val completedTxs: List = emptyList(), val pendingInboundTxs: List = emptyList(), val pendingOutboundTxs: List = emptyList(), - val confirmationCount: Long, // TODO maybe not to pass to every instance, but to have a global value ? ) { val minedUnconfirmedTxs: List get() = completedTxs.filter { it.status == TxStatus.MINED_UNCONFIRMED } diff --git a/app/src/main/java/com/tari/android/wallet/data/tx/TxRepository.kt b/app/src/main/java/com/tari/android/wallet/data/tx/TxRepository.kt index ebb0708f1..ab9bb4869 100644 --- a/app/src/main/java/com/tari/android/wallet/data/tx/TxRepository.kt +++ b/app/src/main/java/com/tari/android/wallet/data/tx/TxRepository.kt @@ -28,7 +28,7 @@ class TxRepository @Inject constructor( private val logger get() = Logger.t(TxRepository::class.java.simpleName) - private val _txs = MutableStateFlow(TxListData(confirmationCount = DEFAULT_CONFIRMATION_COUNT)) + private val _txs = MutableStateFlow(TxListData()) val txs = _txs.asStateFlow() val pendingTxs: Flow> = txs.map { txs -> (txs.pendingInboundTxs + txs.pendingOutboundTxs + txs.minedUnconfirmedTxs) @@ -89,14 +89,12 @@ class TxRepository @Inject constructor( completedTxs = wallet.getCompletedTxs(), pendingInboundTxs = wallet.getPendingInboundTxs(), pendingOutboundTxs = wallet.getPendingOutboundTxs(), - confirmationCount = wallet.getRequiredConfirmationCount(), ) logger.i( "Refreshed tx list: ${_txs.value.completedTxs.size} completed, " + "${_txs.value.pendingInboundTxs.size} pending inbound, " + "${_txs.value.pendingOutboundTxs.size} pending outbound, " + - "${_txs.value.cancelledTxs.size} cancelled (required confirmation count: " + - "${_txs.value.confirmationCount})" + "${_txs.value.cancelledTxs.size} cancelled" ) } } @@ -106,8 +104,4 @@ class TxRepository @Inject constructor( tx = this, contact = contactsRepository.getContactForTx(this), ) - - companion object { - private const val DEFAULT_CONFIRMATION_COUNT = 3L - } } diff --git a/app/src/main/java/com/tari/android/wallet/di/ApplicationComponent.kt b/app/src/main/java/com/tari/android/wallet/di/ApplicationComponent.kt index 348cfffe1..1ec6a8550 100644 --- a/app/src/main/java/com/tari/android/wallet/di/ApplicationComponent.kt +++ b/app/src/main/java/com/tari/android/wallet/di/ApplicationComponent.kt @@ -70,8 +70,6 @@ import com.tari.android.wallet.ui.screen.restore.inputSeedWords.InputSeedWordsVi import com.tari.android.wallet.ui.screen.restore.walletRestoring.WalletRestoringViewModel import com.tari.android.wallet.ui.screen.send.addAmount.AddAmountViewModel import com.tari.android.wallet.ui.screen.send.addNote.AddNoteViewModel -import com.tari.android.wallet.ui.screen.send.addNote.gif.ChooseGIFDialogFragment -import com.tari.android.wallet.ui.screen.send.addNote.gif.ThumbnailGifViewModel import com.tari.android.wallet.ui.screen.send.confirm.ConfirmViewModel import com.tari.android.wallet.ui.screen.send.finalize.FinalizeSendTxViewModel import com.tari.android.wallet.ui.screen.send.receive.ReceiveViewModel @@ -98,8 +96,7 @@ import com.tari.android.wallet.ui.screen.settings.torBridges.TorBridgesSelection import com.tari.android.wallet.ui.screen.settings.torBridges.customBridges.CustomTorBridgesViewModel import com.tari.android.wallet.ui.screen.settings.userAutorization.BiometricAuthenticationViewModel import com.tari.android.wallet.ui.screen.tx.details.TxDetailsViewModel -import com.tari.android.wallet.ui.screen.tx.history.all.AllTxHistoryViewModel -import com.tari.android.wallet.ui.screen.tx.history.contact.ContactTxHistoryViewModel +import com.tari.android.wallet.ui.screen.tx.history.TxHistoryViewModel import com.tari.android.wallet.ui.screen.utxos.list.UtxosListViewModel import dagger.Component import javax.inject.Singleton @@ -128,11 +125,9 @@ interface ApplicationComponent { fun inject(activity: AuthActivity) fun inject(activity: QrScannerActivity) - fun inject(fragment: ChooseGIFDialogFragment) fun inject(fragment: CreateWalletFragment) fun inject(commonViewModel: CommonViewModel) - fun inject(viewModel: ThumbnailGifViewModel) fun inject(viewModel: ScreenRecordingSettingsViewModel) fun inject(viewModel: ChooseRestoreOptionViewModel) fun inject(viewModel: EnterRestorationPasswordViewModel) @@ -164,7 +159,7 @@ interface ApplicationComponent { fun inject(viewModel: DeleteWalletViewModel) fun inject(viewModel: HomeViewModel) fun inject(viewModel: HomeOverviewViewModel) - fun inject(viewModel: AllTxHistoryViewModel) + fun inject(viewModel: TxHistoryViewModel) fun inject(viewModel: EnterCurrentPasswordViewModel) fun inject(viewModel: ChangeSecurePasswordViewModel) fun inject(viewModel: AddNoteViewModel) @@ -177,7 +172,6 @@ interface ApplicationComponent { fun inject(viewModel: ContactSelectionViewModel) fun inject(viewModel: TxDetailsViewModel) fun inject(viewModel: ShareManager) - fun inject(viewModel: ContactTxHistoryViewModel) fun inject(viewModel: WalletAddressViewModel) fun inject(viewModel: QrScannerViewModel) fun inject(viewModel: ChatListViewModel) diff --git a/app/src/main/java/com/tari/android/wallet/di/ApplicationModule.kt b/app/src/main/java/com/tari/android/wallet/di/ApplicationModule.kt index 8ef5baff8..c84607051 100644 --- a/app/src/main/java/com/tari/android/wallet/di/ApplicationModule.kt +++ b/app/src/main/java/com/tari/android/wallet/di/ApplicationModule.kt @@ -39,12 +39,10 @@ import android.content.Context.MODE_PRIVATE import android.content.SharedPreferences import androidx.biometric.BiometricManager import androidx.core.content.ContextCompat -import com.tari.android.wallet.BuildConfig import com.tari.android.wallet.application.TariWalletApplication import com.tari.android.wallet.infrastructure.security.biometric.BiometricAuthenticationService import com.tari.android.wallet.notification.NotificationHelper import com.tari.android.wallet.ui.common.domain.ResourceManager -import com.tari.android.wallet.ui.common.giphy.GiphyAdapter import dagger.Module import dagger.Provides import java.io.File @@ -95,10 +93,6 @@ class ApplicationModule(private val app: TariWalletApplication) { context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager ) - @Provides - @Singleton - fun provideGiphyAdapter(context: Context): GiphyAdapter = GiphyAdapter(context, BuildConfig.GIPHY_KEY) - companion object { const val sharedPrefsFileName = "tari_wallet_shared_prefs" } diff --git a/app/src/main/java/com/tari/android/wallet/di/GiphyGlideModule.java b/app/src/main/java/com/tari/android/wallet/di/GiphyGlideModule.java deleted file mode 100644 index ce79002b5..000000000 --- a/app/src/main/java/com/tari/android/wallet/di/GiphyGlideModule.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright 2020 The Tari Project - - Redistribution and use in source and binary forms, with or - without modification, are permitted provided that the - following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of - its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.di; - -import android.content.Context; - -import androidx.annotation.NonNull; - -import com.bumptech.glide.GlideBuilder; -import com.bumptech.glide.annotation.GlideModule; -import com.bumptech.glide.load.engine.cache.LruResourceCache; -import com.bumptech.glide.module.AppGlideModule; - -@GlideModule -public class GiphyGlideModule extends AppGlideModule { - - @Override - public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) { - builder.setMemoryCache(new LruResourceCache(30 * 1024 * 1024)); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/di/RetrofitModule.kt b/app/src/main/java/com/tari/android/wallet/di/RetrofitModule.kt index a426bfa9c..3e5681ee7 100644 --- a/app/src/main/java/com/tari/android/wallet/di/RetrofitModule.kt +++ b/app/src/main/java/com/tari/android/wallet/di/RetrofitModule.kt @@ -35,16 +35,12 @@ package com.tari.android.wallet.di import com.tari.android.wallet.BuildConfig import com.tari.android.wallet.data.airdrop.AirdropRetrofitService import com.tari.android.wallet.data.push.PushRetrofitService -import com.tari.android.wallet.ui.common.giphy.repository.GiphyRepository -import com.tari.android.wallet.ui.common.giphy.repository.GiphyRestService import dagger.Module import dagger.Provides -import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory -import retrofit2.create import javax.inject.Named import javax.inject.Singleton @@ -52,45 +48,13 @@ import javax.inject.Singleton class RetrofitModule { private companion object { - private const val GIPHY_BASE_URL = "https://api.giphy.com" private const val AIRDROP_BASE_URL = "https://airdrop.tari.com" private const val PUSH_BASE_URL = "https://push.tari.com" - private const val RETROFIT_GIPHY = "giphy_retrofit" private const val RETROFIT_AIRDROP = "airdrop_retrofit" private const val RETROFIT_PUSH = "push_retrofit" - - private const val GIPHY_QUERY_PARAM_API_KEY = "api_key" } - @Provides - @Named(RETROFIT_GIPHY) - @Singleton - fun provideGiphyHttpClient(): OkHttpClient = OkHttpClient.Builder() - .addLoggingIfDebug() - .addInterceptor { chain: Interceptor.Chain -> - chain.request().url.newBuilder() - .addQueryParameter(GIPHY_QUERY_PARAM_API_KEY, BuildConfig.GIPHY_KEY).build() - .let { chain.request().newBuilder().url(it).build() } - .let(chain::proceed) - } - .build() - - @Provides - @Named(RETROFIT_GIPHY) - @Singleton - fun provideTestnetFaucetRetrofit(@Named(RETROFIT_GIPHY) client: OkHttpClient): Retrofit = - Retrofit.Builder() - .baseUrl(GIPHY_BASE_URL) - .client(client) - .addConverterFactory(GsonConverterFactory.create()) - .build() - - @Provides - @Singleton - fun provideGifRepository(@Named(RETROFIT_GIPHY) retrofit: Retrofit): GiphyRestService = - GiphyRepository(retrofit.create()) - @Provides @Named(RETROFIT_AIRDROP) @Singleton diff --git a/app/src/main/java/com/tari/android/wallet/ffi/FFICovenant.kt b/app/src/main/java/com/tari/android/wallet/ffi/FFICovenant.kt deleted file mode 100644 index d44c8bc0c..000000000 --- a/app/src/main/java/com/tari/android/wallet/ffi/FFICovenant.kt +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package com.tari.android.wallet.ffi - -import java.io.Serializable - -class FFICovenant(bytes: FFIByteVector) : FFIBase(), Serializable { - - private external fun jniCreateFromBytes(bytes: FFIByteVector, libError: FFIError) - private external fun jniDestroy() - - init { - runWithError { jniCreateFromBytes(bytes, it) } - } - - override fun destroy() = jniDestroy() -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ffi/LogFileObserver.kt b/app/src/main/java/com/tari/android/wallet/ffi/LogFileObserver.kt deleted file mode 100644 index 0ffbcfdb2..000000000 --- a/app/src/main/java/com/tari/android/wallet/ffi/LogFileObserver.kt +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ffi - -import android.os.FileObserver -import org.apache.commons.io.input.ReversedLinesFileReader -import timber.log.Timber -import java.io.File -import java.io.FileReader -import java.io.LineNumberReader -import java.nio.charset.StandardCharsets - -/** - * Observes the log file and on a file modify, forwards the new line (if any) in - * the log file to the Android log. - * - * @author The Tari Development Team - */ -class LogFileObserver(logFilePath: String) : FileObserver(logFilePath) { - - private val logTag = "FFI" - private val logFile = File(logFilePath) - - /** - * Remember the last number of lines to be able to log any new lines. - */ - private var lastNumberOfLines = 0 - - private fun logNewLines() { - // read number of lines - val fileReader = FileReader(logFile) - val lineNumberReader = LineNumberReader(fileReader) - lineNumberReader.skip(Long.MAX_VALUE) - // figured out how many new lines there are - val numberOfNewLines = (lineNumberReader.lineNumber) - lastNumberOfLines - // read last new lines - val reversedFileReader = ReversedLinesFileReader(logFile, StandardCharsets.UTF_8) - val lineList = mutableListOf() - for (i in 0 until numberOfNewLines) { - val line = reversedFileReader.readLine() - lineList.add(line) - } - val stringBuilder = StringBuilder() - if (lineList.isNotEmpty()) { - // log them in reverse order - lineList.reversed().forEach { logLine -> stringBuilder.appendLine(logLine) } - Timber.tag(logTag).d(stringBuilder.toString()) - lastNumberOfLines = lineNumberReader.lineNumber - } - // close resources - fileReader.close() - lineNumberReader.close() - reversedFileReader.close() - } - - override fun onEvent(event: Int, path: String?) { - runCatching { logNewLines() } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/infrastructure/security/biometric/BiometricAuthenticationService.kt b/app/src/main/java/com/tari/android/wallet/infrastructure/security/biometric/BiometricAuthenticationService.kt index f7a832384..498bac653 100644 --- a/app/src/main/java/com/tari/android/wallet/infrastructure/security/biometric/BiometricAuthenticationService.kt +++ b/app/src/main/java/com/tari/android/wallet/infrastructure/security/biometric/BiometricAuthenticationService.kt @@ -39,9 +39,8 @@ import androidx.biometric.BiometricPrompt import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import com.tari.android.wallet.R +import com.tari.android.wallet.util.extension.isTrue import java.util.concurrent.Executor -import javax.inject.Inject -import javax.inject.Singleton import kotlin.coroutines.suspendCoroutine class BiometricAuthenticationService constructor( @@ -50,7 +49,7 @@ class BiometricAuthenticationService constructor( private val keyguardManager: KeyguardManager? ) { val isDeviceSecured: Boolean - get() = keyguardManager?.isDeviceSecure ?: false + get() = keyguardManager?.isDeviceSecure.isTrue() val authType: BiometricAuthenticationType get() = when { diff --git a/app/src/main/java/com/tari/android/wallet/model/TxNote.kt b/app/src/main/java/com/tari/android/wallet/model/TxNote.kt deleted file mode 100644 index f46b45acb..000000000 --- a/app/src/main/java/com/tari/android/wallet/model/TxNote.kt +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.model - -import com.tari.android.wallet.model.tx.Tx - -data class TxNote(val message: String?, val gifUrl: String?) { - - init { - if (message == null && gifUrl == null) { - throw IllegalStateException("Both message and gifUrl can't ge null at the same time") - } - } - - val gifId: String? - get() = gifUrl?.split(Regex("/"))?.last() - - fun compose(): String = "${message ?: ""}${gifUrl?.run { " $this" } ?: ""}" - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (javaClass != other?.javaClass) return false - other as TxNote - if (message != other.message) return false - if (gifUrl != other.gifUrl) return false - return true - } - - override fun hashCode(): Int { - var result = message?.hashCode() ?: 0 - result = 31 * result + (gifUrl?.hashCode() ?: 0) - return result - } - - override fun toString(): String = "TransactionNote(message=$message, gifUrl=$gifUrl)" - - companion object { - fun fromTx(tx: Tx, assetsDomain: String = "giphy.com", protocol: String = "https://"): TxNote { - // The paymentId is a note value for one-sided txs, and message for interactive. But we can't properly check if a tx is OSP - val note = tx.note - val lines = note.split(Regex(" ")) - return if (Regex("$protocol$assetsDomain.*").matches(lines.last())) TxNote( - message = lines.take(lines.size - 1).filter(String::isNotEmpty) - .joinToString(separator = " ") - .let { it.ifEmpty { null } }, - gifUrl = lines.last() - ) else TxNote(note, null) - } - } -} diff --git a/app/src/main/java/com/tari/android/wallet/navigation/TariNavigator.kt b/app/src/main/java/com/tari/android/wallet/navigation/TariNavigator.kt index b8ffe7321..562f81b67 100644 --- a/app/src/main/java/com/tari/android/wallet/navigation/TariNavigator.kt +++ b/app/src/main/java/com/tari/android/wallet/navigation/TariNavigator.kt @@ -77,8 +77,7 @@ import com.tari.android.wallet.ui.screen.settings.themeSelector.ThemeSelectorFra import com.tari.android.wallet.ui.screen.settings.torBridges.TorBridgesSelectionFragment import com.tari.android.wallet.ui.screen.settings.torBridges.customBridges.CustomTorBridgesFragment import com.tari.android.wallet.ui.screen.tx.details.TxDetailsFragment -import com.tari.android.wallet.ui.screen.tx.history.all.AllTxHistoryFragment -import com.tari.android.wallet.ui.screen.tx.history.contact.ContactTxHistoryFragment +import com.tari.android.wallet.ui.screen.tx.history.TxHistoryFragment import com.tari.android.wallet.ui.screen.utxos.list.UtxosListFragment import com.tari.android.wallet.util.extension.parcelable import java.math.BigInteger @@ -119,7 +118,7 @@ class TariNavigator @Inject constructor( is ContactBook.ToLinkContact -> addFragment(ContactLinkFragment.createFragment(navigation.contact)) is ContactBook.BackToContactBook -> popUpTo(ContactBookFragment::class.java.simpleName) is ContactBook.ToExternalWallet -> toExternalWallet(navigation.connectedWallet) - is ContactBook.ToContactTransactionHistory -> addFragment(ContactTxHistoryFragment.createFragment(navigation.contact)) + is ContactBook.ToContactTransactionHistory -> addFragment(TxHistoryFragment.newInstance(navigation.contact)) is ContactBook.ToAddPhoneContact -> toAddPhoneContact() is ContactBook.ToSelectTariUser -> addFragment(SelectUserContactFragment.newInstance()) @@ -150,7 +149,7 @@ class TariNavigator @Inject constructor( is TxList.ToAllSettings -> addFragment(AllSettingsFragment.newInstance()) is TxList.ToTransfer -> addFragment(TransferFragment()) is TxList.ToReceive -> addFragment(ReceiveFragment()) - is TxList.HomeTransactionHistory -> addFragment(AllTxHistoryFragment()) + is TxList.HomeTransactionHistory -> addFragment(TxHistoryFragment.newInstance()) is TorBridge.ToCustomBridges -> addFragment(CustomTorBridgesFragment()) diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/GiphyAdapter.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/GiphyAdapter.kt deleted file mode 100644 index 7ca2e19a9..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/GiphyAdapter.kt +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy - -import android.content.Context -import com.giphy.sdk.ui.Giphy - -class GiphyAdapter(private val context: Context, private val key: String) { - - fun init() = Giphy.configure(context, key) -} diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/GiphyKeywordsRepository.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/GiphyKeywordsRepository.kt deleted file mode 100644 index 9ac0250bc..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/GiphyKeywordsRepository.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy - -import javax.inject.Inject -import javax.inject.Singleton - -@Singleton -class GiphyKeywordsRepository @Inject constructor() { - private val _words = listOf("money", "money machine", "rich") - private var _currentIndex = 0 - - fun getCurrent() : String = _words[_currentIndex] - - fun getNext() : String { - _currentIndex++ - if (_currentIndex >= _words.size) { - _currentIndex = 0 - } - return getCurrent() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/GIFSearchException.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/GIFSearchException.kt deleted file mode 100644 index 2f9c1f75d..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/GIFSearchException.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy.api - -class GIFSearchException(s: String?) : IllegalStateException(s) \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/GiphyRESTGateway.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/GiphyRESTGateway.kt deleted file mode 100644 index ffc203f77..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/GiphyRESTGateway.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy.api - -import com.tari.android.wallet.ui.common.giphy.api.dto.SearchGIFResponse -import com.tari.android.wallet.ui.common.giphy.api.dto.SearchGIFsResponse -import retrofit2.Call -import retrofit2.http.GET -import retrofit2.http.Path -import retrofit2.http.Query - -interface GiphyRESTGateway { - - @GET("/v1/gifs/search") - fun searchGIFs(@Query("q") query: String, @Query("limit") limit: Int): Call - - @GET("/v1/gifs/{gif_id}") - fun getGIFByID(@Path("gif_id") id: String): Call - -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Data.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Data.kt deleted file mode 100644 index bef01932f..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Data.kt +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy.api.dto - -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName - -data class Data( - @Expose @SerializedName("id") val id: String, - @Expose @SerializedName("embed_url") val embedUrl: String, - @Expose @SerializedName("images") val images: Images -) diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/ImageVariant.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/ImageVariant.kt deleted file mode 100644 index a2e0c0459..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/ImageVariant.kt +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy.api.dto - -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName - -data class ImageVariant(@Expose @SerializedName("url") val url: String) diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Images.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Images.kt deleted file mode 100644 index 96e0a1c28..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Images.kt +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy.api.dto - -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName - -data class Images( - @Expose @SerializedName("original") val original: Original, - @Expose @SerializedName("fixed_height") val fixedHeight: ImageVariant, - @Expose @SerializedName("fixed_width") val fixedWidth: ImageVariant, - @Expose @SerializedName("fixed_height_small") val fixedHeightSmall: ImageVariant, - @Expose @SerializedName("fixed_width_small") val fixedWidthSmall: ImageVariant, - @Expose @SerializedName("fixed_height_downsampled") val fixedHeightDownsampled: ImageVariant, - @Expose @SerializedName("fixed_width_downsampled") val fixedWidthDownsampled: ImageVariant, - @Expose @SerializedName("downsized") val downsized: ImageVariant, - @Expose @SerializedName("downsized_small") val downsizedSmall: ImageVariant, - @Expose @SerializedName("preview_gif") val previewGif: ImageVariant, -) diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Meta.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Meta.kt deleted file mode 100644 index 84ec10fad..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Meta.kt +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy.api.dto - -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName - -data class Meta( - @SerializedName("status") @Expose val status: Int, - @SerializedName("msg") @Expose val message: String -) diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Original.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Original.kt deleted file mode 100644 index da5e1f63b..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/Original.kt +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy.api.dto - -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName - -data class Original(@Expose @SerializedName("url") val url: String) diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/SearchGIFResponse.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/SearchGIFResponse.kt deleted file mode 100644 index b369b6984..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/SearchGIFResponse.kt +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy.api.dto - -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName - -data class SearchGIFResponse( - @SerializedName("data") @Expose val data: Data, - @SerializedName("meta") @Expose val meta: Meta -) diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/SearchGIFsResponse.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/SearchGIFsResponse.kt deleted file mode 100644 index 8351f89b8..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/api/dto/SearchGIFsResponse.kt +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy.api.dto - -import com.google.gson.annotations.Expose -import com.google.gson.annotations.SerializedName - -data class SearchGIFsResponse( - @SerializedName("data") @Expose val data: List, - @SerializedName("meta") @Expose val meta: Meta -) diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/placeholder/GifColorPlaceholder.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/placeholder/GifColorPlaceholder.kt deleted file mode 100644 index d2c337e79..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/placeholder/GifColorPlaceholder.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy.placeholder - -import android.graphics.drawable.Drawable -import androidx.annotation.ColorInt -import com.facebook.drawee.drawable.RoundedColorDrawable -import kotlin.math.abs - -class GifColorPlaceholder private constructor(@field:ColorInt @param:ColorInt private val color: Int, private val cornerRadius: Float) : - GifPlaceholder { - override fun asDrawable(): Drawable = RoundedColorDrawable(cornerRadius, color) - - companion object { - private const val DEFAULT_CORNER_RADIUS = 20f - private val BUILT_IN_COLORS = intArrayOf(-0xff481b, -0x1a25ad, -0x76d11b, -0xff1a77, -0x1aa3a4) - - @JvmOverloads - fun generate(target: Any, cornerRadius: Float = DEFAULT_CORNER_RADIUS): GifColorPlaceholder = - GifColorPlaceholder(BUILT_IN_COLORS[abs(target.hashCode()) % BUILT_IN_COLORS.size], cornerRadius) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/placeholder/GifPlaceholder.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/placeholder/GifPlaceholder.kt deleted file mode 100644 index 6bccd644c..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/placeholder/GifPlaceholder.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy.placeholder - -import android.graphics.drawable.Drawable -import com.tari.android.wallet.ui.common.giphy.placeholder.GifColorPlaceholder.Companion.generate - -interface GifPlaceholder { - fun asDrawable(): Drawable - - companion object { - fun color(target: Any): GifPlaceholder = generate(target) - - fun color(target: Any, cornerRadius: Float): GifPlaceholder = generate(target, cornerRadius) - } -} - diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GifState.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GifState.kt deleted file mode 100644 index 59c6367ac..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GifState.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy.presentation - -import com.tari.android.wallet.ui.common.giphy.repository.GifItem - -sealed class GifState { - open fun handle(consumer: GifStateConsumer) = Unit - - data object LoadingState : GifState() { - override fun handle(consumer: GifStateConsumer) = consumer.onGifLoadingState() - } - - data object ResourceReady : GifState() { - override fun handle(consumer: GifStateConsumer) = consumer.onGifResourceReady() - } - - data object ErrorState : GifState() { - override fun handle(consumer: GifStateConsumer) = consumer.onGifErrorState() - } - - data class SuccessState(private val gifItem: GifItem) : GifState() { - override fun handle(consumer: GifStateConsumer) = consumer.onGifSuccessState(gifItem) - } - - data object NoGIFState : GifState() { - override fun handle(consumer: GifStateConsumer) = consumer.noGifState() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GifStateConsumer.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GifStateConsumer.kt deleted file mode 100644 index 64b7568a3..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GifStateConsumer.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy.presentation - -import com.tari.android.wallet.ui.common.giphy.repository.GifItem - -interface GifStateConsumer { - fun onGifLoadingState() - fun onGifResourceReady() - fun onGifErrorState() - fun onGifSuccessState(gifItem: GifItem) - fun noGifState() -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GifViewModel.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GifViewModel.kt deleted file mode 100644 index 39ec5c905..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GifViewModel.kt +++ /dev/null @@ -1,59 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy.presentation - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import com.tari.android.wallet.util.extension.addTo -import com.tari.android.wallet.model.tx.Tx -import com.tari.android.wallet.model.TxNote -import com.tari.android.wallet.ui.common.giphy.presentation.GifState.ErrorState -import com.tari.android.wallet.ui.common.giphy.presentation.GifState.LoadingState -import com.tari.android.wallet.ui.common.giphy.presentation.GifState.NoGIFState -import com.tari.android.wallet.ui.common.giphy.presentation.GifState.SuccessState -import com.tari.android.wallet.ui.common.giphy.repository.GiphyRestService -import com.tari.android.wallet.ui.common.giphy.repository.GifItem -import io.reactivex.Observable -import io.reactivex.ObservableEmitter -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.CompositeDisposable -import io.reactivex.schedulers.Schedulers -import io.reactivex.subjects.BehaviorSubject - -class GifViewModel(private val repository: GiphyRestService) { - private val compositeDisposable = CompositeDisposable() - private val subject = BehaviorSubject.create() - private val _gifState = MutableLiveData() - val gifState: LiveData get() = _gifState - - init { - _gifState.postValue(NoGIFState) - subject - .map(TxNote.Companion::fromTx) - .map { it.gifId ?: "" } - .switchMap { - if (it.isEmpty()) Observable.just(NoGIFState) - else Observable.create { e: ObservableEmitter -> retrieveGif(e, it) } - .map { state -> SuccessState(state) } - .onErrorReturn { ErrorState } - .startWith(LoadingState) - .subscribeOn(Schedulers.io()) - .doOnError { } - } - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { _gifState.postValue(it) } - .addTo(compositeDisposable) - } - - private fun retrieveGif(e: ObservableEmitter, id: String) { - try { - e.onNext(repository.getById(id)) - } catch (exception: Throwable) { - e.tryOnError(exception) - } - } - - fun onNewTx(tx: Tx) = subject.onNext(tx) - - fun retry() { - subject.value?.let(subject::onNext) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GlideGifListener.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GlideGifListener.kt deleted file mode 100644 index ed22d7654..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/presentation/GlideGifListener.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy.presentation - -import com.bumptech.glide.load.DataSource -import com.bumptech.glide.load.engine.GlideException -import com.bumptech.glide.load.resource.gif.GifDrawable -import com.bumptech.glide.request.RequestListener -import com.bumptech.glide.request.target.Target - -class GlideGifListener(private val consumer: GifStateConsumer) : RequestListener { - - override fun onLoadFailed( - e: GlideException?, - model: Any?, - target: Target, - isFirstResource: Boolean - ): Boolean { - consumer.onGifErrorState() - return true - } - - override fun onResourceReady( - resource: GifDrawable, - model: Any, - target: Target?, - dataSource: DataSource, - isFirstResource: Boolean - ): Boolean { - consumer.onGifResourceReady() - return false - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/repository/GifItem.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/repository/GifItem.kt deleted file mode 100644 index b3b47bbc0..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/repository/GifItem.kt +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy.repository - -import android.net.Uri -import android.os.Parcelable -import kotlinx.parcelize.Parcelize - -@Parcelize -data class GifItem( - val id: String, - val embedUri: Uri, - val uri: Uri, -) : Parcelable { - override fun toString(): String = "GIFItem(id='$id', embedUri=$embedUri, uri=$uri)" -} diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/repository/GiphyRepository.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/repository/GiphyRepository.kt deleted file mode 100644 index 3d7722f98..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/repository/GiphyRepository.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.tari.android.wallet.ui.common.giphy.repository - -import android.net.Uri -import com.orhanobut.logger.Logger -import com.tari.android.wallet.ui.common.giphy.api.GIFSearchException -import com.tari.android.wallet.ui.common.giphy.api.GiphyRESTGateway -import com.tari.android.wallet.ui.common.giphy.api.dto.SearchGIFResponse -import com.tari.android.wallet.ui.common.giphy.api.dto.SearchGIFsResponse -import retrofit2.Response - -class GiphyRepository(private val gateway: GiphyRESTGateway) : GiphyRestService { - - private val logger - get() = Logger.t(GiphyRepository::class.simpleName) - - override fun getAll(query: String, limit: Int): List { - val response: Response = gateway.searchGIFs(query, limit).execute() - val body = response.body() - return if (response.isSuccessful && body != null && body.meta.status in 200..299) - body.data.map { GifItem(it.id, Uri.parse(it.embedUrl), Uri.parse(it.images.fixedWidth.url)) } - else { - val exception = GIFSearchException(body?.meta?.message ?: response.message() ?: response.errorBody()?.string()) - logger.i(exception.toString() + "Get all was failed") - throw exception - } - } - - override fun getById(id: String): GifItem { - val request = gateway.getGIFByID(id) - val response: Response = request.execute() - val body = response.body() - return if (response.isSuccessful && body != null && body.meta.status in 200..299) - body.data.let { GifItem(it.id, Uri.parse(it.embedUrl), Uri.parse(it.images.fixedWidth.url)) } - else { - val exception = GIFSearchException(body?.meta?.message ?: response.message() ?: response.errorBody()?.string()) - logger.i(exception.message.orEmpty()) - logger.i(exception.stackTraceToString()) - logger.i(exception. toString() + "Get by id was failed") - throw exception - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/repository/GiphyRestService.kt b/app/src/main/java/com/tari/android/wallet/ui/common/giphy/repository/GiphyRestService.kt deleted file mode 100644 index 9f7505371..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/giphy/repository/GiphyRestService.kt +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright 2020 The Tari Project - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the - * following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of - * its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package com.tari.android.wallet.ui.common.giphy.repository - -interface GiphyRestService { - fun getAll(query: String, limit: Int): List - - fun getById(id: String): GifItem -} - diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/recyclerView/CommonViewHolder.kt b/app/src/main/java/com/tari/android/wallet/ui/common/recyclerView/CommonViewHolder.kt index 2f533be5e..bdca8e29e 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/common/recyclerView/CommonViewHolder.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/common/recyclerView/CommonViewHolder.kt @@ -4,21 +4,14 @@ import android.view.View import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding -abstract class CommonViewHolder(val ui: VB) : RecyclerView.ViewHolder(ui.root) { +abstract class CommonViewHolder(val ui: VB) : RecyclerView.ViewHolder(ui.root) { var item: T? = null - val itemClass : Class? - get() = item?.javaClass - - var clickView : View? = null + var clickView: View? = null open fun bind(item: T) { this.item = item } - - open fun onAttach() = Unit - - open fun onDetach() = Unit } diff --git a/app/src/main/java/com/tari/android/wallet/ui/common/recyclerView/viewHolders/DividerViewHolder.kt b/app/src/main/java/com/tari/android/wallet/ui/common/recyclerView/viewHolders/DividerViewHolder.kt deleted file mode 100644 index 4c9175804..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/common/recyclerView/viewHolders/DividerViewHolder.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.tari.android.wallet.ui.common.recyclerView.viewHolders - -import com.tari.android.wallet.databinding.ItemDividerBinding -import com.tari.android.wallet.ui.common.recyclerView.CommonViewHolder -import com.tari.android.wallet.ui.common.recyclerView.ViewHolderBuilder -import com.tari.android.wallet.ui.common.recyclerView.items.DividerViewHolderItem - -class DividerViewHolder(view: ItemDividerBinding) : CommonViewHolder(view) { - companion object { - fun getBuilder(): ViewHolderBuilder = - ViewHolderBuilder(ItemDividerBinding::inflate, DividerViewHolderItem::class.java) { DividerViewHolder(it as ItemDividerBinding) } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/component/common/CommonView.kt b/app/src/main/java/com/tari/android/wallet/ui/component/common/CommonView.kt index 92cf14eea..f69adc8d4 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/component/common/CommonView.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/component/common/CommonView.kt @@ -2,17 +2,16 @@ package com.tari.android.wallet.ui.component.common import android.content.Context import android.content.Intent -import android.net.Uri import android.util.AttributeSet import android.view.LayoutInflater import android.view.ViewGroup import android.widget.LinearLayout +import androidx.core.net.toUri import androidx.lifecycle.LifecycleOwner import androidx.viewbinding.ViewBinding import com.tari.android.wallet.ui.common.CommonViewModel import com.tari.android.wallet.ui.dialog.modular.ModularDialog import contacts.ui.view.activity -import androidx.core.net.toUri abstract class CommonView : LinearLayout { diff --git a/app/src/main/java/com/tari/android/wallet/ui/component/mainList/MutedBackPressedCallback.kt b/app/src/main/java/com/tari/android/wallet/ui/component/mainList/MutedBackPressedCallback.kt deleted file mode 100644 index 39d3efc3c..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/component/mainList/MutedBackPressedCallback.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.tari.android.wallet.ui.component.mainList - -import androidx.activity.OnBackPressedCallback - -class MutedBackPressedCallback(enabled: Boolean = true) : OnBackPressedCallback(enabled) { - override fun handleOnBackPressed() = Unit -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/TariBackground.kt b/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/TariBackground.kt index ecb2938a3..39f72f26b 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/TariBackground.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/TariBackground.kt @@ -30,13 +30,6 @@ abstract class TariBackground(context: Context, attrs: AttributeSet) : FrameLayo updateBack() } - fun updateBack(r: Float? = null, elevation: Float? = null, backColor: Int? = null) { - r?.let { radius = it } - elevation?.let { backElevation = it } - backColor?.let { this.backColor = it } - updateBack() - } - private fun updateBack() { when { backElevation != 0.0F -> { diff --git a/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/TariSwitchedBackground.kt b/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/TariSwitchedBackground.kt index 9c288279a..b4f34ee7b 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/TariSwitchedBackground.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/TariSwitchedBackground.kt @@ -23,11 +23,6 @@ class TariSwitchedBackground(context: Context, attrs: AttributeSet) : TariBackgr } } - fun switch(turnedOn: Boolean) { - this.isTurnedOn = turnedOn - applySwitch() - } - private fun applySwitch() { if (isTurnedOn) { restoreFullBack() diff --git a/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/obsolete/TariBackgroundConstraint.kt b/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/obsolete/TariBackgroundConstraint.kt index ff8f08cad..df06a1c40 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/obsolete/TariBackgroundConstraint.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/obsolete/TariBackgroundConstraint.kt @@ -27,10 +27,6 @@ abstract class TariBackgroundConstraint(context: Context, attrs: AttributeSet) : updateBack() } - fun restoreFullBack() { - updateBack() - } - fun updateBack(r: Float? = null, elevation: Float? = null, backColor: Int? = null) { r?.let { radius = it } elevation?.let { backElevation = it } @@ -65,11 +61,6 @@ abstract class TariBackgroundConstraint(context: Context, attrs: AttributeSet) : background = shapeDrawable } - fun reset() { - background = null - elevation = 0.0F - } - override fun onAttachedToWindow() { super.onAttachedToWindow() (parent as? ViewGroup)?.let { diff --git a/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/obsolete/TariSwitchedBackgroundConstraint.kt b/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/obsolete/TariSwitchedBackgroundConstraint.kt deleted file mode 100644 index ed8f5507e..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/component/tari/background/obsolete/TariSwitchedBackgroundConstraint.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.tari.android.wallet.ui.component.tari.background.obsolete - -import android.content.Context -import android.util.AttributeSet -import com.tari.android.wallet.R -import com.tari.android.wallet.ui.common.domain.PaletteManager -import com.tari.android.wallet.util.extension.obtain -import com.tari.android.wallet.util.extension.runRecycle - -@Deprecated("This is an obsolete class inheriting ConstraintLayout. Use TariSwitchedBackground instead.") -class TariSwitchedBackgroundConstraint(context: Context, attrs: AttributeSet) : TariBackgroundConstraint(context, attrs) { - - private var isTurnedOn = false - - init { - val backColor = PaletteManager.getBackgroundPrimary(context) - - obtain(attrs, R.styleable.TariQrBackground).runRecycle { - isTurnedOn = getBoolean(R.styleable.TariSwitchedBackground_turnedOn, false) - val r = getDimension(R.styleable.TariSwitchedBackground_cornerRadius, 0.0F) - val elevation = getDimension(R.styleable.TariSwitchedBackground_elevation, 0.0F) - setFullBack(r, elevation, backColor) - applySwitch() - } - } - - fun switch(turnedOn: Boolean) { - this.isTurnedOn = turnedOn - applySwitch() - } - - private fun applySwitch() { - if (isTurnedOn) { - restoreFullBack() - } else { - reset() - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/component/tari/toolbar/TariToolbar.kt b/app/src/main/java/com/tari/android/wallet/ui/component/tari/toolbar/TariToolbar.kt index af87a0fe0..00576d93a 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/component/tari/toolbar/TariToolbar.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/component/tari/toolbar/TariToolbar.kt @@ -1,13 +1,12 @@ package com.tari.android.wallet.ui.component.tari.toolbar import android.content.Context +import android.content.res.Resources.getSystem import android.util.AttributeSet import android.view.LayoutInflater import android.widget.FrameLayout -import com.giphy.sdk.ui.utils.px import com.tari.android.wallet.R import com.tari.android.wallet.databinding.TariToolbarBinding -import com.tari.android.wallet.util.extension.gone import com.tari.android.wallet.util.extension.invisible import com.tari.android.wallet.util.extension.obtain import com.tari.android.wallet.util.extension.repopulate @@ -68,9 +67,9 @@ class TariToolbar(context: Context, attrs: AttributeSet) : FrameLayout(context, } // set the same margin for the both sides if toolbar actions are present - val maxMargin = 16.px + max(leftArgs.size, rightArgs.size) * 48.px - ui.toolbarTitle.setStartMargin(maxMargin - leftArgs.size * 48.px) - ui.toolbarTitle.setEndMargin(maxMargin - rightArgs.size * 48.px) + val maxMargin = 16.dp + max(leftArgs.size, rightArgs.size) * 48.dp + ui.toolbarTitle.setStartMargin(maxMargin - leftArgs.size * 48.dp) + ui.toolbarTitle.setEndMargin(maxMargin - rightArgs.size * 48.dp) } fun showRightActions() { @@ -81,11 +80,5 @@ class TariToolbar(context: Context, attrs: AttributeSet) : FrameLayout(context, ui.toolbarRightActions.invisible() } - fun showLeftActions() { - ui.toolbarLeftActions.visible() - } - - fun hideLeftActions() { - ui.toolbarLeftActions.gone() - } + val Int.dp: Int get() = (this / getSystem().displayMetrics.density).toInt() } \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/compose/components/TariSearchField.kt b/app/src/main/java/com/tari/android/wallet/ui/compose/components/TariSearchField.kt new file mode 100644 index 000000000..b79d8c046 --- /dev/null +++ b/app/src/main/java/com/tari/android/wallet/ui/compose/components/TariSearchField.kt @@ -0,0 +1,114 @@ +package com.tari.android.wallet.ui.compose.components + +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Clear +import androidx.compose.material.icons.rounded.Search +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.material3.TextFieldDefaults +import androidx.compose.material3.TextFieldDefaults.indicatorLine +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.tari.android.wallet.ui.compose.PreviewSecondarySurface +import com.tari.android.wallet.ui.compose.TariDesignSystem +import com.tari.android.wallet.ui.screen.settings.themeSelector.TariTheme + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TariSearchField( + searchQuery: String, + onQueryChanged: (String) -> Unit, + hint: String, + modifier: Modifier = Modifier, +) { + TextField( + value = searchQuery, + onValueChange = onQueryChanged, + modifier = modifier + .clip(TariDesignSystem.shapes.button) + .indicatorLine( + enabled = false, + isError = false, + interactionSource = remember { + MutableInteractionSource() + }, + colors = TextFieldDefaults.colors( + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + disabledIndicatorColor = Color.Transparent, + ), + focusedIndicatorLineThickness = 0.dp, + unfocusedIndicatorLineThickness = 0.dp + ), + placeholder = { + Text( + text = hint, + style = TariDesignSystem.typography.body1, + ) + }, + leadingIcon = { + Icon( + imageVector = Icons.Rounded.Search, + tint = TariDesignSystem.colors.componentsNavbarIcons, + contentDescription = null, + ) + }, + trailingIcon = { + if (searchQuery.isNotEmpty()) { + IconButton(onClick = { onQueryChanged("") }) { + Icon( + imageVector = Icons.Rounded.Clear, + tint = TariDesignSystem.colors.componentsNavbarIcons, + contentDescription = null, + ) + } + } + }, + colors = TextFieldDefaults.colors( + focusedContainerColor = TariDesignSystem.colors.backgroundPrimary, + focusedTextColor = TariDesignSystem.colors.textPrimary, + unfocusedContainerColor = TariDesignSystem.colors.backgroundPrimary, + unfocusedTextColor = TariDesignSystem.colors.textPrimary, + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + disabledIndicatorColor = Color.Transparent, + cursorColor = TariDesignSystem.colors.primaryMain, + ), + textStyle = TariDesignSystem.typography.body1.copy(color = TariDesignSystem.colors.textPrimary), + ) +} + +@Preview +@Composable +private fun TariSearchFieldPreview() { + PreviewSecondarySurface(TariTheme.Light) { + TariSearchField( + modifier = Modifier + .fillMaxWidth() + .padding(20.dp), + searchQuery = "Query", + onQueryChanged = {}, + hint = "Hint", + ) + + TariSearchField( + modifier = Modifier + .fillMaxWidth() + .padding(20.dp), + searchQuery = "", + onQueryChanged = {}, + hint = "Hint", + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/compose/components/TariTopBar.kt b/app/src/main/java/com/tari/android/wallet/ui/compose/components/TariTopBar.kt index 26c76485b..979e3e4d3 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/compose/components/TariTopBar.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/compose/components/TariTopBar.kt @@ -58,6 +58,7 @@ fun TariTopBar( modifier = Modifier .fillMaxWidth() .align(Alignment.Center) + .padding(horizontal = if (onBack != null) 64.dp else 16.dp) .padding(8.dp), style = TariDesignSystem.typography.headingLarge, textAlign = TextAlign.Center, @@ -92,4 +93,18 @@ fun TariTopBarPreview() { ) } } +} + +@Composable +@Preview +fun TariTopBarLongTitlePreview() { + PreviewSecondarySurface(TariTheme.Light, Modifier.fillMaxSize()) { + Column { + TariTopBar( + title = "Toolbar very long title that should be truncated at some point and not overflow the screen", + showShadow = false, + onBack = {}, + ) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/home/overview/HomeOverviewViewModel.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/home/overview/HomeOverviewViewModel.kt index 968edc314..1aeeb141c 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/home/overview/HomeOverviewViewModel.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/screen/home/overview/HomeOverviewViewModel.kt @@ -84,8 +84,6 @@ class HomeOverviewViewModel : CommonViewModel() { val uiState = _uiState.asStateFlow() init { - component.inject(this) - collectFlow(balanceStateHandler.balanceState) { balanceInfo -> _uiState.update { it.copy(balance = balanceInfo) } stagedSecurityDelegate.handleStagedSecurity(balanceInfo) diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/home/overview/widget/TxItem.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/home/overview/widget/TxItem.kt index d76fd7dde..a9d148e8b 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/home/overview/widget/TxItem.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/screen/home/overview/widget/TxItem.kt @@ -22,7 +22,6 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.giphy.sdk.analytics.GiphyPingbacks.context import com.tari.android.wallet.R import com.tari.android.wallet.application.walletManager.WalletConfig import com.tari.android.wallet.data.tx.TxDto @@ -142,7 +141,7 @@ fun TxDto.itemMessage(): String { } contact != null && contact.contactInfo.getAlias().isNotEmpty() || txUser.walletAddress.isUnknownUser() -> { - val alias = contact?.contactInfo?.getAlias().orEmpty().ifBlank { context.getString(R.string.unknown_source) } + val alias = contact?.contactInfo?.getAlias().orEmpty().ifBlank { stringResource(R.string.unknown_source) } when (tx.direction) { Tx.Direction.INBOUND -> stringResource(R.string.tx_list_sent_a_payment, alias) Tx.Direction.OUTBOUND -> stringResource(R.string.tx_list_you_paid_with_alias, alias) diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/pinCode/EnterPinCodeFragment.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/pinCode/EnterPinCodeFragment.kt index 8da04809a..4578d45e8 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/pinCode/EnterPinCodeFragment.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/screen/pinCode/EnterPinCodeFragment.kt @@ -127,6 +127,7 @@ class EnterPinCodeFragment : CommonXmlFragment(ChooseGIFDialogFragment.MEDIA_DELIVERY_KEY) ?: return - gifContainer.gifItem = media.let { - GifItem(it.id, Uri.parse(it.embedUrl), Uri.parse(it.images.original!!.gifUrl)) - } - updateSliderState() - } - } - - override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) - gifContainer.save(outState) - } - - override fun onDestroyView() { - gifContainer.dispose() - super.onDestroyView() - } - @SuppressLint("ClickableViewAccessibility") - private fun setupUI(state: Bundle?) { - gifContainer = GifContainer(Glide.with(this), ui.gifContainerView, ui.gifImageView, ui.searchGiphyContainerView, state) - if (gifContainer.gifItem != null) changeScrollViewBottomConstraint(R.id.slide_button_container_view) - adapter = GifThumbnailAdapter(Glide.with(this), ::handleViewMoreGIFsIntent) { - if (gifContainer.isShown) { - changeScrollViewBottomConstraint(R.id.slide_button_container_view) - gifContainer.gifItem = it - updateSliderState() - } - } - + private fun setupUI() { displayAliasOrEmojiId() ui.progressBar.setWhite() ui.noteEditText.addTextChangedListener(afterTextChanged = { updateSliderState() }) @@ -183,18 +116,12 @@ class AddNoteFragment : CommonXmlFragment - private lateinit var searchSubscription: Disposable - - @Inject - lateinit var giphyKeywordsRepository: GiphyKeywordsRepository - - override fun onAttach(context: Context) { - super.onAttach(context) - DiContainer.appComponent.inject(this) - } - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = - FragmentChooseGifBinding.inflate(inflater, container, false).also { ui = it }.root - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - val searchSubject = BehaviorSubject.create() - searchSubscription = searchSubject - .debounce(500L, TimeUnit.MILLISECONDS) - .map { it.ifEmpty { giphyKeywordsRepository.getCurrent() } } - .map { GPHContent.searchQuery(it, mediaType = MediaType.gif) } - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { ui.giphyGridView.content = it } - setupUI(searchSubject) - } - - override fun onDestroyView() { - searchSubscription.dispose() - super.onDestroyView() - } - - private fun setupUI(observer: Observer) { - ui.giphyGridView.content = GPHContent.searchQuery(giphyKeywordsRepository.getCurrent(), MediaType.gif) - ui.giphyGridView.callback = object : GPHGridCallback { - override fun contentDidUpdate(resultCount: Int) = Unit - - override fun didSelectMedia(media: Media) { - val intent = Intent().apply { putExtra(MEDIA_DELIVERY_KEY, media) } - targetFragment!!.onActivityResult(targetRequestCode, Activity.RESULT_OK, intent) - behavior.state = BottomSheetBehavior.STATE_HIDDEN - } - } - ui.gifSearchEditText.addTextChangedListener(afterTextChanged = afterChanged@{ observer.onNext(it?.toString() ?: return@afterChanged) }) - } - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog = - BottomSheetDialog(requireContext(), R.style.ChooseGIFDialog) - .apply { setOnShowListener { setupDialog(this) } } - - private fun setupDialog(bottomSheetDialog: BottomSheetDialog) { - val bottomSheet: View = bottomSheetDialog.findViewById(R.id.design_bottom_sheet)!! - behavior = BottomSheetBehavior() - behavior.isHideable = true - behavior.skipCollapsed = true - behavior.state = BottomSheetBehavior.STATE_HIDDEN - val layoutParams = bottomSheet.layoutParams as CoordinatorLayout.LayoutParams - layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT - layoutParams.behavior = behavior - bottomSheetDialog.setOnKeyListener { _, keyCode, _ -> - (keyCode == KeyEvent.KEYCODE_BACK && behavior.state != BottomSheetBehavior.STATE_HIDDEN && - behavior.state != BottomSheetBehavior.STATE_COLLAPSED).also { - if (it) behavior.state = BottomSheetBehavior.STATE_HIDDEN - } - } - ui.root.doOnNextLayout { - behavior.state = BottomSheetBehavior.STATE_EXPANDED - behavior.addCallback( - onStateChange = { _, state -> - if (state == BottomSheetBehavior.STATE_HIDDEN || state == BottomSheetBehavior.STATE_COLLAPSED) dismiss() - }, - onSlided = { _, slideOffset -> - val alpha = (slideOffset.coerceIn(0F, 1F) * 255).toInt() - val color = Color.argb(alpha, 0, 0, 0) - (bottomSheet.parent as View).setBackgroundColor(color) - } - ) - } - } - - private fun BottomSheetBehavior<*>.addCallback( - onStateChange: (View, Int) -> Unit = { _, _ -> }, - onSlided: (View, Float) -> Unit = { _, _ -> }, - ) = addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { - override fun onStateChanged(bottomSheet: View, newState: Int) = onStateChange(bottomSheet, newState) - - override fun onSlide(bottomSheet: View, slideOffset: Float) = onSlided(bottomSheet, slideOffset) - }) - - companion object { - @Suppress("DEPRECATION") - fun newInstance() = ChooseGIFDialogFragment() - const val MEDIA_DELIVERY_KEY = "key_media" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GIFsPanelAnimation.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GIFsPanelAnimation.kt deleted file mode 100644 index 1ada3cce8..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GIFsPanelAnimation.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.tari.android.wallet.ui.screen.send.addNote.gif - -import android.animation.ValueAnimator -import android.view.View -import com.tari.android.wallet.util.extension.removeListenersAndCancel - -class GIFsPanelAnimation(private val view: View) { - private var state = GIFsPanelAnimationState(TranslationDirection.UP, null) - val isViewShown - get() = state.direction == TranslationDirection.UP - - fun show() { - state.animator?.cancel() - state = createState(TranslationDirection.UP, to = 0F) - } - - fun hide() { - state.animator?.cancel() - state = createState(TranslationDirection.DOWN, to = view.height.toFloat()) - } - - private fun createState(direction: TranslationDirection, to: Float) = - GIFsPanelAnimationState(direction, ValueAnimator.ofFloat(view.translationY, to).apply { - duration = TRANSLATION_DURATION - addUpdateListener { - view.translationY = it.animatedValue as Float - } - start() - }) - - fun dispose() { - this.state.animator?.removeListenersAndCancel() - } - - private companion object { - private const val TRANSLATION_DURATION = 300L - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GIFsPanelAnimationState.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GIFsPanelAnimationState.kt deleted file mode 100644 index 9643226b0..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GIFsPanelAnimationState.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.tari.android.wallet.ui.screen.send.addNote.gif - -import android.animation.Animator - -data class GIFsPanelAnimationState(val direction: TranslationDirection, val animator: Animator?) \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GifContainer.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GifContainer.kt deleted file mode 100644 index 2be26ab8c..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GifContainer.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.tari.android.wallet.ui.screen.send.addNote.gif - -import android.os.Bundle -import android.view.View -import android.widget.ImageView -import com.bumptech.glide.RequestManager -import com.bumptech.glide.load.resource.bitmap.RoundedCorners -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions -import com.bumptech.glide.request.RequestOptions -import com.tari.android.wallet.ui.common.giphy.placeholder.GifPlaceholder -import com.tari.android.wallet.ui.common.giphy.repository.GifItem -import com.tari.android.wallet.util.extension.gone -import com.tari.android.wallet.util.extension.parcelable -import com.tari.android.wallet.util.extension.visible - -class GifContainer( - private val glide: RequestManager, - private val gifContainerView: View, - private val gifView: ImageView, - thumbnailsContainer: View, - state: Bundle? -) { - - private val transformation = RequestOptions().transform(RoundedCorners(10)) - private var animation = GIFsPanelAnimation(thumbnailsContainer) - - val isShown: Boolean - get() = animation.isViewShown - - var gifItem: GifItem? = null - set(value) { - field = value - if (value == null) { - glide.clear(gifView) - showContainer() - } else { - showGif() - glide.asGif() - .placeholder(GifPlaceholder.color(value).asDrawable()) - .apply(transformation) - .load(value.uri) - .transition(DrawableTransitionOptions.withCrossFade(250)) - .into(gifView) - } - } - - init { - gifItem = state?.parcelable(ThumbnailGifViewModel.KEY_GIF) - } - - private fun showContainer() { - animation.show() - gifContainerView.gone() - } - - private fun showGif() { - animation.hide() - gifContainerView.visible() - } - - fun save(bundle: Bundle) { - gifItem?.run { bundle.putParcelable(ThumbnailGifViewModel.KEY_GIF, this) } - } - - fun dispose() { - animation.dispose() - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GifThumbnailAdapter.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GifThumbnailAdapter.kt deleted file mode 100644 index c9b28f2b4..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/GifThumbnailAdapter.kt +++ /dev/null @@ -1,89 +0,0 @@ -package com.tari.android.wallet.ui.screen.send.addNote.gif - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.RequestManager -import com.bumptech.glide.load.resource.bitmap.CenterCrop -import com.bumptech.glide.load.resource.bitmap.RoundedCorners -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions -import com.bumptech.glide.request.RequestOptions -import com.tari.android.wallet.R -import com.tari.android.wallet.util.extension.repopulate -import com.tari.android.wallet.ui.common.giphy.placeholder.GifPlaceholder -import com.tari.android.wallet.ui.common.giphy.repository.GifItem -import com.tari.android.wallet.ui.screen.send.addNote.gif.GifThumbnailAdapter.GIFThumbnailViewHolder - -class GifThumbnailAdapter( - private val glide: RequestManager, - private val onShowMoreClick: () -> Unit, - private val onGifClick: (GifItem) -> Unit -) : RecyclerView.Adapter() { - - private val gifs = mutableListOf() - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): GIFThumbnailViewHolder = - if (viewType == VIEW_TYPE_MORE) - parent.inflate(R.layout.item_show_more_gifs) - .run { ShowMoreViewHolder(this, onShowMoreClick) } - else parent.inflate(R.layout.item_thumbnail_gif) - .run { GIFViewHolder(this, glide, onGifClick) } - - private fun ViewGroup.inflate(id: Int) = LayoutInflater.from(context) - .inflate(id, this, false) - - override fun onBindViewHolder(holder: GIFThumbnailViewHolder, position: Int) = - holder.bind(position, gifs) - - override fun getItemCount(): Int = if (gifs.size == 0) 0 else gifs.size + 1 - - override fun getItemViewType(position: Int) = - if (position == gifs.size) VIEW_TYPE_MORE else VIEW_TYPE_GIF - - fun repopulate(gifs: Iterable) { - this.gifs.repopulate(gifs) - super.notifyDataSetChanged() - } - - private companion object { - private const val VIEW_TYPE_GIF = 0 - private const val VIEW_TYPE_MORE = 1 - } - - abstract class GIFThumbnailViewHolder(view: View) : RecyclerView.ViewHolder(view) { - abstract fun bind(position: Int, gifItems: List) - } - - class GIFViewHolder( - view: View, - private val glide: RequestManager, - private val onGifClick: (GifItem) -> Unit - ) : - GIFThumbnailViewHolder(view) { - - private val imageView = view.findViewById(R.id.image_view) - - override fun bind(position: Int, gifItems: List) { - val gif = gifItems[position] - itemView.setOnClickListener { onGifClick(gif) } - glide.asGif() - .load(gif.uri) - .placeholder(GifPlaceholder.color(position).asDrawable()) - .apply(RequestOptions().transform(CenterCrop(), RoundedCorners(24))) - .transition(DrawableTransitionOptions.withCrossFade(250)) - .into(imageView) - } - } - - class ShowMoreViewHolder(view: View, onClick: () -> Unit) : GIFThumbnailViewHolder(view) { - - init { - view.setOnClickListener { onClick() } - } - - override fun bind(position: Int, gifItems: List) { - - } - } -} diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/HorizontalInnerMarginDecoration.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/HorizontalInnerMarginDecoration.kt deleted file mode 100644 index 145104d71..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/HorizontalInnerMarginDecoration.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.tari.android.wallet.ui.screen.send.addNote.gif - -import android.graphics.Rect -import android.view.View -import androidx.recyclerview.widget.RecyclerView - -class HorizontalInnerMarginDecoration(private val value: Int) : RecyclerView.ItemDecoration() { - - override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) { - if (parent.getChildLayoutPosition(view) > 0) outRect.left = value - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/ThumbnailGifViewModel.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/ThumbnailGifViewModel.kt deleted file mode 100644 index f7008b626..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/ThumbnailGifViewModel.kt +++ /dev/null @@ -1,64 +0,0 @@ -package com.tari.android.wallet.ui.screen.send.addNote.gif - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.viewModelScope -import com.tari.android.wallet.ui.common.CommonViewModel -import com.tari.android.wallet.ui.common.giphy.GiphyKeywordsRepository -import com.tari.android.wallet.ui.common.giphy.repository.GifItem -import com.tari.android.wallet.ui.common.giphy.repository.GiphyRestService -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import javax.inject.Inject - -class ThumbnailGifViewModel : CommonViewModel() { - - init { - component.inject(this) - } - - @Inject - lateinit var gifsRepository: GiphyRestService - - @Inject - lateinit var giphyKeywordsRepository: GiphyKeywordsRepository - - - private val _state = MutableLiveData() - val state: LiveData get() = _state - - init { - fetchGIFs() - } - - private fun fetchGIFs() { - viewModelScope.launch(Dispatchers.Main) { - _state.value = GifsState() - try { - val gifs = withContext(Dispatchers.IO) { - gifsRepository.getAll(giphyKeywordsRepository.getNext(), THUMBNAIL_REQUEST_LIMIT) - } - _state.value = GifsState(gifs) - } catch (e: Exception) { - _state.value = GifsState(e) - } - } - } - - class GifsState private constructor(val gifItems: List?, val error: Exception?) { - // Loading state - constructor() : this(null, null) - constructor(gifItems: List) : this(gifItems, null) - constructor(e: Exception) : this(null, e) - - val isError get() = error != null - val isSuccessful get() = gifItems != null - } - - companion object { - const val KEY_GIF = "key_gif" - const val REQUEST_CODE_GIF = 1535 - const val THUMBNAIL_REQUEST_LIMIT = 20 - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/TranslationDirection.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/TranslationDirection.kt deleted file mode 100644 index 974df00b7..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/send/addNote/gif/TranslationDirection.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.tari.android.wallet.ui.screen.send.addNote.gif - -enum class TranslationDirection { UP, DOWN } \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/send/transfer/TransferFragment.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/send/transfer/TransferFragment.kt index 239d6dfe0..a81bb252d 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/send/transfer/TransferFragment.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/screen/send/transfer/TransferFragment.kt @@ -15,9 +15,8 @@ import com.tari.android.wallet.databinding.FragmentTransferBinding import com.tari.android.wallet.ui.common.CommonXmlFragment import com.tari.android.wallet.ui.screen.contactBook.add.SelectUserContactFragment import com.tari.android.wallet.ui.screen.send.requestTari.RequestTariFragment -import com.tari.android.wallet.ui.screen.send.requestTari.RequestTariViewModel -class TransferFragment : CommonXmlFragment() { +class TransferFragment : CommonXmlFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?) = FragmentTransferBinding.inflate(inflater, container, false).also { ui = it }.root @@ -25,7 +24,7 @@ class TransferFragment : CommonXmlFragment) : Serializable \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/CommonTxListViewHolder.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/CommonTxListViewHolder.kt deleted file mode 100644 index 8f0d8f759..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/CommonTxListViewHolder.kt +++ /dev/null @@ -1,171 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.adapter - -import androidx.viewbinding.ViewBinding -import com.tari.android.wallet.R -import com.tari.android.wallet.application.walletManager.WalletConfig -import com.tari.android.wallet.data.contacts.model.ContactDto -import com.tari.android.wallet.databinding.ViewAddressShortSmallBinding -import com.tari.android.wallet.model.TxStatus -import com.tari.android.wallet.model.tx.CancelledTx -import com.tari.android.wallet.model.tx.CompletedTx -import com.tari.android.wallet.model.tx.PendingInboundTx -import com.tari.android.wallet.model.tx.PendingOutboundTx -import com.tari.android.wallet.model.tx.Tx -import com.tari.android.wallet.ui.common.domain.PaletteManager -import com.tari.android.wallet.ui.common.recyclerView.CommonViewHolder -import com.tari.android.wallet.ui.common.recyclerView.CommonViewHolderItem -import com.tari.android.wallet.ui.component.tari.TariTextView -import com.tari.android.wallet.ui.component.tari.background.TariRoundBackground -import com.tari.android.wallet.util.addressFirstEmojis -import com.tari.android.wallet.util.addressLastEmojis -import com.tari.android.wallet.util.addressPrefixEmojis -import com.tari.android.wallet.util.extension.gone -import com.tari.android.wallet.util.extension.makeTextBold -import com.tari.android.wallet.util.extension.safeCastTo -import com.tari.android.wallet.util.extension.string -import com.tari.android.wallet.util.extension.visible -import org.joda.time.DateTime -import org.joda.time.Hours -import org.joda.time.LocalDate -import org.joda.time.Minutes -import java.util.Locale - -abstract class CommonTxListViewHolder(val view: VB) : CommonViewHolder(view) { - - protected fun displayAliasOrEmojiId( - tx: Tx, - contact: ContactDto?, - participantTextView1: TariTextView, - participantTextView2: TariTextView, - emojiIdViewContainer: ViewAddressShortSmallBinding - ) { - val txUser = tx.tariContact - // display contact name or emoji id - when { - tx.isCoinbase -> { - participantTextView1.visible() - participantTextView2.gone() - emojiIdViewContainer.root.gone() - participantTextView1.text = string(R.string.tx_details_coinbase, tx.safeCastTo()?.minedHeight ?: "--") - } - - contact != null && contact.contactInfo.getAlias().isNotEmpty() || txUser.walletAddress.isUnknownUser() -> { - val alias = contact?.contactInfo?.getAlias().orEmpty().ifBlank { itemView.context.getString(R.string.unknown_source) } - val fullText = when (tx.direction) { - Tx.Direction.INBOUND -> string(R.string.tx_list_sent_a_payment, alias) - Tx.Direction.OUTBOUND -> string(R.string.tx_list_you_paid_with_alias, alias) - } - participantTextView1.visible() - participantTextView1.text = fullText.makeTextBold(itemView.context, string(R.string.tx_list_you), alias) - participantTextView2.gone() - emojiIdViewContainer.root.gone() - } - - tx.isOneSided -> { - val title = (string(R.string.tx_list_someone) + " " + string(R.string.tx_list_paid_you)) - .makeTextBold(itemView.context, string(R.string.tx_list_you), string(R.string.tx_list_someone)) - participantTextView1.visible() - participantTextView1.text = title - participantTextView2.gone() - emojiIdViewContainer.root.gone() - } - - else -> { // display emoji id - emojiIdViewContainer.root.visible() - emojiIdViewContainer.textViewEmojiPrefix.text = txUser.walletAddress.addressPrefixEmojis() - emojiIdViewContainer.textViewEmojiFirstPart.text = txUser.walletAddress.addressFirstEmojis() - emojiIdViewContainer.textViewEmojiLastPart.text = txUser.walletAddress.addressLastEmojis() - - when (tx.direction) { - Tx.Direction.INBOUND -> { - participantTextView1.gone() - participantTextView2.visible() - participantTextView2.text = string(R.string.tx_list_paid_you).makeTextBold(itemView.context, string(R.string.tx_list_you)) - } - - Tx.Direction.OUTBOUND -> { - participantTextView1.visible() - participantTextView1.text = string(R.string.tx_list_you_paid).makeTextBold(itemView.context, string(R.string.tx_list_you)) - participantTextView2.gone() - } - } - } - } - } - - protected fun displayAmount(tx: Tx, amountTextView: TariTextView, amountTextViewRound: TariRoundBackground) { - val amount = WalletConfig.amountFormatter.format(tx.amount.tariValue) - val context = itemView.context - val (amountText, textColor, backgroundColor) = when { - tx is CancelledTx -> Triple( - amount, - PaletteManager.getTextBody(context), - PaletteManager.getBackgroundPrimary(context) - ) - - tx is PendingInboundTx -> Triple( - "+$amount", - PaletteManager.getYellow(context), - PaletteManager.getSecondaryYellow(context) - ) - - tx is PendingOutboundTx -> Triple( - "-$amount", - PaletteManager.getYellow(context), - PaletteManager.getSecondaryYellow(context) - ) - - tx is CompletedTx && tx.status == TxStatus.MINED_UNCONFIRMED -> Triple( - when (tx.direction) { - Tx.Direction.OUTBOUND -> "-$amount" - Tx.Direction.INBOUND -> "+$amount" - }, - PaletteManager.getYellow(context), - PaletteManager.getSecondaryYellow(context) - ) - - tx.direction == Tx.Direction.INBOUND -> Triple( - "+$amount", - PaletteManager.getGreen(context), - PaletteManager.getSecondaryGreen(context) - ) - - else -> Triple( - "-$amount", - PaletteManager.getRed(context), - PaletteManager.getSecondaryRed(context) - ) - } - amountTextView.text = amountText - amountTextView.setTextColor(textColor) - amountTextViewRound.updateBack(backColor = backgroundColor) - val measure = amountTextView.paint.measureText("0".repeat(amountTextView.text.length)) - val totalPadding = amountTextView.paddingStart + amountTextView.paddingEnd - amountTextView.width = totalPadding + measure.toInt() - } - - protected fun displayDate(tx: Tx, dateTextView: TariTextView) { - val txDateTime = DateTime(tx.timestamp.toLong() * 1000L) - val txDate = txDateTime.toLocalDate() - val todayDate = LocalDate.now() - val yesterdayDate = todayDate.minusDays(1) - dateTextView.text = when { - txDate.isEqual(todayDate) -> { - val minutesSinceTx = Minutes.minutesBetween(txDateTime, DateTime.now()).minutes - when { - minutesSinceTx == 0 -> string(R.string.tx_list_now) - minutesSinceTx < 60 -> String.format(string(R.string.tx_list_minutes_ago), minutesSinceTx) - else -> String.format(string(R.string.tx_list_hours_ago), Hours.hoursBetween(txDateTime, DateTime.now()).hours) - } - } - - txDate.isEqual(yesterdayDate) -> string(R.string.home_tx_list_header_yesterday) - else -> txDate.toString(DATE_FORMAT, Locale.ENGLISH) - } - } - - companion object { - // e.g. Wed, Jun 2 - private const val DATE_FORMAT = "E, MMM d" - } -} diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/TxListAdapter.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/TxListAdapter.kt deleted file mode 100644 index 4f2c48907..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/TxListAdapter.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.adapter - -import com.tari.android.wallet.ui.common.recyclerView.CommonAdapter -import com.tari.android.wallet.ui.common.recyclerView.CommonViewHolderItem -import com.tari.android.wallet.ui.common.recyclerView.ViewHolderBuilder -import com.tari.android.wallet.ui.common.recyclerView.viewHolders.TitleViewHolder - -class TxListAdapter : CommonAdapter() { - override var viewHolderBuilders: List = listOf( - TitleViewHolder.getBuilder(), - TxListViewHolder.getBuilder(), - ) -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/TxListViewHolder.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/TxListViewHolder.kt deleted file mode 100644 index 567b44f6b..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/TxListViewHolder.kt +++ /dev/null @@ -1,139 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.adapter - -import android.content.Context -import com.bumptech.glide.Glide -import com.bumptech.glide.load.resource.bitmap.RoundedCorners -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions -import com.bumptech.glide.request.RequestOptions -import com.bumptech.glide.request.target.Target -import com.tari.android.wallet.R -import com.tari.android.wallet.databinding.ItemTxListBinding -import com.tari.android.wallet.model.TxNote -import com.tari.android.wallet.model.TxStatus.BROADCAST -import com.tari.android.wallet.model.TxStatus.COINBASE -import com.tari.android.wallet.model.TxStatus.COINBASE_CONFIRMED -import com.tari.android.wallet.model.TxStatus.COINBASE_NOT_IN_BLOCKCHAIN -import com.tari.android.wallet.model.TxStatus.COINBASE_UNCONFIRMED -import com.tari.android.wallet.model.TxStatus.COMPLETED -import com.tari.android.wallet.model.TxStatus.IMPORTED -import com.tari.android.wallet.model.TxStatus.MINED_CONFIRMED -import com.tari.android.wallet.model.TxStatus.MINED_UNCONFIRMED -import com.tari.android.wallet.model.TxStatus.ONE_SIDED_CONFIRMED -import com.tari.android.wallet.model.TxStatus.ONE_SIDED_UNCONFIRMED -import com.tari.android.wallet.model.TxStatus.PENDING -import com.tari.android.wallet.model.TxStatus.QUEUED -import com.tari.android.wallet.model.TxStatus.REJECTED -import com.tari.android.wallet.model.TxStatus.TX_NULL_ERROR -import com.tari.android.wallet.model.TxStatus.UNKNOWN -import com.tari.android.wallet.model.tx.CancelledTx -import com.tari.android.wallet.model.tx.Tx -import com.tari.android.wallet.model.tx.Tx.Direction.INBOUND -import com.tari.android.wallet.model.tx.Tx.Direction.OUTBOUND -import com.tari.android.wallet.ui.common.giphy.presentation.GifStateConsumer -import com.tari.android.wallet.ui.common.giphy.presentation.GlideGifListener -import com.tari.android.wallet.ui.common.giphy.repository.GifItem -import com.tari.android.wallet.ui.common.recyclerView.ViewHolderBuilder -import com.tari.android.wallet.util.extension.dimen -import com.tari.android.wallet.util.extension.gone -import com.tari.android.wallet.util.extension.setTopMargin -import com.tari.android.wallet.util.extension.setVisible -import com.tari.android.wallet.util.extension.string -import com.tari.android.wallet.util.extension.visible - -class TxListViewHolder(view: ItemTxListBinding) : CommonTxListViewHolder(view), GifStateConsumer { - - private val glide = Glide.with(itemView.context) - private lateinit var tx: Tx - - override fun bind(item: TxViewHolderItem) { - super.bind(item) - - with(item.txDto.tx) { - this@TxListViewHolder.tx = this - displayAliasOrEmojiId(this, item.txDto.contact, ui.participantTextView1, ui.participantTextView2, ui.emojiIdViewContainer) - displayAmount(this, ui.amountTextView, ui.amountTextViewRound) - displayDate(this, ui.dateTextView) - displayStatus(this) - displayMessage(this) - } - - item.gifViewModel.onNewTx(tx) - ui.gifContainer.retryLoadingGifTextView.setOnClickListener { item.gifViewModel.retry() } - item.gifViewModel.gifState.observeForever { it.handle(this) } - } - - private fun displayStatus(tx: Tx) { - val status = tx.statusString(context = itemView.context) - ui.statusTextView.setVisible(status.isNotEmpty()) - ui.statusTextView.text = status - } - - private fun displayMessage(tx: Tx) { - val note = TxNote.fromTx(tx) - if (note.message.isNullOrBlank() || tx.isCoinbase) { // FIXME: we temporarily hide the message for coinbase txs because it's always "None" - ui.messageTextView.gone() - } else { - ui.messageTextView.visible() - ui.messageTextView.text = note.message - } - } - - private fun Tx.statusString(context: Context): String { - return if (this is CancelledTx) "" else when (this.status) { - PENDING -> when (this.direction) { - INBOUND -> context.string(R.string.tx_detail_waiting_for_sender_to_complete) - OUTBOUND -> context.string(R.string.tx_detail_waiting_for_recipient) - } - - BROADCAST, COMPLETED, MINED_UNCONFIRMED -> context.string(R.string.tx_detail_in_progress) - - TX_NULL_ERROR, IMPORTED, COINBASE, MINED_CONFIRMED, REJECTED, ONE_SIDED_UNCONFIRMED, ONE_SIDED_CONFIRMED, QUEUED, COINBASE_UNCONFIRMED, - COINBASE_CONFIRMED, COINBASE_NOT_IN_BLOCKCHAIN, UNKNOWN -> "" - } - } - - override fun onGifLoadingState() { - glide.clear(ui.gifContainer.gifView) - ui.gifContainer.gifStatusContainer.visible() - ui.gifContainer.loadingGifTextView.visible() - ui.gifContainer.retryLoadingGifTextView.gone() - ui.gifContainer.loadingGifProgressBar.visible() - ui.gifContainer.gifView.gone() - ui.gifContainer.gifView.setTopMargin(0) - } - - override fun onGifErrorState() { - ui.gifContainer.gifStatusContainer.visible() - ui.gifContainer.loadingGifProgressBar.gone() - ui.gifContainer.loadingGifTextView.gone() - ui.gifContainer.retryLoadingGifTextView.visible() - } - - override fun onGifSuccessState(gifItem: GifItem) { - glide - .asGif() - .override(ui.gifContainer.gifContainerRootView.width, Target.SIZE_ORIGINAL) - .apply(RequestOptions().transform(RoundedCorners(10))) - .load(gifItem.uri) - .listener(GlideGifListener(this)) - .transition(DrawableTransitionOptions.withCrossFade(250)) - .into(ui.gifContainer.gifView) - } - - override fun onGifResourceReady() { - ui.gifContainer.gifStatusContainer.gone() - ui.gifContainer.gifView.visible() - ui.gifContainer.gifView.setTopMargin(dimen(R.dimen.tx_list_item_gif_container_top_margin)) - } - - override fun noGifState() { - glide.clear(ui.gifContainer.gifView) - ui.gifContainer.gifView.gone() - ui.gifContainer.gifStatusContainer.gone() - } - - companion object { - fun getBuilder(): ViewHolderBuilder = - ViewHolderBuilder(ItemTxListBinding::inflate, TxViewHolderItem::class.java) { TxListViewHolder(it as ItemTxListBinding) } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/TxViewHolderItem.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/TxViewHolderItem.kt deleted file mode 100644 index 5d71870e7..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/adapter/TxViewHolderItem.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.adapter - -import com.tari.android.wallet.data.tx.TxDto -import com.tari.android.wallet.ui.common.giphy.presentation.GifViewModel -import com.tari.android.wallet.ui.common.recyclerView.CommonViewHolderItem - -data class TxViewHolderItem( - val txDto: TxDto, - val gifViewModel: GifViewModel, // TODO try not to pass the repo as a param, but as an injection. This possible causes memory leaks!! -) : CommonViewHolderItem() { - - override val viewHolderUUID: String = "TransactionItem$txDto" - - fun contains(searchQuery: String): Boolean = txDto.tx.tariContact.walletAddress.fullEmojiId.contains(searchQuery, ignoreCase = true) - || txDto.tx.tariContact.walletAddress.fullBase58.contains(searchQuery, ignoreCase = true) - || txDto.tx.tariContact.alias.contains(searchQuery, ignoreCase = true) - || txDto.tx.message.contains(searchQuery, ignoreCase = true) - || txDto.tx.paymentId.contains(searchQuery, ignoreCase = true) - || txDto.tx.amount.formattedTariValue.contains(searchQuery, ignoreCase = true) - || txDto.tx.amount.formattedValue.contains(searchQuery, ignoreCase = true) - || txDto.contact?.contactInfo?.getAlias()?.contains(searchQuery, ignoreCase = true) ?: false -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/details/TxDetailsScreen.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/details/TxDetailsScreen.kt index 7e60a82c9..7ab24639a 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/details/TxDetailsScreen.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/details/TxDetailsScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.unit.dp import com.tari.android.wallet.R import com.tari.android.wallet.application.walletManager.WalletConfig import com.tari.android.wallet.model.TxStatus +import com.tari.android.wallet.model.tx.CompletedTx import com.tari.android.wallet.ui.compose.TariDesignSystem import com.tari.android.wallet.ui.compose.components.TariPrimaryButton import com.tari.android.wallet.ui.compose.components.TariTextButton @@ -35,6 +36,7 @@ import com.tari.android.wallet.ui.screen.tx.details.widget.TxDetailInfoItem import com.tari.android.wallet.ui.screen.tx.details.widget.TxDetailInfoStatusItem import com.tari.android.wallet.util.MockDataStub import com.tari.android.wallet.util.extension.isTrue +import com.tari.android.wallet.util.extension.safeCastTo @Composable fun TxDetailsScreen( @@ -98,7 +100,7 @@ fun TxDetailsScreen( .fillMaxWidth() .padding(horizontal = 24.dp), alias = when { - coinbase -> stringResource(R.string.tx_details_coinbase) + coinbase -> stringResource(R.string.tx_details_coinbase, uiState.tx.safeCastTo()?.minedHeight ?: "--") unknownUser -> stringResource(R.string.unknown_source) else -> contact.alias }, diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/TxHistoryFragment.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/TxHistoryFragment.kt new file mode 100644 index 000000000..a09c6a205 --- /dev/null +++ b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/TxHistoryFragment.kt @@ -0,0 +1,44 @@ +package com.tari.android.wallet.ui.screen.tx.history + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.fragment.app.viewModels +import com.tari.android.wallet.data.contacts.model.ContactDto +import com.tari.android.wallet.ui.common.CommonFragment +import com.tari.android.wallet.ui.compose.TariDesignSystem +import com.tari.android.wallet.util.extension.composeContent + +class TxHistoryFragment : CommonFragment() { + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = composeContent { + val uiState by viewModel.uiState.collectAsState() + + TariDesignSystem(viewModel.currentTheme) { + TxHistoryScreen( + uiState = uiState, + onBackClick = { viewModel.onBackPressed() }, + onTxClick = { viewModel.navigateToTxDetail(it.tx) }, + onSearchQueryChange = { viewModel.onQueryChange(it) }, + ) + } + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val viewModel: TxHistoryViewModel by viewModels() + bindViewModel(viewModel) + } + + companion object { + const val PARAMETER_CONTACT = "PARAMETER_CONTACT" + + fun newInstance(contactDto: ContactDto? = null): TxHistoryFragment = TxHistoryFragment().apply { + arguments = Bundle().apply { putParcelable(PARAMETER_CONTACT, contactDto) } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/TxHistoryScreen.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/TxHistoryScreen.kt new file mode 100644 index 000000000..43c5428a6 --- /dev/null +++ b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/TxHistoryScreen.kt @@ -0,0 +1,250 @@ +package com.tari.android.wallet.ui.screen.tx.history + +import androidx.annotation.StringRes +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListScope +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.tari.android.wallet.R +import com.tari.android.wallet.data.contacts.model.ContactDto +import com.tari.android.wallet.data.tx.TxDto +import com.tari.android.wallet.ui.compose.TariDesignSystem +import com.tari.android.wallet.ui.compose.components.TariSearchField +import com.tari.android.wallet.ui.compose.components.TariTopBar +import com.tari.android.wallet.ui.screen.home.overview.widget.TxItem +import com.tari.android.wallet.ui.screen.settings.themeSelector.TariTheme +import com.tari.android.wallet.util.MockDataStub + +@Composable +fun TxHistoryScreen( + uiState: TxHistoryViewModel.UiState, + onSearchQueryChange: (String) -> Unit, + onBackClick: () -> Unit, + onTxClick: (tx: TxDto) -> Unit, +) { + var searchQuery by rememberSaveable { mutableStateOf(uiState.searchQuery) } + + Scaffold( + modifier = Modifier + .fillMaxSize() + .statusBarsPadding(), + containerColor = TariDesignSystem.colors.backgroundSecondary, + topBar = { + TariTopBar( + title = if (uiState.selectedContact != null) { + stringResource(R.string.contact_details_transaction_history_description, uiState.selectedContact.contactInfo.getAlias()) + } else { + stringResource(R.string.contact_details_transaction_history) + }, + onBack = onBackClick, + ) + } + ) { paddingValues -> + LazyColumn(modifier = Modifier.padding(paddingValues)) { + if (uiState.selectedContact == null) { + item { + Spacer(Modifier.size(20.dp)) + TariSearchField( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 20.dp), + searchQuery = searchQuery, + hint = stringResource(R.string.home_search_hint), + onQueryChanged = { + onSearchQueryChange(it) + searchQuery = it + }, + ) + } + } + + item { Spacer(Modifier.size(20.dp)) } + + when { + uiState.showEmptyState -> { + item { + EmptyState( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 40.dp, vertical = 20.dp), + selectedContact = uiState.selectedContact, + ) + } + } + + uiState.showSortedList -> { + txListItems( + txList = uiState.sortedTxList, + ticker = uiState.ticker, + onTxClick = onTxClick, + ) + } + + else -> { + txListItems( + txList = uiState.pendingTxs, + ticker = uiState.ticker, + titleRes = R.string.home_pending_transactions_title, + onTxClick = onTxClick, + ) + if (uiState.pendingTxs.isNotEmpty()) item { Spacer(Modifier.size(10.dp)) } + txListItems( + txList = uiState.nonPendingTxs, + ticker = uiState.ticker, + titleRes = R.string.home_completed_transactions_title, + onTxClick = onTxClick, + ) + } + } + } + } +} + +@Composable +private fun EmptyState(selectedContact: ContactDto?, modifier: Modifier = Modifier) { + Column(modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally) { + Text( + text = stringResource(R.string.contact_details_transaction_history_empty_state_title), + style = TariDesignSystem.typography.body1, + textAlign = TextAlign.Center, + color = TariDesignSystem.colors.textPrimary, + ) + Spacer(Modifier.size(8.dp)) + Text( + textAlign = TextAlign.Center, + text = if (selectedContact != null) { + stringResource(R.string.contact_details_transaction_history_empty_state_description, selectedContact.contactInfo.getAlias()) + } else { + stringResource(R.string.home_transaction_list_empty_description) + }, + style = TariDesignSystem.typography.body2, + color = TariDesignSystem.colors.textSecondary, + ) + } +} + +private fun LazyListScope.txListItems( + txList: List, + ticker: String, + @StringRes titleRes: Int? = null, + onTxClick: (tx: TxDto) -> Unit, +) { + if (txList.isEmpty()) return + + if (titleRes != null) { + item { + Text( + modifier = Modifier.padding(horizontal = 20.dp, vertical = 10.dp), + text = stringResource(titleRes), + style = TariDesignSystem.typography.headingMedium, + ) + } + } + + items(txList.size) { index -> + val keyboardController = LocalSoftwareKeyboardController.current + val txItem = txList[index] + TxItem( + modifier = Modifier + .padding(horizontal = 20.dp, vertical = 5.dp) + .animateItem(), + txDto = txItem, + ticker = ticker, + onTxClick = { + keyboardController?.hide() + onTxClick(txItem) + }, + ) + } +} + +@Composable +@Preview +private fun TxHistoryScreenPreview() { + TariDesignSystem(TariTheme.Light) { + TxHistoryScreen( + uiState = TxHistoryViewModel.UiState( + pendingTxs = MockDataStub.createTxList(), + nonPendingTxs = MockDataStub.createTxList(), + ticker = "XTM", + selectedContact = null, + ), + onSearchQueryChange = {}, + onBackClick = {}, + onTxClick = {}, + ) + } +} + +@Composable +@Preview +private fun TxHistoryScreenEmptyPreview() { + TariDesignSystem(TariTheme.Light) { + TxHistoryScreen( + uiState = TxHistoryViewModel.UiState( + pendingTxs = emptyList(), + nonPendingTxs = emptyList(), + ticker = "XTM", + selectedContact = null, + ), + onSearchQueryChange = {}, + onBackClick = {}, + onTxClick = {}, + ) + } +} + +@Composable +@Preview +private fun TxHistoryContactScreenPreview() { + TariDesignSystem(TariTheme.Light) { + TxHistoryScreen( + uiState = TxHistoryViewModel.UiState( + pendingTxs = MockDataStub.createTxList(), + nonPendingTxs = MockDataStub.createTxList(), + ticker = "XTM", + selectedContact = MockDataStub.createContact(), + ), + onSearchQueryChange = {}, + onBackClick = {}, + onTxClick = {}, + ) + } +} + +@Composable +@Preview +private fun TxHistoryContactScreenEmptyPreview() { + TariDesignSystem(TariTheme.Light) { + TxHistoryScreen( + uiState = TxHistoryViewModel.UiState( + pendingTxs = emptyList(), + nonPendingTxs = emptyList(), + ticker = "XTM", + selectedContact = MockDataStub.createContact(), + ), + onSearchQueryChange = {}, + onBackClick = {}, + onTxClick = {}, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/TxHistoryViewModel.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/TxHistoryViewModel.kt new file mode 100644 index 000000000..8840d87a3 --- /dev/null +++ b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/TxHistoryViewModel.kt @@ -0,0 +1,86 @@ +package com.tari.android.wallet.ui.screen.tx.history + +import androidx.lifecycle.SavedStateHandle +import com.tari.android.wallet.data.contacts.ContactsRepository +import com.tari.android.wallet.data.contacts.model.ContactDto +import com.tari.android.wallet.data.tx.TxDto +import com.tari.android.wallet.data.tx.TxRepository +import com.tari.android.wallet.model.tx.Tx +import com.tari.android.wallet.navigation.Navigation +import com.tari.android.wallet.navigation.TariNavigator +import com.tari.android.wallet.ui.common.CommonViewModel +import com.tari.android.wallet.util.extension.collectFlow +import com.tari.android.wallet.util.extension.zipToPair +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update +import javax.inject.Inject + +class TxHistoryViewModel(savedState: SavedStateHandle) : CommonViewModel() { + + @Inject + lateinit var txRepository: TxRepository + + @Inject + lateinit var contactsRepository: ContactsRepository + + init { + component.inject(this) + } + + private val _uiState = MutableStateFlow( + UiState( + selectedContact = savedState.get(TariNavigator.PARAMETER_CONTACT)?.uuid?.let { contactsRepository.getByUuid(it) }, + pendingTxs = emptyList(), + nonPendingTxs = emptyList(), + ticker = networkRepository.currentNetwork.ticker, + ) + ) + val uiState = _uiState.asStateFlow() + + init { + collectFlow(txRepository.pendingTxs.zipToPair(txRepository.nonPendingTxs)) { (pendingTxs, nonPendingTxs) -> + _uiState.update { + it.copy( + pendingTxs = pendingTxs, + nonPendingTxs = nonPendingTxs, + ) + } + } + } + + fun navigateToTxDetail(tx: Tx) { + tariNavigator.navigate(Navigation.TxList.ToTxDetails(tx)) + } + + fun onQueryChange(query: String) { + _uiState.update { it.copy(searchQuery = query) } + } + + data class UiState( + val selectedContact: ContactDto? = null, // null if not contact tx history + val pendingTxs: List, + val nonPendingTxs: List, + val ticker: String, + val searchQuery: String = "", + ) { + val allTxList: List + get() = pendingTxs + nonPendingTxs + + val sortedTxList: List + get() = allTxList.filterByContact().filterByQuery() + + val showEmptyState: Boolean + get() = allTxList.isEmpty() + val showSortedList: Boolean + get() = selectedContact != null || allTxList.isNotEmpty() && searchQuery.isNotBlank() + + private fun List.filterByContact(): List = selectedContact?.let { contact -> + filter { it.tx.tariContact.walletAddress == contact.walletAddress } + } ?: this + + private fun List.filterByQuery(): List = searchQuery.trim().takeIf { it.isNotBlank() }?.let { query -> + filter { it.contains(query) } + } ?: this + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/all/AllTxHistoryFragment.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/all/AllTxHistoryFragment.kt deleted file mode 100644 index 49d811b7f..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/all/AllTxHistoryFragment.kt +++ /dev/null @@ -1,68 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.history.all - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.appcompat.widget.SearchView -import androidx.fragment.app.viewModels -import androidx.recyclerview.widget.LinearLayoutManager -import com.tari.android.wallet.databinding.FragmentAllTransactionHistoryBinding -import com.tari.android.wallet.ui.common.CommonXmlFragment -import com.tari.android.wallet.ui.common.recyclerView.CommonAdapter -import com.tari.android.wallet.ui.screen.tx.adapter.TxListAdapter -import com.tari.android.wallet.ui.screen.tx.adapter.TxViewHolderItem -import com.tari.android.wallet.util.extension.collectFlow -import com.tari.android.wallet.util.extension.setVisible - -class AllTxHistoryFragment : CommonXmlFragment() { - - private var adapter = TxListAdapter() - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = - FragmentAllTransactionHistoryBinding.inflate(inflater, container, false).apply { ui = this }.root - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - val viewModel: AllTxHistoryViewModel by viewModels() - bindViewModel(viewModel) - - initUI() - observeUI() - } - - private fun observeUI() { - collectFlow(viewModel.uiState) { state -> - ui.searchFullContainer.setVisible(state.searchBarVisible) - ui.emptyState.setVisible(state.txEmptyStateVisible) - ui.list.setVisible(state.txListVisible) - adapter.update(state.sortedTxList) - adapter.notifyDataSetChanged() - ui.list.smoothScrollToPosition(0) - } - } - - private fun initUI() = with(ui) { - list.adapter = adapter - list.layoutManager = LinearLayoutManager(context) - requestTariButton.setOnClickListener { viewModel.onRequestTariClick() } - - adapter.setClickListener(CommonAdapter.ItemClickListener { item -> - if (item is TxViewHolderItem) { - viewModel.onTransactionClick(item.txDto.tx) - } - }) - - ui.searchView.setIconifiedByDefault(false) - - ui.searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { - override fun onQueryTextChange(newText: String?): Boolean { - viewModel.doSearch(newText.orEmpty()) - return true - } - - override fun onQueryTextSubmit(query: String?): Boolean = true - }) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/all/AllTxHistoryModel.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/all/AllTxHistoryModel.kt deleted file mode 100644 index 7db4420e3..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/all/AllTxHistoryModel.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.history.all - -import com.tari.android.wallet.ui.common.recyclerView.CommonViewHolderItem -import com.tari.android.wallet.ui.screen.tx.adapter.TxViewHolderItem - -class AllTxHistoryModel { - data class UiState( - private val allTxList: List = emptyList(), - val searchQuery: String = "", - ) { - val sortedTxList - get() = searchQuery.trim().takeIf { it.isNotBlank() }?.let { query -> - allTxList.filterIsInstance() - .filter { it.contains(query) } - } ?: allTxList - - val searchBarVisible - get() = searchQuery.trim().isNotBlank() || sortedTxList.isNotEmpty() - val txEmptyStateVisible - get() = searchQuery.trim().isBlank() && sortedTxList.isEmpty() - val txListVisible - get() = sortedTxList.isNotEmpty() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/all/AllTxHistoryViewModel.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/all/AllTxHistoryViewModel.kt deleted file mode 100644 index 5d464dd4a..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/all/AllTxHistoryViewModel.kt +++ /dev/null @@ -1,79 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.history.all - -import com.tari.android.wallet.R -import com.tari.android.wallet.data.tx.TxRepository -import com.tari.android.wallet.util.extension.collectFlow -import com.tari.android.wallet.util.extension.zipToPair -import com.tari.android.wallet.model.tx.Tx -import com.tari.android.wallet.navigation.Navigation -import com.tari.android.wallet.ui.common.CommonViewModel -import com.tari.android.wallet.ui.common.giphy.presentation.GifViewModel -import com.tari.android.wallet.ui.common.giphy.repository.GiphyRestService -import com.tari.android.wallet.ui.common.recyclerView.items.TitleViewHolderItem -import com.tari.android.wallet.data.contacts.ContactsRepository -import com.tari.android.wallet.ui.screen.tx.adapter.TxViewHolderItem -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update -import javax.inject.Inject - -class AllTxHistoryViewModel : CommonViewModel() { - - @Inject - lateinit var txRepository: TxRepository - - @Inject - lateinit var contactsRepository: ContactsRepository - - @Inject - lateinit var giphyRestService: GiphyRestService - - private val _uiState = MutableStateFlow(AllTxHistoryModel.UiState()) - val uiState = _uiState.asStateFlow() - - init { - component.inject(this) - - collectFlow(txRepository.pendingTxs.zipToPair(txRepository.nonPendingTxs)) { (pendingTxs, nonPendingTxs) -> - _uiState.update { uiState -> - uiState.copy( - allTxList = listOfNotNull( - TitleViewHolderItem( - title = resourceManager.getString(R.string.home_pending_transactions_title), - isFirst = true, - ).takeIf { pendingTxs.isNotEmpty() }, - *pendingTxs.map { txDto -> - TxViewHolderItem( - txDto = txDto, - gifViewModel = GifViewModel(giphyRestService), - ) - }.toTypedArray(), - - TitleViewHolderItem( - title = resourceManager.getString(R.string.home_completed_transactions_title), - isFirst = pendingTxs.isEmpty(), - ).takeIf { nonPendingTxs.isNotEmpty() }, - *nonPendingTxs.map { txDto -> - TxViewHolderItem( - txDto = txDto, - gifViewModel = GifViewModel(giphyRestService), - ) - }.toTypedArray(), - ) - ) - } - } - } - - fun doSearch(query: String) { - _uiState.update { it.copy(searchQuery = query) } - } - - fun onTransactionClick(tx: Tx) { - tariNavigator.navigate(Navigation.TxList.ToTxDetails(tx)) - } - - fun onRequestTariClick() { - tariNavigator.navigate(Navigation.AllSettings.ToRequestTari) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/contact/ContactTxHistoryFragment.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/contact/ContactTxHistoryFragment.kt deleted file mode 100644 index 95c45a815..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/contact/ContactTxHistoryFragment.kt +++ /dev/null @@ -1,94 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.history.contact - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.viewModels -import androidx.recyclerview.widget.LinearLayoutManager -import com.tari.android.wallet.R -import com.tari.android.wallet.data.contacts.model.ContactDto -import com.tari.android.wallet.databinding.FragmentContactTransactionHistoryBinding -import com.tari.android.wallet.navigation.TariNavigator -import com.tari.android.wallet.ui.common.CommonXmlFragment -import com.tari.android.wallet.ui.common.recyclerView.CommonAdapter -import com.tari.android.wallet.ui.screen.tx.adapter.TxListAdapter -import com.tari.android.wallet.ui.screen.tx.adapter.TxViewHolderItem -import com.tari.android.wallet.util.addressFirstEmojis -import com.tari.android.wallet.util.addressLastEmojis -import com.tari.android.wallet.util.addressPrefixEmojis -import com.tari.android.wallet.util.extension.collectFlow -import com.tari.android.wallet.util.extension.gone -import com.tari.android.wallet.util.extension.setVisible -import com.tari.android.wallet.util.extension.visible -import yat.android.ui.extension.HtmlHelper - -class ContactTxHistoryFragment : CommonXmlFragment() { - - private var adapter = TxListAdapter() - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = - FragmentContactTransactionHistoryBinding.inflate(inflater, container, false).apply { ui = this }.root - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - val viewModel: ContactTxHistoryViewModel by viewModels() - bindViewModel(viewModel) - - initUI() - observeUI() - } - - private fun observeUI() { - collectFlow(viewModel.uiState) { uiState -> - ui.list.setVisible(uiState.txList.isNotEmpty()) - ui.descriptionViewContainer.setVisible(uiState.txList.isNotEmpty()) - ui.emptyState.setVisible(uiState.txList.isEmpty()) - - adapter.update(uiState.txList) - adapter.notifyDataSetChanged() - } - } - - private fun initUI() = with(ui) { - list.adapter = adapter - list.layoutManager = LinearLayoutManager(context) - - adapter.setClickListener(CommonAdapter.ItemClickListener { item -> - if (item is TxViewHolderItem) { - viewModel.onTransactionClick(item.txDto.tx) - } - }) - - sendTariButton.setOnClickListener { - viewModel.onSendTariClick() - } - - setContactText(viewModel.uiState.value.selectedContact) - } - - private fun setContactText(contactDto: ContactDto) { - val name = contactDto.contactInfo.getAlias() - val address = contactDto.walletAddress - - ui.descriptionView.text = getString(R.string.contact_details_transaction_history_description, name) - if (name.isBlank() && address != null) { - ui.emojiIdViewContainer.root.visible() - ui.emojiIdViewContainer.textViewEmojiPrefix.text = address.addressPrefixEmojis() - ui.emojiIdViewContainer.textViewEmojiFirstPart.text = address.addressFirstEmojis() - ui.emojiIdViewContainer.textViewEmojiLastPart.text = address.addressLastEmojis() - } else { - ui.emojiIdViewContainer.root.gone() - } - - val emptyStateText = getString(R.string.contact_details_transaction_history_empty_state_description, name) - ui.emptyStateDescription.text = HtmlHelper.getSpannedText(emptyStateText) - } - - companion object { - fun createFragment(args: ContactDto): ContactTxHistoryFragment = ContactTxHistoryFragment().apply { - arguments = Bundle().apply { putParcelable(TariNavigator.PARAMETER_CONTACT, args) } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/contact/ContactTxHistoryModel.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/contact/ContactTxHistoryModel.kt deleted file mode 100644 index 509af063e..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/contact/ContactTxHistoryModel.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.history.contact - -import com.tari.android.wallet.data.contacts.model.ContactDto -import com.tari.android.wallet.ui.screen.tx.adapter.TxViewHolderItem - -class ContactTxHistoryModel { - data class UiState( - val selectedContact: ContactDto, - - val txList: List = emptyList(), - ) -} \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/contact/ContactTxHistoryViewModel.kt b/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/contact/ContactTxHistoryViewModel.kt deleted file mode 100644 index 71f83d746..000000000 --- a/app/src/main/java/com/tari/android/wallet/ui/screen/tx/history/contact/ContactTxHistoryViewModel.kt +++ /dev/null @@ -1,66 +0,0 @@ -package com.tari.android.wallet.ui.screen.tx.history.contact - -import androidx.lifecycle.SavedStateHandle -import com.tari.android.wallet.data.tx.TxRepository -import com.tari.android.wallet.util.extension.collectFlow -import com.tari.android.wallet.model.tx.Tx -import com.tari.android.wallet.navigation.Navigation -import com.tari.android.wallet.navigation.TariNavigator -import com.tari.android.wallet.ui.common.CommonViewModel -import com.tari.android.wallet.ui.common.giphy.presentation.GifViewModel -import com.tari.android.wallet.ui.common.giphy.repository.GiphyRestService -import com.tari.android.wallet.data.contacts.ContactsRepository -import com.tari.android.wallet.data.contacts.model.ContactDto -import com.tari.android.wallet.ui.screen.tx.adapter.TxViewHolderItem -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update -import javax.inject.Inject - -class ContactTxHistoryViewModel(savedState: SavedStateHandle) : CommonViewModel() { - - @Inject - lateinit var txRepository: TxRepository - - @Inject - lateinit var contactsRepository: ContactsRepository - - @Inject - lateinit var giphyRestService: GiphyRestService - - init { - component.inject(this) - } - - private val _uiState = MutableStateFlow( - ContactTxHistoryModel.UiState( - selectedContact = contactsRepository.getByUuid(savedState.get(TariNavigator.PARAMETER_CONTACT)!!.uuid), - ) - ) - val uiState = _uiState.asStateFlow() - - init { - collectFlow(txRepository.allTxs) { txs -> - _uiState.update { uiState -> - uiState.copy(txList = txs.filter { it.tx.tariContact.walletAddress == uiState.selectedContact.walletAddress } - .map { it.copy(contact = uiState.selectedContact) } - .map { txDto -> - TxViewHolderItem( - txDto = txDto, - gifViewModel = GifViewModel(giphyRestService) - ) - } - ) - } - } - } - - fun onSendTariClick() { - tariNavigator.navigate(Navigation.TxList.ToSendTariToUser(uiState.value.selectedContact)) - } - - fun onTransactionClick(tx: Tx) { - tariNavigator.navigate(Navigation.TxList.ToTxDetails(tx)) - } -} - diff --git a/app/src/main/java/com/tari/android/wallet/util/Constants.kt b/app/src/main/java/com/tari/android/wallet/util/Constants.kt index 8b409c02e..0f149b5cf 100644 --- a/app/src/main/java/com/tari/android/wallet/util/Constants.kt +++ b/app/src/main/java/com/tari/android/wallet/util/Constants.kt @@ -52,9 +52,6 @@ object Constants { const val mediumDurationMs = 600L const val longDurationMs = 1000L const val xLongDurationMs = 1500L - const val xxLongDurationMs = 2000L - - const val scrollDepthShadowViewMaxOpacity = 0.75f const val EMOJI_ID_CHUNK_SEPARATOR_RELATIVE_SCALE = 0.9f const val EMOJI_ID_CHUNK_SEPARATOR_LETTER_SPACING = 1f @@ -75,7 +72,6 @@ object Constants { const val createEmojiButtonAnimDelayMs = 300L const val awesomeTextAnimDurationMs = 600L const val shortAlphaAnimDuration = 300L - const val viewChangeAnimDelayMs = 3000L const val viewOverlapDelayMs = 150L const val createEmojiViewAnimDurationMs = 1200L const val walletCreationFadeOutAnimDurationMs = 1000L diff --git a/app/src/main/java/com/tari/android/wallet/util/EmojiUtil.kt b/app/src/main/java/com/tari/android/wallet/util/EmojiUtil.kt index 013868f1a..d4fa0cb88 100644 --- a/app/src/main/java/com/tari/android/wallet/util/EmojiUtil.kt +++ b/app/src/main/java/com/tari/android/wallet/util/EmojiUtil.kt @@ -43,28 +43,6 @@ import com.tari.android.wallet.util.extension.applyColorStyle import com.tari.android.wallet.util.extension.applyLetterSpacingStyle import com.tari.android.wallet.util.extension.applyRelativeTextSizeStyle -/** - * Number of emojis from the Tari emoji set in a string. - */ -fun EmojiId.numberOfEmojis(emojiSet: Set = EmojiUtil.FFI_EMOJI_SET): Int { - val it: BreakIterator = BreakIterator.getCharacterInstance() - it.setText(this) - var emojiCount = 0 - var previous = 0 - val codepointBuilder = StringBuilder() - while (it.next() != BreakIterator.DONE) { - for (i in previous until it.current()) { - codepointBuilder.append(this[i]) - } - val codepoint = codepointBuilder.toString() - if (emojiSet.contains(codepoint)) { - emojiCount++ - } - previous = it.current() - codepointBuilder.clear() - } - return emojiCount -} /** * @return true if there is at least 1 character that is not included in the Tari emoji set. diff --git a/app/src/main/java/com/tari/android/wallet/util/extension/ContextExtensions.kt b/app/src/main/java/com/tari/android/wallet/util/extension/ContextExtensions.kt index 55f31820a..2d3f15b0f 100644 --- a/app/src/main/java/com/tari/android/wallet/util/extension/ContextExtensions.kt +++ b/app/src/main/java/com/tari/android/wallet/util/extension/ContextExtensions.kt @@ -33,10 +33,8 @@ package com.tari.android.wallet.util.extension import android.app.Activity -import android.content.ContentResolver import android.content.Context import android.graphics.drawable.Drawable -import android.net.Uri import android.util.TypedValue import androidx.annotation.ColorRes import androidx.annotation.DimenRes @@ -59,15 +57,4 @@ fun Int.dpToPx(context: Context): Float = (this * context.resources.displayMetri fun Context.drawable(@DrawableRes id: Int): Drawable? = ContextCompat.getDrawable(this, id) - -/** - * @param resourceId identifies an application resource - * @return the Uri by which the application resource is accessed - */ -fun Context.getResourceUri(resourceId: Int): Uri = Uri.Builder() - .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) - .authority(packageName) - .path(resourceId.toString()) - .build() - fun Context.isStillAlive(): Boolean = this is Activity && !this.isFinishing && !this.isDestroyed \ No newline at end of file diff --git a/app/src/main/java/com/tari/android/wallet/util/extension/FileExtensions.kt b/app/src/main/java/com/tari/android/wallet/util/extension/FileExtensions.kt index 796dc3f68..8d255e387 100644 --- a/app/src/main/java/com/tari/android/wallet/util/extension/FileExtensions.kt +++ b/app/src/main/java/com/tari/android/wallet/util/extension/FileExtensions.kt @@ -32,7 +32,6 @@ */ package com.tari.android.wallet.util.extension -import com.tari.android.wallet.infrastructure.backup.compress.CompressionMethod import com.tari.android.wallet.infrastructure.security.encryption.SymmetricEncryptionAlgorithm import java.io.File import java.io.FileInputStream @@ -52,17 +51,6 @@ fun File.getLastPathComponent(): String { return if (segments.isEmpty()) "" else segments[segments.size - 1] } -fun List.compress( - compressionMethod: CompressionMethod, - targetFilePath: String -): File { - compressionMethod.compress( - targetFilePath, - this - ) - return File(targetFilePath) -} - fun File.encrypt( encryptionAlgorithm: SymmetricEncryptionAlgorithm, key: CharArray, diff --git a/app/src/main/java/com/tari/android/wallet/util/extension/ViewExtensions.kt b/app/src/main/java/com/tari/android/wallet/util/extension/ViewExtensions.kt index 6648c05d3..f70a5bcb2 100644 --- a/app/src/main/java/com/tari/android/wallet/util/extension/ViewExtensions.kt +++ b/app/src/main/java/com/tari/android/wallet/util/extension/ViewExtensions.kt @@ -57,11 +57,14 @@ import androidx.core.animation.addListener import androidx.core.graphics.BlendModeColorFilterCompat import androidx.core.graphics.BlendModeCompat import androidx.fragment.app.FragmentTransaction +import com.orhanobut.logger.Logger import com.tari.android.wallet.R import com.tari.android.wallet.util.Constants -import timber.log.Timber import java.lang.ref.WeakReference +private val logger + get() = Logger.t("ViewExtensions") + fun View.visible() { this.visibility = View.VISIBLE } @@ -310,7 +313,7 @@ fun TypedArray.runRecycle(action: TypedArray.() -> Unit) { try { action.invoke(this) } catch (e: Throwable) { - Timber.e(e) + logger.e(e, "Error while running action on TypedArray") } finally { recycle() } diff --git a/app/src/main/res/anim/dialog_slide_from_bottom.xml b/app/src/main/res/anim/dialog_slide_from_bottom.xml deleted file mode 100644 index 7048ee51a..000000000 --- a/app/src/main/res/anim/dialog_slide_from_bottom.xml +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/app/src/main/res/anim/dialog_slide_to_bottom.xml b/app/src/main/res/anim/dialog_slide_to_bottom.xml deleted file mode 100644 index c0ed80680..000000000 --- a/app/src/main/res/anim/dialog_slide_to_bottom.xml +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/app/src/main/res/anim/enter_from_bottom.xml b/app/src/main/res/anim/enter_from_bottom.xml deleted file mode 100644 index 3648531a4..000000000 --- a/app/src/main/res/anim/enter_from_bottom.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/enter_from_top.xml b/app/src/main/res/anim/enter_from_top.xml deleted file mode 100644 index c5c371324..000000000 --- a/app/src/main/res/anim/enter_from_top.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/exit_to_bottom.xml b/app/src/main/res/anim/exit_to_bottom.xml deleted file mode 100644 index c8cd27c89..000000000 --- a/app/src/main/res/anim/exit_to_bottom.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/exit_to_top.xml b/app/src/main/res/anim/exit_to_top.xml deleted file mode 100644 index 83afb7474..000000000 --- a/app/src/main/res/anim/exit_to_top.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/slide_down.xml b/app/src/main/res/anim/slide_down.xml deleted file mode 100644 index b801b9625..000000000 --- a/app/src/main/res/anim/slide_down.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/slide_up.xml b/app/src/main/res/anim/slide_up.xml deleted file mode 100644 index 68fd986bb..000000000 --- a/app/src/main/res/anim/slide_up.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/drawable-hdpi/tari_recipient_profile_icon.png b/app/src/main/res/drawable-hdpi/tari_recipient_profile_icon.png deleted file mode 100644 index d9ed28d0f..000000000 Binary files a/app/src/main/res/drawable-hdpi/tari_recipient_profile_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/tari_speech_notch_up.png b/app/src/main/res/drawable-hdpi/tari_speech_notch_up.png deleted file mode 100644 index e9bfceaaf..000000000 Binary files a/app/src/main/res/drawable-hdpi/tari_speech_notch_up.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/taripowered_by_giphy.png b/app/src/main/res/drawable-hdpi/taripowered_by_giphy.png deleted file mode 100644 index dd72d126c..000000000 Binary files a/app/src/main/res/drawable-hdpi/taripowered_by_giphy.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/tari_recipient_profile_icon.png b/app/src/main/res/drawable-mdpi/tari_recipient_profile_icon.png deleted file mode 100644 index 9af42f8c5..000000000 Binary files a/app/src/main/res/drawable-mdpi/tari_recipient_profile_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/tari_speech_notch_up.png b/app/src/main/res/drawable-mdpi/tari_speech_notch_up.png deleted file mode 100644 index 4d0892aaa..000000000 Binary files a/app/src/main/res/drawable-mdpi/tari_speech_notch_up.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/taripowered_by_giphy.png b/app/src/main/res/drawable-mdpi/taripowered_by_giphy.png deleted file mode 100644 index 6a8fdf8e5..000000000 Binary files a/app/src/main/res/drawable-mdpi/taripowered_by_giphy.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/tari_recipient_profile_icon.png b/app/src/main/res/drawable-xhdpi/tari_recipient_profile_icon.png deleted file mode 100644 index 63d4b720a..000000000 Binary files a/app/src/main/res/drawable-xhdpi/tari_recipient_profile_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/tari_speech_notch_up.png b/app/src/main/res/drawable-xhdpi/tari_speech_notch_up.png deleted file mode 100644 index b4cc7a9a9..000000000 Binary files a/app/src/main/res/drawable-xhdpi/tari_speech_notch_up.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/taripowered_by_giphy.png b/app/src/main/res/drawable-xhdpi/taripowered_by_giphy.png deleted file mode 100644 index 97f2d3148..000000000 Binary files a/app/src/main/res/drawable-xhdpi/taripowered_by_giphy.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/tari_recipient_profile_icon.png b/app/src/main/res/drawable-xxhdpi/tari_recipient_profile_icon.png deleted file mode 100644 index da409c801..000000000 Binary files a/app/src/main/res/drawable-xxhdpi/tari_recipient_profile_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/tari_speech_notch_up.png b/app/src/main/res/drawable-xxhdpi/tari_speech_notch_up.png deleted file mode 100644 index e377436f2..000000000 Binary files a/app/src/main/res/drawable-xxhdpi/tari_speech_notch_up.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/taripowered_by_giphy.png b/app/src/main/res/drawable-xxhdpi/taripowered_by_giphy.png deleted file mode 100644 index 7536625a5..000000000 Binary files a/app/src/main/res/drawable-xxhdpi/taripowered_by_giphy.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/tari_recipient_profile_icon.png b/app/src/main/res/drawable-xxxhdpi/tari_recipient_profile_icon.png deleted file mode 100644 index e01aa597c..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/tari_recipient_profile_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/tari_speech_notch_up.png b/app/src/main/res/drawable-xxxhdpi/tari_speech_notch_up.png deleted file mode 100644 index e770aaf8c..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/tari_speech_notch_up.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/taripowered_by_giphy.png b/app/src/main/res/drawable-xxxhdpi/taripowered_by_giphy.png deleted file mode 100644 index 744b8f086..000000000 Binary files a/app/src/main/res/drawable-xxxhdpi/taripowered_by_giphy.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_apply.xml b/app/src/main/res/drawable/ic_apply.xml deleted file mode 100644 index 43bf21abc..000000000 --- a/app/src/main/res/drawable/ic_apply.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_close_scanner.xml b/app/src/main/res/drawable/ic_close_scanner.xml deleted file mode 100644 index d5928900f..000000000 --- a/app/src/main/res/drawable/ic_close_scanner.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/tari_empty_drawable.xml b/app/src/main/res/drawable/tari_empty_drawable.xml index 315393d30..afeaaa09d 100644 --- a/app/src/main/res/drawable/tari_empty_drawable.xml +++ b/app/src/main/res/drawable/tari_empty_drawable.xml @@ -1,3 +1,2 @@ - - + diff --git a/app/src/main/res/drawable/tari_search_giphy_cta_bg.xml b/app/src/main/res/drawable/tari_search_giphy_cta_bg.xml deleted file mode 100644 index e27ad8191..000000000 --- a/app/src/main/res/drawable/tari_search_giphy_cta_bg.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/vector_all_settings_card.xml b/app/src/main/res/drawable/vector_all_settings_card.xml deleted file mode 100644 index 17a2c01b8..000000000 --- a/app/src/main/res/drawable/vector_all_settings_card.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/vector_avatar_line.xml b/app/src/main/res/drawable/vector_avatar_line.xml deleted file mode 100644 index 67dcecb30..000000000 --- a/app/src/main/res/drawable/vector_avatar_line.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/vector_choose_gif_dialog_input_bg.xml b/app/src/main/res/drawable/vector_choose_gif_dialog_input_bg.xml deleted file mode 100644 index 217f0177d..000000000 --- a/app/src/main/res/drawable/vector_choose_gif_dialog_input_bg.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/vector_contact_link_empty_state.xml b/app/src/main/res/drawable/vector_contact_link_empty_state.xml deleted file mode 100644 index 662264991..000000000 --- a/app/src/main/res/drawable/vector_contact_link_empty_state.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/vector_emoji_id_copied_green_bg.xml b/app/src/main/res/drawable/vector_emoji_id_copied_green_bg.xml deleted file mode 100644 index d022d0c43..000000000 --- a/app/src/main/res/drawable/vector_emoji_id_copied_green_bg.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/vector_emoji_id_copied_white_bg.xml b/app/src/main/res/drawable/vector_emoji_id_copied_white_bg.xml deleted file mode 100644 index 45b967e5d..000000000 --- a/app/src/main/res/drawable/vector_emoji_id_copied_white_bg.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/vector_giphy_search.xml b/app/src/main/res/drawable/vector_giphy_search.xml deleted file mode 100644 index 135d120f6..000000000 --- a/app/src/main/res/drawable/vector_giphy_search.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/vector_grabber_choose_gif.xml b/app/src/main/res/drawable/vector_grabber_choose_gif.xml deleted file mode 100644 index 9b50b6417..000000000 --- a/app/src/main/res/drawable/vector_grabber_choose_gif.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/vector_home_connection.xml b/app/src/main/res/drawable/vector_home_connection.xml deleted file mode 100644 index 9f81c454d..000000000 --- a/app/src/main/res/drawable/vector_home_connection.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/vector_home_icon.xml b/app/src/main/res/drawable/vector_home_icon.xml deleted file mode 100644 index 1140d893f..000000000 --- a/app/src/main/res/drawable/vector_home_icon.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/vector_home_second_gradient_bg.xml b/app/src/main/res/drawable/vector_home_second_gradient_bg.xml deleted file mode 100644 index 1b57cf63c..000000000 --- a/app/src/main/res/drawable/vector_home_second_gradient_bg.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/drawable/vector_home_store_and_forward_progress_view_bg.xml b/app/src/main/res/drawable/vector_home_store_and_forward_progress_view_bg.xml deleted file mode 100644 index a66ed37a3..000000000 --- a/app/src/main/res/drawable/vector_home_store_and_forward_progress_view_bg.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/vector_home_tx_icon_bg.xml b/app/src/main/res/drawable/vector_home_tx_icon_bg.xml deleted file mode 100644 index d4b8f600d..000000000 --- a/app/src/main/res/drawable/vector_home_tx_icon_bg.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/vector_icon_remove_gif.xml b/app/src/main/res/drawable/vector_icon_remove_gif.xml deleted file mode 100644 index fdd243bce..000000000 --- a/app/src/main/res/drawable/vector_icon_remove_gif.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/vector_mainnet_modal_future.xml b/app/src/main/res/drawable/vector_mainnet_modal_future.xml deleted file mode 100644 index 37a8485bd..000000000 --- a/app/src/main/res/drawable/vector_mainnet_modal_future.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/vector_open_in_browser.xml b/app/src/main/res/drawable/vector_open_in_browser.xml deleted file mode 100644 index 5c06272d5..000000000 --- a/app/src/main/res/drawable/vector_open_in_browser.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/vector_profile_icon.xml b/app/src/main/res/drawable/vector_profile_icon.xml deleted file mode 100644 index aea4ce64b..000000000 --- a/app/src/main/res/drawable/vector_profile_icon.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/vector_qr_code_button.xml b/app/src/main/res/drawable/vector_qr_code_button.xml deleted file mode 100644 index 9ab904879..000000000 --- a/app/src/main/res/drawable/vector_qr_code_button.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/vector_search.xml b/app/src/main/res/drawable/vector_search.xml deleted file mode 100644 index 72addcabd..000000000 --- a/app/src/main/res/drawable/vector_search.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/vector_search_giphy.xml b/app/src/main/res/drawable/vector_search_giphy.xml deleted file mode 100644 index 9ce845c89..000000000 --- a/app/src/main/res/drawable/vector_search_giphy.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/vector_settings_icon.xml b/app/src/main/res/drawable/vector_settings_icon.xml deleted file mode 100644 index 8dc7e1f9a..000000000 --- a/app/src/main/res/drawable/vector_settings_icon.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/drawable/vector_sunny.xml b/app/src/main/res/drawable/vector_sunny.xml deleted file mode 100644 index c99d2daea..000000000 --- a/app/src/main/res/drawable/vector_sunny.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/drawable/vector_tx_cancelled_bg.xml b/app/src/main/res/drawable/vector_tx_cancelled_bg.xml deleted file mode 100644 index 83f210169..000000000 --- a/app/src/main/res/drawable/vector_tx_cancelled_bg.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/vector_tx_negative_bg.xml b/app/src/main/res/drawable/vector_tx_negative_bg.xml deleted file mode 100644 index 3c6280837..000000000 --- a/app/src/main/res/drawable/vector_tx_negative_bg.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/vector_tx_positive_bg.xml b/app/src/main/res/drawable/vector_tx_positive_bg.xml deleted file mode 100644 index 81c51dcc0..000000000 --- a/app/src/main/res/drawable/vector_tx_positive_bg.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/vector_wallet.xml b/app/src/main/res/drawable/vector_wallet.xml deleted file mode 100644 index 611804b58..000000000 --- a/app/src/main/res/drawable/vector_wallet.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/vector_yat_logo.xml b/app/src/main/res/drawable/vector_yat_logo.xml deleted file mode 100644 index d605e60d8..000000000 --- a/app/src/main/res/drawable/vector_yat_logo.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/layout/activity_wallet_backup.xml b/app/src/main/res/layout/activity_wallet_backup.xml index 3c444d61a..2e31b5562 100644 --- a/app/src/main/res/layout/activity_wallet_backup.xml +++ b/app/src/main/res/layout/activity_wallet_backup.xml @@ -1,6 +1,5 @@ - - - - - - - - - - - diff --git a/app/src/main/res/layout/dialog_module_space.xml b/app/src/main/res/layout/dialog_module_space.xml index b7d39db1e..9956148a4 100644 --- a/app/src/main/res/layout/dialog_module_space.xml +++ b/app/src/main/res/layout/dialog_module_space.xml @@ -1,7 +1,6 @@ \ No newline at end of file + android:orientation="vertical" /> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_progress.xml b/app/src/main/res/layout/dialog_progress.xml deleted file mode 100644 index 606619203..000000000 --- a/app/src/main/res/layout/dialog_progress.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_add_note.xml b/app/src/main/res/layout/fragment_add_note.xml index 4f50cebf3..f3634155e 100644 --- a/app/src/main/res/layout/fragment_add_note.xml +++ b/app/src/main/res/layout/fragment_add_note.xml @@ -1,11 +1,10 @@ + android:layout_height="match_parent" + android:fitsSystemWindows="true"> @@ -114,100 +113,9 @@ android:textColorHint="?attr/palette_text_light" android:textSize="@dimen/add_note_note_text_size" app:customFont="medium" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_chat.xml b/app/src/main/res/layout/fragment_chat.xml index 453b5ce31..1bfaad130 100644 --- a/app/src/main/res/layout/fragment_chat.xml +++ b/app/src/main/res/layout/fragment_chat.xml @@ -3,9 +3,9 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/root_view" - android:fitsSystemWindows="true" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:fitsSystemWindows="true"> - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_contact_transaction_history.xml b/app/src/main/res/layout/fragment_contact_transaction_history.xml deleted file mode 100644 index 3df8d8619..000000000 --- a/app/src/main/res/layout/fragment_contact_transaction_history.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_add_recipient_list_header.xml b/app/src/main/res/layout/item_add_recipient_list_header.xml deleted file mode 100644 index e81c360b1..000000000 --- a/app/src/main/res/layout/item_add_recipient_list_header.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/item_divider.xml b/app/src/main/res/layout/item_divider.xml deleted file mode 100644 index feeea0234..000000000 --- a/app/src/main/res/layout/item_divider.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_show_more_gifs.xml b/app/src/main/res/layout/item_show_more_gifs.xml deleted file mode 100644 index 06ef86fad..000000000 --- a/app/src/main/res/layout/item_show_more_gifs.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/layout/item_thumbnail_gif.xml b/app/src/main/res/layout/item_thumbnail_gif.xml deleted file mode 100644 index 26a4d2924..000000000 --- a/app/src/main/res/layout/item_thumbnail_gif.xml +++ /dev/null @@ -1,7 +0,0 @@ - - diff --git a/app/src/main/res/layout/item_tx_list.xml b/app/src/main/res/layout/item_tx_list.xml deleted file mode 100644 index 179c19936..000000000 --- a/app/src/main/res/layout/item_tx_list.xml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/view_connection_indicator.xml b/app/src/main/res/layout/view_connection_indicator.xml deleted file mode 100644 index 3e6c21902..000000000 --- a/app/src/main/res/layout/view_connection_indicator.xml +++ /dev/null @@ -1,6 +0,0 @@ - - \ No newline at end of file diff --git a/app/src/main/res/layout/view_divider.xml b/app/src/main/res/layout/view_divider.xml deleted file mode 100644 index 1061bddd4..000000000 --- a/app/src/main/res/layout/view_divider.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - diff --git a/app/src/main/res/layout/view_gif_container.xml b/app/src/main/res/layout/view_gif_container.xml deleted file mode 100644 index 1780b504f..000000000 --- a/app/src/main/res/layout/view_gif_container.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/view_main_list_image_button.xml b/app/src/main/res/layout/view_main_list_image_button.xml deleted file mode 100644 index aa4f7a5ff..000000000 --- a/app/src/main/res/layout/view_main_list_image_button.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/raw/wave_emoji.json b/app/src/main/res/raw/wave_emoji.json deleted file mode 100644 index bd6d3d5d2..000000000 --- a/app/src/main/res/raw/wave_emoji.json +++ /dev/null @@ -1 +0,0 @@ -{"v":"5.6.1","fr":60,"ip":0,"op":231,"w":140,"h":139,"nm":"wave - Lottie","ddd":0,"assets":[{"id":"image_0","w":160,"h":160,"u":"images/","p":"img_0.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"wave.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":57,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":549,"s":[100]},{"t":599,"s":[0]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":30,"s":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":80,"s":[15]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":130,"s":[-15]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":180,"s":[15]},{"t":230,"s":[0]}],"ix":10},"p":{"a":0,"k":[91.5,97.5,0],"ix":2},"a":{"a":0,"k":[124,136,0],"ix":1},"s":{"a":0,"k":[50,50,100],"ix":6}},"ao":0,"ip":0,"op":3600,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/app/src/main/res/values-h640dp/dimens.xml b/app/src/main/res/values-h640dp/dimens.xml index 3bd923cd4..347c0c1de 100644 --- a/app/src/main/res/values-h640dp/dimens.xml +++ b/app/src/main/res/values-h640dp/dimens.xml @@ -5,25 +5,10 @@ 25dp 54dp - - 40dp - 30dp - 25dp 46dp - - - - 180dp - 48dp - 88dp - -48dp - 20dp - - - 24dp diff --git a/app/src/main/res/values-h800dp/dimens.xml b/app/src/main/res/values-h800dp/dimens.xml deleted file mode 100644 index 9983f8931..000000000 --- a/app/src/main/res/values-h800dp/dimens.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - 63dp - 30dp - 30dp - 42dp - - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3981525cc..49f4c66e2 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,6 +7,5 @@ #3A000000 #30000000 #10000000 - #FF000000 diff --git a/app/src/main/res/values/colors_palette_dark.xml b/app/src/main/res/values/colors_palette_dark.xml index 48738eef3..90c689ce3 100644 --- a/app/src/main/res/values/colors_palette_dark.xml +++ b/app/src/main/res/values/colors_palette_dark.xml @@ -1,8 +1,5 @@ - - #C9EB00 - #060606 #181818 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 75b80e164..c2312f780 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -3,13 +3,10 @@ 15dp - 80dp 10dp 50dp - 25dp 4dp 14dp - -56dp 0dp @@ -23,56 +20,25 @@ 14dp 10dp - 3dp - - - - -56dp 30dp - - 25dp - 8dp - 20dp - 20dp - 20dp - 40dp - 15dp - 120dp - 60dp 14dp 14dp - 14dp - 8dp - 36dp 40dp - - 180dp - 44dp - 68dp - -44dp - 12dp - - - - - 25dp - 74dp 12dp 84dp 50dp - 68dp 60dp -56dp @@ -95,10 +61,6 @@ 40dp 12sp 16sp - 64dp - 9dp - - 25dp 230dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9a8fa9fd1..177c85686 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,7 +8,6 @@ https://www.tari.com/user_agreement/ https://www.tari.com/privacy_policy/ https://www.tari.com/disclaimer/ - %s/kernel_search?nonces=%s&signatures=%s https://bridges.torproject.org/bridges @@ -23,29 +22,17 @@ 8 9 . - , - . - - 🤝 - AVENIR_LT_STD_BLACK AVENIR_LT_STD_HEAVY - AVENIR_LT_STD_MEDIUM - AVENIR_NEXT_LT_PRO_REGULAR - AVENIR_LT_STD_LIGHT - Sarah_D - S Thanks again for helping with my move Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - 🍀 - 🍀🍀🍀 Test text @@ -82,7 +69,6 @@ To Close Done - NEW Save Cancel Retry @@ -99,8 +85,6 @@ To Settings Delete Yes! Let\'s do it! - Yeah! Let\'s do it! - Nah, not now Are you sure? Next Hang tight, coming soon! @@ -109,15 +93,12 @@ Copy - COPIED ••• l - Copy Emoji ID Paste copied Emoji ID Tap to see full Emoji ID - ℹ️ You can long-press the Copy Emoji ID button to copy the address in hexadecimal format. Can\'t connect to the interwebs @@ -138,7 +119,6 @@ User Agreement and Privacy Policy - Restore an Existing Wallet We’re off to a great start! Now, let’s create your Emoji ID. @@ -156,12 +136,10 @@ Secure with Biometrics - Proceed Exit Secure your wallet Please enter your biometrics. Tari Universe Wallet will require it each time you open the app. - Please enter your smartphone\'s screen lock PIN, passcode, or pattern. Tari Universe Wallet will require it each time you open the app. Unlock your wallet Please enter your biometrics to unlock your wallet. Please enter your smartphone\'s screen lock PIN, passcode, or pattern to unlock your wallet. @@ -171,18 +149,8 @@ Tari Universe Wallet was not able to authenticate you - Balance Available: %s Yesterday - Transactions - Your wallet setup is complete. - You’re ready to start exploring - We don’t see any transactions yet.\nHopefully something happens soon…🤞 - Navigate to settings - Navigate to wallet info - Navigate to TTL store - Navigate to transactions list - Navigate to Tari send flow Pending Transactions Completed Transactions Add custom base node @@ -190,14 +158,8 @@ Name: %s

Peer:
%s]]>
Not this time - Checking for updates - Receiving new transactions - Completing your transactions - Updating your transactions - You are up to date! Nothing to show here yet. Keep an eye on this screen to stay updated on the status of your transactions. Oh, and remember, you can also use the request function to ask someone to send you some Tari if you want! - No transactions found View all transactions Enter Emoji ID or Contact Name Tari Universe @@ -248,12 +210,6 @@ %dd ago Just now Now - Loading GIF - Retry loading GIF - ➡️ - 🪙 - Someone - You Send To @@ -276,7 +232,6 @@ Recent My Contacts Not a valid Emoji ID - Sorry, you cannot send XTM to yourself. Scan Tari QR code in the box below @@ -303,9 +258,6 @@ Transaction Note Let the recipient know what the payment is for Slide to Send - chosen gif - SEARCH GIPHY - SEARCH GIFS Connecting to the @@ -326,8 +278,6 @@ Transacting in person? Others can scan this QR code from the Tari Universe Wallet App to send you XTM. Your previously connected Yat has lost sync with the app. Click Connect Yats below if you\’d like to reconnect it. Connect Yats - Share Profile - My Tari Universe Wallet Wallet Connect Yats Address Details @@ -336,7 +286,6 @@ View Key: Core Address: Checksum: - Copy Address: Copy Base58 Copy Emojis One Sided Payments @@ -350,21 +299,14 @@ You can\’t delete your name. Give it a quick update instead! Okay, got it! - - Sorry, you can\'t send XTM to offline users - Please make sure your recipient has a reliable internet connection and has the Tari Universe Wallet app open on their device, and then try again. If that doesn\'t work, please verify you have the correct Emoji ID. - Payment Cancelled Payment Received Payment Sent Payment In Progress Contact Name - Information - Add Contact Name Note Edit - Add Contact Name Transaction Fee Waiting for recipient to come online Waiting for sender to complete transaction @@ -375,8 +317,6 @@ You will have to start a new transaction if you change your mind. Yes, cancel Not now - Requested transaction was not found - Please try again later Block #%s Recipient Address Total @@ -387,7 +327,6 @@ Tari Txn ID Processing Status - Cancelled Completed Add contact name… @@ -439,19 +378,8 @@ Failed to send logs: %s Debug - File Size Error - Cannot send: zipped file is over 25MB. - Custom Change base node - Add base node - Custom Base Node - Base Node Name - Public Key HEX - Address - Invalid public key hex. - Invalid address. - Couldn\'t add base node peer. Select theme Select a theme below to change the color scheme @@ -469,7 +397,6 @@ Settings Security Advanced - Yat Wallet Backups Learn More More @@ -517,14 +444,6 @@ Last chance! We\'re about to delete your wallet from this device. You will irreversibly lose your entire balance. Are you 100% sure we should do this? - Time to move on - Good news: The Tari testnet has been reset, bringing a whole host of new features and - upgrades.\n\nBad news: Your old XTM is no longer good here, and the network will reset your balance to zero soon. But on the bright side, - this is a great opportunity to start afresh with a spanking new wallet! What do you say? - Good news: - Bad news: - I\'ll do it later - Start over, I say! Security @@ -533,7 +452,6 @@ Write Down Seed Phrase By backing up your wallet, you’ll ensure that you don’t lose your XTM if your phone is lost or broken. - Change your secure password Checking In progress @@ -550,10 +468,8 @@ Are you sure you want to proceed? Google Drive Backup Local File Backup - Dropbox Backup Restore with Google Drive Restore with Local files - Restore with Dropbox Sync with Universe desktop Keep screen awake during sync @@ -571,7 +487,6 @@ Tap on the words below in the correct order Complete Verification Nope, that’s not right - Sequence is correct Import Wallet @@ -586,7 +501,6 @@ Sync your Universe wallet? You just scanned a wallet from the Tari Universe desktop app! Syncing it will let you track your real-time XTM balance right on your phone.\nWhat would you like to do? Sync Wallet - Don\'t restore right now Sweep the funds Replace current wallet Remember to back up first! @@ -604,14 +518,12 @@ Enter your seed phrase to restore your wallet Select base node Restore Wallet - Recovery Base Node Select Custom Base Node Edit Base Node Oops, looks like the address you entered isn\'t good. We had to revert your change. At least one of the entered seed words is invalid. Please review them and try again You entered not enough seed words. Please add some more and try again Unable to generate key from seed words. Please check your seed words and try again - This could take between 1 to 3 minutes.\nPlease keep the app open Waiting for connection Connection established. The process will start soon Restoring in progress: @@ -645,7 +557,6 @@ Enter Password That’s not it! Change Password - Search GIPHY We\'re always striving to make Tari Universe Wallet better.\nTo achieve this, we use a third-party service to gather non-identifiable data like crash logs and usage statistics. This data helps us pinpoint and fix any issues, ultimately improving your experience @@ -723,12 +634,6 @@ https://thenounproject.com/icon/cloud-3384041/ https://thenounproject.com/icon/password-3384056/ https://thenounproject.com/icon/key-3384048/ - https://thenounproject.com/browse/icons/term/link/ - https://thenounproject.com/browse/icons/term/unlink/ - https://thenounproject.com/browse/icons/term/contact-book/ - https://thenounproject.com/browse/icons/term/bluetooth/ - https://thenounproject.com/browse/icons/term/nfc/ - https://thenounproject.com/browse/icons/term/empty-wallet/ Locked Lock by BlackActurus from\nNounProject.com @@ -749,12 +654,6 @@ Cloud by Tippawan Sookruay from NounProject.com Password by Tippawan Sookruay from NounProject.com Key by Tippawan Sookruay from NounProject.com - Link by Nasik Lababan from Noun Project - Unlink by Nasik Lababan from Noun Project - contact book by Vectors Point from Noun Project - Bluetooth by Winaldi from Noun Project - NFC by Fauzan Adiima from Noun Project - Empty wallet by Fatkhul Karim from Noun Project Wallet @@ -802,7 +701,6 @@ Storage setup was interrupt Your storage is full Funds recovered from your previous wallet - \? Incompatible version detected @@ -913,7 +811,6 @@ Grant app access to my contacts Done Next - Yat Contact Tari Contact Phone Contact Linked Contact @@ -931,16 +828,13 @@ Profile Shared Awesome! Your details have been shared successfully. - You received a message - Charlie has sent you contact details - Contact Sharing %s contacts will be added to your contact book Transaction History Your transaction history with %s No transactions found - %s yet. Click the button below to send some Tari]]> + You don\’t have any transactions with %s yet. Messages @@ -953,7 +847,6 @@ Create a passcode Confirm a passcode - Enter the old passcode Enter the new passcode Confirm the new passcode Enter your passcode to log in diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2605cc117..5836ad754 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,10 +8,6 @@ @android:color/black - -