diff options
Diffstat (limited to 'adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsTopicsFragment.java')
-rw-r--r-- | adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsTopicsFragment.java | 76 |
1 files changed, 64 insertions, 12 deletions
diff --git a/adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsTopicsFragment.java b/adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsTopicsFragment.java index 897bc9b472..69b269f4a4 100644 --- a/adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsTopicsFragment.java +++ b/adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsTopicsFragment.java @@ -19,18 +19,23 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.android.adservices.api.R; -import com.android.adservices.ui.settings.ActionDelegate; -import com.android.adservices.ui.settings.AdServicesSettingsActivity; +import com.android.adservices.data.topics.Topic; +import com.android.adservices.ui.settings.activities.TopicsActivity; +import com.android.adservices.ui.settings.delegates.TopicsActionDelegate; import com.android.adservices.ui.settings.viewadatpors.TopicsListViewAdapter; import com.android.adservices.ui.settings.viewmodels.TopicsViewModel; +import java.util.function.Function; + /** Fragment for the topics view of the AdServices Settings App. */ public class AdServicesSettingsTopicsFragment extends Fragment { @@ -46,38 +51,85 @@ public class AdServicesSettingsTopicsFragment extends Fragment { initActionListeners(); } + @Override + public void onResume() { + super.onResume(); + TopicsViewModel viewModel = + new ViewModelProvider(requireActivity()).get(TopicsViewModel.class); + viewModel.refresh(); + } + // initialize all action listeners except for actions in topics list private void initActionListeners() { - ActionDelegate actionDelegate = - ((AdServicesSettingsActivity) requireActivity()).getActionDelegate(); + TopicsActionDelegate actionDelegate = + ((TopicsActivity) requireActivity()).getActionDelegate(); actionDelegate.initTopicsFragment(this); } // initializes view model connection with topics list. // (Action listeners for each item in the list will be handled by the adapter) private void setupViewModel(View rootView) { + // create adapter TopicsViewModel viewModel = - ((AdServicesSettingsActivity) requireActivity()) - .getViewModelProvider() - .get(TopicsViewModel.class); + new ViewModelProvider(requireActivity()).get(TopicsViewModel.class); + Function<Topic, View.OnClickListener> getOnclickListener = + topic -> view -> viewModel.revokeTopicConsentButtonClickHandler(topic); + TopicsListViewAdapter adapter = + new TopicsListViewAdapter( + requireContext(), viewModel.getTopics(), getOnclickListener, false); + + // set adapter for recyclerView RecyclerView recyclerView = rootView.findViewById(R.id.topics_list); recyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); - TopicsListViewAdapter adapter = new TopicsListViewAdapter(viewModel, false); recyclerView.setAdapter(adapter); View noTopicsMessage = rootView.findViewById(R.id.no_topics_message); View emptyTopicsHiddenSection = rootView.findViewById(R.id.empty_topics_hidden_section); + View blockedTopicsButton = rootView.findViewById(R.id.blocked_topics_button); + // "Empty State": the state when the non-blocked list of apps/topics is empty. + // blocked_apps_when_empty_state_button is added to noTopicsMessage + // noTopicsMessages is visible only when Empty State + // blocked_topics_when_empty_state_button differs from blocked_topics_button + // in style with rounded corners, centered, colored viewModel .getTopics() .observe( getViewLifecycleOwner(), topicsList -> { - noTopicsMessage.setVisibility( - topicsList.isEmpty() ? View.VISIBLE : View.GONE); - emptyTopicsHiddenSection.setVisibility( - topicsList.isEmpty() ? View.GONE : View.VISIBLE); + if (topicsList.isEmpty()) { + noTopicsMessage.setVisibility(View.VISIBLE); + emptyTopicsHiddenSection.setVisibility(View.GONE); + blockedTopicsButton.setVisibility(View.GONE); + } else { + noTopicsMessage.setVisibility(View.GONE); + emptyTopicsHiddenSection.setVisibility(View.VISIBLE); + blockedTopicsButton.setVisibility(View.VISIBLE); + } adapter.notifyDataSetChanged(); }); + + // locked_topics_when_empty_state_button is disabled if there is no blocked topics + Button blockedTopicsWhenEmptyStateButton = + rootView.findViewById(R.id.blocked_topics_when_empty_state_button); + viewModel + .getBlockedTopics() + .observe( + getViewLifecycleOwner(), + blockedTopicsList -> { + if (blockedTopicsList.isEmpty()) { + blockedTopicsWhenEmptyStateButton.setEnabled(false); + blockedTopicsWhenEmptyStateButton.setAlpha( + getResources().getFloat(R.dimen.disabled_button_alpha)); + blockedTopicsWhenEmptyStateButton.setText( + R.string.settingsUI_topics_view_no_blocked_topics_text); + } else { + blockedTopicsWhenEmptyStateButton.setEnabled(true); + blockedTopicsWhenEmptyStateButton.setAlpha( + getResources().getFloat(R.dimen.enabled_button_alpha)); + blockedTopicsWhenEmptyStateButton.setText( + R.string.settingsUI_blocked_topics_title); + } + }); } } |