Skip to content

Commit

Permalink
AppTP [1/2]: Trackers Screen (#2666)
Browse files Browse the repository at this point in the history
Task/Issue URL:
https://app.asana.com/0/1174433894299346/1203577953787622

### Description
This PR updates the Tracker screen sections of AppTP to the latest
designs

### Steps to test this PR
Steps in https://app.asana.com/0/1174433894299346/1203578103740008

Co-authored-by: Noelia Alcala <nalcalag@gmail.com>
Co-authored-by: Aitor Viana <aitorvs@gmail.com>
  • Loading branch information
3 people committed Jan 20, 2023
1 parent b3af856 commit b10d8e0
Show file tree
Hide file tree
Showing 63 changed files with 787 additions and 1,365 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -121,11 +121,6 @@ class ManuallyDisableAppProtectionDialog : DialogFragment() {
private const val KEY_APP_PACKAGE_NAME = "KEY_APP_PACKAGE_NAME"
private const val KEY_APP_NAME = "KEY_APP_NAME"

const val NO_REASON_NEEDED = 0
const val STOPPED_WORKING = 1
const val TRACKING_OK = 2
const val DONT_USE = 3

fun instance(appInfo: TrackingProtectionAppInfo): ManuallyDisableAppProtectionDialog {
return ManuallyDisableAppProtectionDialog().also { fragment ->
val bundle = Bundle()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,6 @@ class TrackingProtectionAppsAdapter(val listener: AppProtectionListener) :
return excludedApps.size
}

fun updateSwitchPosition(position: Int) {
notifyItemChanged(position)
}

private class DiffCallback(
private val oldList: List<AppsProtectionType>,
private val newList: List<AppsProtectionType>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import androidx.recyclerview.widget.RecyclerView
import com.duckduckgo.app.global.extensions.safeGetApplicationIcon
import com.duckduckgo.mobile.android.ui.view.quietlySetIsChecked
import com.duckduckgo.mobile.android.vpn.R
import com.duckduckgo.mobile.android.vpn.ui.notification.applyBoldSpanTo
import kotlinx.android.synthetic.main.view_device_shield_report_app_breakage_entry.view.*

class ReportBreakageAppListAdapter(private val listener: Listener) : RecyclerView.Adapter<ReportBreakageAppListViewHolder>() {
Expand Down Expand Up @@ -104,9 +103,7 @@ class ReportBreakageAppListViewHolder(view: View) : RecyclerView.ViewHolder(view
position: Int,
listener: ReportBreakageAppListAdapter.Listener,
) {
itemView.deviceShieldInstalledAppEntryName.text =
String.format(itemView.context.resources.getString(R.string.atp_ReportBreakageAppEntry), installedApp.name)
.applyBoldSpanTo(listOf(installedApp.name))
itemView.deviceShieldInstalledAppEntryName.text = installedApp.name

itemView.deviceShieldInstalledAppSelector.quietlySetIsChecked(installedApp.isSelected) { _, _ ->
listener.onInstalledAppSelected(installedApp, position)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Base64
import androidx.appcompat.app.AlertDialog
import androidx.core.text.HtmlCompat
import androidx.lifecycle.Lifecycle.State.STARTED
import androidx.lifecycle.flowWithLifecycle
Expand All @@ -29,6 +28,7 @@ import com.duckduckgo.anvil.annotations.InjectWith
import com.duckduckgo.app.global.DuckDuckGoActivity
import com.duckduckgo.di.scopes.ActivityScope
import com.duckduckgo.di.scopes.VpnScope
import com.duckduckgo.mobile.android.ui.view.dialog.RadioListAlertDialogBuilder
import com.duckduckgo.mobile.android.ui.viewbinding.viewBinding
import com.duckduckgo.mobile.android.vpn.R
import com.duckduckgo.mobile.android.vpn.breakage.ReportBreakageCategorySingleChoiceViewModel.Command
Expand Down Expand Up @@ -87,21 +87,28 @@ class ReportBreakageCategorySingleChoiceActivity : DuckDuckGoActivity() {
}

private fun configureListeners() {
val categories = viewModel.shuffledCategories.map { getString(it.category) }.toTypedArray()
binding.categoriesSelection.setOnClickListener {
AlertDialog.Builder(this)
val categories = viewModel.shuffledCategories.map { it.category }
binding.categoriesSelection.onAction {
RadioListAlertDialogBuilder(this)
.setTitle(getString(R.string.atp_ReportBreakageCategoriesTitle))
.setSingleChoiceItems(categories, viewModel.indexSelected) { _, newIndex ->
viewModel.onCategoryIndexChanged(newIndex)
}
.setPositiveButton(getString(android.R.string.yes)) { dialog, _ ->
viewModel.onCategoryAccepted()
dialog.dismiss()
}
.setNegativeButton(getString(android.R.string.no)) { dialog, _ ->
viewModel.onCategorySelectionCancelled()
dialog.dismiss()
}
.setOptions(categories, viewModel.indexSelected + 1)
.setPositiveButton(android.R.string.ok)
.setNegativeButton(android.R.string.cancel)
.addEventListener(
object : RadioListAlertDialogBuilder.EventListener() {
override fun onRadioItemSelected(selectedItem: Int) {
viewModel.onCategoryIndexChanged(selectedItem - 1)
}

override fun onPositiveButtonClicked(selectedItem: Int) {
viewModel.onCategoryAccepted()
}

override fun onNegativeButtonClicked() {
viewModel.onCategorySelectionCancelled()
}
},
)
.show()
}
binding.ctaNextFormSubmit.setOnClickListener { viewModel.onSubmitPressed() }
Expand Down Expand Up @@ -149,7 +156,7 @@ class ReportBreakageCategorySingleChoiceActivity : DuckDuckGoActivity() {
private fun render(viewState: ViewState) {
val category =
viewState.categorySelected?.let { getString(viewState.categorySelected.category) }.orEmpty()
binding.categoriesSelection.setText(category)
binding.categoriesSelection.text = category
binding.ctaNextFormSubmit.isEnabled = viewState.submitAllowed
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class AlwaysOnAlertDialogFragment private constructor() : BottomSheetDialogFragm
private lateinit var listener: Listener
private lateinit var fragmentType: FragmentType

override fun getTheme(): Int = R.style.AlwaysOnBottomSheetDialogTheme
override fun getTheme(): Int = com.duckduckgo.mobile.android.R.style.Widget_DuckDuckGo_BottomSheetDialogCollapsed

override fun onAttach(context: Context) {
AndroidSupportInjection.inject(this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import com.duckduckgo.anvil.annotations.InjectWith
import com.duckduckgo.app.global.DuckDuckGoActivity
import com.duckduckgo.appbuildconfig.api.AppBuildConfig
import com.duckduckgo.di.scopes.ActivityScope
import com.duckduckgo.mobile.android.ui.view.dialog.TextAlertDialogBuilder
import com.duckduckgo.mobile.android.ui.view.getColorFromAttr
import com.duckduckgo.mobile.android.ui.viewbinding.viewBinding
import com.duckduckgo.mobile.android.vpn.AppTpVpnFeature
Expand All @@ -43,14 +44,13 @@ import com.duckduckgo.mobile.android.vpn.ui.onboarding.Command.LaunchVPN
import com.duckduckgo.mobile.android.vpn.ui.onboarding.Command.RequestVPNPermission
import com.duckduckgo.mobile.android.vpn.ui.onboarding.Command.ShowVpnAlwaysOnConflictDialog
import com.duckduckgo.mobile.android.vpn.ui.onboarding.Command.ShowVpnConflictDialog
import com.duckduckgo.mobile.android.vpn.ui.tracker_activity.AppTPVpnConflictDialog
import com.duckduckgo.mobile.android.vpn.ui.tracker_activity.DeviceShieldTrackerActivity
import javax.inject.Inject
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach

@InjectWith(ActivityScope::class)
class VpnOnboardingActivity : DuckDuckGoActivity(), AppTPVpnConflictDialog.Listener {
class VpnOnboardingActivity : DuckDuckGoActivity() {

@Inject
lateinit var deviceShieldPixels: DeviceShieldPixels
Expand Down Expand Up @@ -180,8 +180,8 @@ class VpnOnboardingActivity : DuckDuckGoActivity(), AppTPVpnConflictDialog.Liste
private fun processCommand(command: Command) {
when (command) {
is LaunchVPN -> startVpn()
is ShowVpnConflictDialog -> launchVPNConflictDialog(false)
is ShowVpnAlwaysOnConflictDialog -> launchVPNConflictDialog(true)
is ShowVpnConflictDialog -> showVpnConflictDialog()
is ShowVpnAlwaysOnConflictDialog -> showAlwaysOnConflictDialog()
is CheckVPNPermission -> checkVPNPermission()
is RequestVPNPermission -> obtainVpnRequestPermission(command.vpnIntent)
}
Expand Down Expand Up @@ -228,21 +228,54 @@ class VpnOnboardingActivity : DuckDuckGoActivity(), AppTPVpnConflictDialog.Liste
viewModel.onAppTpEnabled()
}

private fun launchVPNConflictDialog(isAlwaysOn: Boolean) {
private fun showVpnConflictDialog() {
deviceShieldPixels.didShowVpnConflictDialog()
val dialog = AppTPVpnConflictDialog.instance(this, isAlwaysOn)
dialog.show(
supportFragmentManager,
AppTPVpnConflictDialog.TAG_VPN_CONFLICT_DIALOG,
)
TextAlertDialogBuilder(this)
.setTitle(R.string.atp_VpnConflictDialogTitle)
.setMessage(R.string.atp_VpnConflictDialogMessage)
.setPositiveButton(R.string.atp_VpnConflictDialogGotIt)
.setNegativeButton(R.string.atp_VpnConflictDialogCancel)
.addEventListener(
object : TextAlertDialogBuilder.EventListener() {
override fun onPositiveButtonClicked() {
onVpnConflictDialogContinue()
}

override fun onNegativeButtonClicked() {
onVpnConflictDialogDismiss()
}
},
)
.show()
}

private fun showAlwaysOnConflictDialog() {
deviceShieldPixels.didShowVpnConflictDialog()
TextAlertDialogBuilder(this)
.setTitle(R.string.atp_VpnConflictAlwaysOnDialogTitle)
.setMessage(R.string.atp_VpnConflictDialogAlwaysOnMessage)
.setPositiveButton(R.string.atp_VpnConflictDialogOpenSettings)
.setNegativeButton(R.string.atp_VpnConflictDialogCancel)
.addEventListener(
object : TextAlertDialogBuilder.EventListener() {
override fun onPositiveButtonClicked() {
onVpnConflictDialogGoToSettings()
}

override fun onNegativeButtonClicked() {
onVpnConflictDialogDismiss()
}
},
)
.show()
}

override fun onVpnConflictDialogDismiss() {
fun onVpnConflictDialogDismiss() {
deviceShieldPixels.didChooseToDismissVpnConflictDialog()
}

@SuppressLint("InlinedApi")
override fun onVpnConflictDialogGoToSettings() {
fun onVpnConflictDialogGoToSettings() {
deviceShieldPixels.didChooseToOpenSettingsFromVpnConflictDialog()

val intent = if (appBuildConfig.sdkInt >= Build.VERSION_CODES.N) {
Expand All @@ -254,7 +287,7 @@ class VpnOnboardingActivity : DuckDuckGoActivity(), AppTPVpnConflictDialog.Liste
startActivity(intent)
}

override fun onVpnConflictDialogContinue() {
fun onVpnConflictDialogContinue() {
deviceShieldPixels.didChooseToContinueFromVpnConflictDialog()
checkVPNPermission()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ class AppTPCompanyTrackersActivity : DuckDuckGoActivity() {

private fun renderViewState(viewState: ViewState) {
cachedState = viewState
binding.trackingAttempts.text = resources.getQuantityString(
binding.trackingAttempts.primaryText = resources.getQuantityString(
R.plurals.atp_CompanyDetailsTrackingAttemptsTitle,
viewState.totalTrackingAttempts,
viewState.totalTrackingAttempts,
Expand Down

This file was deleted.

Loading

0 comments on commit b10d8e0

Please sign in to comment.