diff options
Diffstat (limited to 'adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsAppsFragment.java')
-rw-r--r-- | adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsAppsFragment.java | 85 |
1 files changed, 65 insertions, 20 deletions
diff --git a/adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsAppsFragment.java b/adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsAppsFragment.java index 1b866efb3a..b40a1fe156 100644 --- a/adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsAppsFragment.java +++ b/adservices/apk/java/com/android/adservices/ui/settings/fragments/AdServicesSettingsAppsFragment.java @@ -19,68 +19,113 @@ 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.service.consent.App; +import com.android.adservices.ui.settings.activities.AppsActivity; +import com.android.adservices.ui.settings.delegates.AppsActionDelegate; import com.android.adservices.ui.settings.viewadatpors.AppsListViewAdapter; import com.android.adservices.ui.settings.viewmodels.AppsViewModel; +import java.util.function.Function; + /** Fragment for the apps view of the AdServices Settings App. */ public class AdServicesSettingsAppsFragment extends Fragment { @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.apps_fragment, container, false); - - setupViewModel(rootView); - - return rootView; + return inflater.inflate(R.layout.apps_fragment, container, false); } @Override public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { + setupViewModel(view); initActionListeners(); } - // initialize all action listeners except for actions in topics list + @Override + public void onResume() { + super.onResume(); + AppsViewModel viewModel = new ViewModelProvider(requireActivity()).get(AppsViewModel.class); + viewModel.refresh(); + } + + // initialize all action listeners except for actions in apps list private void initActionListeners() { - ActionDelegate actionDelegate = - ((AdServicesSettingsActivity) requireActivity()).getActionDelegate(); + AppsActionDelegate actionDelegate = ((AppsActivity) requireActivity()).getActionDelegate(); actionDelegate.initAppsFragment(this); } - // initializes view model connection with topics list. + // initializes view model connection with apps list. // (Action listeners for each item in the list will be handled by the adapter) private void setupViewModel(View rootView) { - AppsViewModel viewModel = - ((AdServicesSettingsActivity) requireActivity()) - .getViewModelProvider() - .get(AppsViewModel.class); + // create adapter + AppsViewModel viewModel = new ViewModelProvider(requireActivity()).get(AppsViewModel.class); + Function<App, View.OnClickListener> getOnclickListener = + app -> view -> viewModel.revokeAppConsentButtonClickHandler(app); + AppsListViewAdapter adapter = + new AppsListViewAdapter( + requireContext(), viewModel.getApps(), getOnclickListener, false); + + // set adapter for recyclerView RecyclerView recyclerView = rootView.findViewById(R.id.apps_list); recyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); - AppsListViewAdapter adapter = new AppsListViewAdapter(viewModel, false); recyclerView.setAdapter(adapter); View noAppsMessage = rootView.findViewById(R.id.no_apps_message); View emptyAppsHiddenSection = rootView.findViewById(R.id.empty_apps_hidden_section); + View blockedAppsBtn = rootView.findViewById(R.id.blocked_apps_button); + // "Empty State": the state when the non-blocked list of apps/topics is empty. + // blocked_apps_when_empty_state_button is added to noAppsMessage + // noAppsMessages is visible only when Empty State + // blocked_apps_when_empty_state_button differs from blocked_apps_button + // in style with rounded corners, centered, colored viewModel .getApps() .observe( getViewLifecycleOwner(), appsList -> { - noAppsMessage.setVisibility( - appsList.isEmpty() ? View.VISIBLE : View.GONE); - emptyAppsHiddenSection.setVisibility( - appsList.isEmpty() ? View.GONE : View.VISIBLE); + if (appsList.isEmpty()) { + noAppsMessage.setVisibility(View.VISIBLE); + emptyAppsHiddenSection.setVisibility(View.GONE); + blockedAppsBtn.setVisibility(View.GONE); + } else { + noAppsMessage.setVisibility(View.GONE); + emptyAppsHiddenSection.setVisibility(View.VISIBLE); + blockedAppsBtn.setVisibility(View.VISIBLE); + } adapter.notifyDataSetChanged(); }); + + Button blockedAppsWhenEmptyStateButton = + rootView.findViewById(R.id.blocked_apps_when_empty_state_button); + viewModel + .getBlockedApps() + .observe( + getViewLifecycleOwner(), + blockedAppsList -> { + if (blockedAppsList.isEmpty()) { + blockedAppsWhenEmptyStateButton.setEnabled(false); + blockedAppsWhenEmptyStateButton.setAlpha( + getResources().getFloat(R.dimen.disabled_button_alpha)); + blockedAppsWhenEmptyStateButton.setText( + R.string.settingsUI_apps_view_no_blocked_apps_text); + } else { + blockedAppsWhenEmptyStateButton.setEnabled(true); + blockedAppsWhenEmptyStateButton.setAlpha( + getResources().getFloat(R.dimen.enabled_button_alpha)); + blockedAppsWhenEmptyStateButton.setText( + R.string.settingsUI_blocked_apps_title); + } + }); } } |