Updated on 2026-08-14

This commit is contained in:
Tangem 2021-02-05 14:30:31 +00:00
commit 489a079483
3 changed files with 92 additions and 67 deletions

View file

@ -144,23 +144,8 @@ private fun handleSecurityAction(
allowedOptions = EnumSet.noneOf(SecurityOption::class.java)
))
}
val prohibitDefaultPin = state.card.settingsMask?.contains(Settings.ProhibitDefaultPIN1) == true
val allowSetPin1 = state.card.settingsMask?.contains(Settings.AllowSetPIN1) != false
val allowSetPin2 = state.card.settingsMask?.contains(Settings.AllowSetPIN2) != false
val isDefaultPin1 = state.card.isPin1Default != false
val isDefaultPin2 = state.card.isPin2Default != false
val allowedSecurityOptions = EnumSet.noneOf(SecurityOption::class.java)
if ((isDefaultPin1 && isDefaultPin2) || !prohibitDefaultPin) {
allowedSecurityOptions.add(SecurityOption.LongTap)
}
if (allowSetPin1 && (isDefaultPin2 || !prohibitDefaultPin)) {
allowedSecurityOptions.add(SecurityOption.AccessCode)
}
if (allowSetPin2 && (isDefaultPin1 || !prohibitDefaultPin)) {
allowedSecurityOptions.add(SecurityOption.PassCode)
}
val allowedSecurityOptions = prepareAllowedSecurityOptions(state.card)
state.copy(securityScreenState = state.securityScreenState?.copy(
allowedOptions = allowedSecurityOptions,
selectedOption = state.securityScreenState.currentOption
@ -180,15 +165,37 @@ private fun handleSecurityAction(
state.copy(confirmScreenState = confirmScreenState)
}
is DetailsAction.ManageSecurity.SaveChanges.Success -> {
state.copy(securityScreenState = state.securityScreenState?.copy(
currentOption = state.securityScreenState.selectedOption
))
// Setting options to show only LongTap from now on
state.copy(
card = state.card?.copy(isPin1Default = true, isPin2Default = true),
securityScreenState = state.securityScreenState?.copy(
currentOption = state.securityScreenState.selectedOption,
allowedOptions = EnumSet.of(SecurityOption.LongTap)
))
}
else -> state
}
}
private fun prepareAllowedSecurityOptions(card: Card): EnumSet<SecurityOption> {
val prohibitDefaultPin = card.settingsMask?.contains(Settings.ProhibitDefaultPIN1) == true
val isDefaultPin1 = card.isPin1Default != false
val isDefaultPin2 = card.isPin2Default != false
val allowedSecurityOptions = EnumSet.noneOf(SecurityOption::class.java)
if ((isDefaultPin1 && isDefaultPin2) || !prohibitDefaultPin) {
allowedSecurityOptions.add(SecurityOption.LongTap)
}
if (!isDefaultPin1) {
allowedSecurityOptions.add(SecurityOption.AccessCode)
}
if (!isDefaultPin2) {
allowedSecurityOptions.add(SecurityOption.PassCode)
}
return allowedSecurityOptions
}
private fun Card.toCardInfo(): CardInfo? {
val cardId = this.cardId.chunked(4).joinToString(separator = " ")

View file

@ -5,6 +5,7 @@ import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.Fragment
import androidx.transition.TransitionInflater
import com.tangem.tap.common.extensions.show
import com.tangem.tap.common.redux.navigation.NavigationAction
import com.tangem.tap.features.details.redux.DetailsAction
import com.tangem.tap.features.details.redux.DetailsState
@ -91,6 +92,7 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security),
}
private fun enableLongTap(enable: Boolean) {
group_long_tap.show(enable)
val alpha = if (enable) 1f else 0.5f
tv_long_tap_description.alpha = alpha
tv_long_tap_title.alpha = alpha
@ -105,6 +107,7 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security),
}
private fun enablePasscode(enable: Boolean) {
group_passcode.show(enable)
val alpha = if (enable) 1f else 0.5f
tv_passcode_description.alpha = alpha
tv_passcode_title.alpha = alpha
@ -119,6 +122,7 @@ class DetailsSecurityFragment : Fragment(R.layout.fragment_details_security),
}
private fun enableAccessCode(enable: Boolean) {
group_access_code.show(enable)
val alpha = if (enable) 1f else 0.5f
tv_access_code_description.alpha = alpha
tv_access_code_title.alpha = alpha

View file

@ -20,154 +20,168 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="@string/details_row_title_manage_security"
app:navigationIcon="@drawable/ic_baseline_arrow_back_24" />
app:navigationIcon="@drawable/ic_baseline_arrow_back_24"
app:title="@string/details_row_title_manage_security" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_details_confirm"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="33dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="33dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.constraintlayout.widget.Group
android:id="@+id/group_long_tap"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="tv_long_tap_title, radiobutton_long_tap, tv_long_tap_description, v_long_tap" />
<TextView
android:id="@+id/tv_long_tap_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingEnd="16dp"
app:layout_constraintTop_toTopOf="parent"
android:paddingBottom="8dp"
android:text="@string/details_manage_security_long_tap"
android:textSize="16sp"
/>
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/radiobutton_long_tap"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_long_tap_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingBottom="8dp"
android:paddingEnd="60dp"
android:textColor="@color/darkGray1"
app:layout_constraintTop_toBottomOf="@id/tv_long_tap_title"
android:paddingBottom="8dp"
android:text="@string/details_manage_security_long_tap_description"
android:textColor="@color/darkGray1"
android:textSize="13sp"
/>
app:layout_constraintTop_toBottomOf="@id/tv_long_tap_title" />
<View
android:id="@+id/v_long_tap"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="@id/tv_long_tap_title"
app:layout_constraintBottom_toBottomOf="@id/tv_long_tap_description"/>
app:layout_constraintBottom_toBottomOf="@id/tv_long_tap_description"
app:layout_constraintTop_toTopOf="@id/tv_long_tap_title" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_passcode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="tv_passcode_title, radiobutton_passcode, tv_passcode_description, v_passcode" />
<TextView
android:id="@+id/tv_passcode_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingEnd="16dp"
app:layout_constraintTop_toBottomOf="@id/v_long_tap"
android:paddingBottom="8dp"
android:text="@string/details_manage_security_passcode"
android:textSize="16sp"
/>
app:layout_constraintTop_toBottomOf="@id/v_long_tap" />
<com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/radiobutton_passcode"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/v_passcode"/>
app:layout_constraintTop_toTopOf="@id/v_passcode" />
<TextView
android:id="@+id/tv_passcode_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingBottom="8dp"
android:paddingEnd="60dp"
android:textColor="@color/darkGray1"
app:layout_constraintTop_toBottomOf="@id/tv_passcode_title"
android:paddingBottom="8dp"
android:text="@string/details_manage_security_passcode_description"
android:textColor="@color/darkGray1"
android:textSize="13sp"
/>
app:layout_constraintTop_toBottomOf="@id/tv_passcode_title" />
<View
android:id="@+id/v_passcode"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="@id/tv_passcode_title"
app:layout_constraintBottom_toBottomOf="@id/tv_passcode_description"/>
app:layout_constraintBottom_toBottomOf="@id/tv_passcode_description"
app:layout_constraintTop_toTopOf="@id/tv_passcode_title" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_access_code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:constraint_referenced_ids="tv_access_code_title, radiobutton_access_code, tv_access_code_description, v_access_code" />
<TextView
android:id="@+id/tv_access_code_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:paddingEnd="16dp"
app:layout_constraintTop_toBottomOf="@id/v_passcode"
android:paddingBottom="8dp"
android:text="@string/details_manage_security_access_code"
android:textSize="16sp"
/>
app:layout_constraintTop_toBottomOf="@id/v_passcode" />
<com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/radiobutton_access_code"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/v_access_code"/>
app:layout_constraintTop_toTopOf="@id/v_access_code" />
<TextView
android:id="@+id/tv_access_code_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingBottom="8dp"
android:paddingEnd="60dp"
android:textColor="@color/darkGray1"
app:layout_constraintTop_toBottomOf="@id/tv_access_code_title"
android:paddingBottom="8dp"
android:text="@string/details_manage_security_access_code_description"
android:textColor="@color/darkGray1"
android:textSize="13sp"
/>
app:layout_constraintTop_toBottomOf="@id/tv_access_code_title" />
<View
android:id="@+id/v_access_code"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="@id/tv_access_code_title"
app:layout_constraintBottom_toBottomOf="@id/tv_access_code_description"/>
app:layout_constraintBottom_toBottomOf="@id/tv_access_code_description"
app:layout_constraintTop_toTopOf="@id/tv_access_code_title" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
@ -187,9 +201,9 @@
android:layout_marginEnd="16dp"
android:text="@string/common_continue"
app:icon="@drawable/ic_save"
app:layout_constraintStart_toEndOf="@+id/guideline"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
app:layout_constraintStart_toEndOf="@+id/guideline" />
</androidx.constraintlayout.widget.ConstraintLayout>