summaryrefslogtreecommitdiff
path: root/adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsTopicsFragment.java
diff options
context:
space:
mode:
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.java76
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);
+ }
+ });
}
}