diff --git a/app/src/main/java/me/timschneeberger/rootlessjamesdsp/fragment/OnboardingFragment.kt b/app/src/main/java/me/timschneeberger/rootlessjamesdsp/fragment/OnboardingFragment.kt index 5344487ed..5be34561f 100644 --- a/app/src/main/java/me/timschneeberger/rootlessjamesdsp/fragment/OnboardingFragment.kt +++ b/app/src/main/java/me/timschneeberger/rootlessjamesdsp/fragment/OnboardingFragment.kt @@ -40,6 +40,7 @@ import me.timschneeberger.rootlessjamesdsp.utils.extensions.PermissionExtensions import me.timschneeberger.rootlessjamesdsp.utils.extensions.PermissionExtensions.hasRecordPermission import me.timschneeberger.rootlessjamesdsp.utils.preferences.Preferences import me.timschneeberger.rootlessjamesdsp.utils.sdkAbove +import me.timschneeberger.rootlessjamesdsp.view.Card import org.koin.android.ext.android.inject import rikka.shizuku.Shizuku import timber.log.Timber @@ -374,6 +375,14 @@ class OnboardingFragment : Fragment() { if(!SdkCheck.isTiramisu) { pageBinding.findViewById(R.id.onboarding_notification_permission).visibility = View.GONE } + pageBinding.findViewById(R.id.privacy_card).apply { + isVisible = !BuildConfig.FOSS_ONLY + checkboxIsChecked = prefsApp.get(R.string.key_share_crash_reports) + setOnCheckChangedListener { + Timber.d("Should share crash reports? $it") + prefsApp.set(R.string.key_share_crash_reports, it) + } + } } // Hide next button because user should continue by choosing a setup method diff --git a/app/src/main/java/me/timschneeberger/rootlessjamesdsp/view/Card.kt b/app/src/main/java/me/timschneeberger/rootlessjamesdsp/view/Card.kt index 5797e83db..ce22cb2d4 100644 --- a/app/src/main/java/me/timschneeberger/rootlessjamesdsp/view/Card.kt +++ b/app/src/main/java/me/timschneeberger/rootlessjamesdsp/view/Card.kt @@ -12,10 +12,11 @@ import androidx.appcompat.content.res.AppCompatResources import androidx.core.content.ContextCompat import androidx.core.view.isVisible import androidx.core.view.setMargins +import com.google.android.material.checkbox.MaterialCheckBox import me.timschneeberger.rootlessjamesdsp.R import me.timschneeberger.rootlessjamesdsp.databinding.ViewCardBinding -import me.timschneeberger.rootlessjamesdsp.utils.extensions.asHtml import me.timschneeberger.rootlessjamesdsp.utils.extensions.ContextExtensions.dpToPx +import me.timschneeberger.rootlessjamesdsp.utils.extensions.asHtml class Card @JvmOverloads constructor( @@ -26,9 +27,20 @@ class Card @JvmOverloads constructor( ) : LinearLayout(context, attrs) { private var onButtonClickListener: (() -> Unit)? = null + private var onCheckChangedListener: ((Boolean) -> Unit)? = null private var onCloseClickListener: (() -> Unit)? = null private val binding: ViewCardBinding + var checkboxVisible: Boolean = true + set(value) { + field = value + binding.closeButtonLayout.isVisible = value + binding.checkbox.isVisible = value + binding.close.isVisible = false + } + var checkboxIsChecked: Boolean + get() = binding.checkbox.isChecked + set(value) { binding.checkbox.isChecked = value } var buttonEnabled: Boolean = true set(value) { field = value @@ -46,6 +58,8 @@ class Card @JvmOverloads constructor( set(value) { field = value binding.closeButtonLayout.isVisible = value + binding.close.isVisible = value + binding.checkbox.isVisible = false } var titleText: String? = null set(value) { @@ -97,6 +111,7 @@ class Card @JvmOverloads constructor( closeButtonVisible = a.getBoolean(R.styleable.Card_closeButtonVisible, false) buttonText = a.getString(R.styleable.Card_buttonText) buttonEnabled = a.getBoolean(R.styleable.Card_buttonEnabled, true) + checkboxVisible = a.getBoolean(R.styleable.Card_checkboxVisible, false) iconSrc = a.getResourceId(R.styleable.Card_iconSrc, 0) iconTint = a.getColorStateList(R.styleable.Card_iconTint) @@ -121,9 +136,25 @@ class Card @JvmOverloads constructor( onCloseClickListener?.invoke() } + binding.root.setOnClickListener { + binding.checkbox.isChecked = !binding.checkbox.isChecked + } + updateForeground() } + override fun onAttachedToWindow() { + binding.checkbox.addOnCheckedStateChangedListener { _, state -> + onCheckChangedListener?.invoke(state == MaterialCheckBox.STATE_CHECKED) + } + super.onAttachedToWindow() + } + + override fun onDetachedFromWindow() { + binding.checkbox.clearOnCheckedStateChangedListeners() + super.onDetachedFromWindow() + } + private fun updateForeground() { binding.root.foreground = if(isClickable) { val value = TypedValue() @@ -138,6 +169,10 @@ class Card @JvmOverloads constructor( onButtonClickListener = listener } + fun setOnCheckChangedListener(listener: ((Boolean) -> Unit)?) { + onCheckChangedListener = listener + } + fun setOnCloseClickListener(listener: (() -> Unit)?) { onCloseClickListener = listener } diff --git a/app/src/main/res/drawable/ic_twotone_privacy_tip_24dp.xml b/app/src/main/res/drawable/ic_twotone_privacy_tip_24dp.xml new file mode 100644 index 000000000..16e46154f --- /dev/null +++ b/app/src/main/res/drawable/ic_twotone_privacy_tip_24dp.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/layout/onboarding_page5.xml b/app/src/main/res/layout/onboarding_page5.xml index 4e227befe..6476308d5 100644 --- a/app/src/main/res/layout/onboarding_page5.xml +++ b/app/src/main/res/layout/onboarding_page5.xml @@ -45,6 +45,19 @@ android:layout_height="wrap_content" android:orientation="vertical"> + + + + + +