| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.components.webapps.pwa_universal_install; |
| |
| import android.view.View; |
| import android.view.View.OnClickListener; |
| import android.widget.ImageView; |
| import android.widget.TextView; |
| |
| import org.chromium.components.webapps.R; |
| import org.chromium.ui.modelutil.PropertyKey; |
| import org.chromium.ui.modelutil.PropertyModel; |
| |
| /** |
| * Binds a pwa-universal-install {@link PropertyModel} with a {@link |
| * PwaUniversalInstallBottomSheetView}. |
| */ |
| class PwaUniversalInstallBottomSheetViewBinder { |
| static void bind( |
| PropertyModel model, PwaUniversalInstallBottomSheetView view, PropertyKey propertyKey) { |
| if (propertyKey.equals(PwaUniversalInstallProperties.TITLE)) { |
| ((TextView) view.getContentView().findViewById(R.id.title)) |
| .setText(model.get(PwaUniversalInstallProperties.TITLE)); |
| } else if (propertyKey.equals(PwaUniversalInstallProperties.VIEW_STATE)) { |
| setupInstallOrOpenClickListener(model, view); |
| } else if (propertyKey.equals( |
| PwaUniversalInstallProperties.INSTALL_BUTTON_ON_CLICK_CALLBACK)) { |
| setupInstallOrOpenClickListener(model, view); |
| } else if (propertyKey.equals( |
| PwaUniversalInstallProperties.OPEN_APP_BUTTON_ON_CLICK_CALLBACK)) { |
| setupInstallOrOpenClickListener(model, view); |
| } else if (propertyKey.equals( |
| PwaUniversalInstallProperties.ADD_SHORTCUT_BUTTON_ON_CLICK_CALLBACK)) { |
| OnClickListener listener = |
| model.get(PwaUniversalInstallProperties.ADD_SHORTCUT_BUTTON_ON_CLICK_CALLBACK); |
| // Both the arrow and the underlying view should trigger the listener callback. |
| ((ImageView) view.getContentView().findViewById(R.id.arrow_shortcut)) |
| .setOnClickListener(listener); |
| view.getContentView().findViewById(R.id.option_shortcut).setOnClickListener(listener); |
| } |
| } |
| |
| static void setupInstallOrOpenClickListener( |
| PropertyModel model, PwaUniversalInstallBottomSheetView view) { |
| OnClickListener listener = null; |
| TextView installText = view.getContentView().findViewById(R.id.option_text_install); |
| TextView installExplanation = |
| view.getContentView().findViewById(R.id.option_text_install_explanation); |
| ImageView installArrow = view.getContentView().findViewById(R.id.arrow_install); |
| |
| switch (model.get(PwaUniversalInstallProperties.VIEW_STATE)) { |
| case PwaUniversalInstallProperties.ViewState.CHECKING_APP: |
| installText.setText(R.string.pwa_uni_install_option_install); |
| installExplanation.setText(R.string.pwa_uni_install_checking_installability); |
| installExplanation.setVisibility(View.VISIBLE); |
| installArrow.setVisibility(View.VISIBLE); |
| break; |
| case PwaUniversalInstallProperties.ViewState.APP_ALREADY_INSTALLED: |
| installText.setText(R.string.pwa_uni_install_option_already_installed); |
| installExplanation.setText(R.string.pwa_uni_install_option_open_explanation); |
| installExplanation.setVisibility(View.VISIBLE); |
| installArrow.setVisibility(View.VISIBLE); |
| |
| listener = |
| model.get(PwaUniversalInstallProperties.OPEN_APP_BUTTON_ON_CLICK_CALLBACK); |
| break; |
| case PwaUniversalInstallProperties.ViewState.APP_IS_INSTALLABLE: |
| installText.setText(R.string.pwa_uni_install_option_install); |
| installExplanation.setVisibility(View.GONE); |
| installArrow.setVisibility(View.VISIBLE); |
| |
| listener = |
| model.get(PwaUniversalInstallProperties.INSTALL_BUTTON_ON_CLICK_CALLBACK); |
| break; |
| case PwaUniversalInstallProperties.ViewState.APP_IS_NOT_INSTALLABLE: |
| installText.setText(R.string.pwa_uni_install_option_install); |
| installExplanation.setText(R.string.pwa_uni_install_option_install_disabled); |
| installExplanation.setVisibility(View.VISIBLE); |
| installArrow.setVisibility(View.GONE); |
| break; |
| } |
| |
| // Both the arrow and the underlying view should trigger the listener callback. |
| ((ImageView) view.getContentView().findViewById(R.id.arrow_install)) |
| .setOnClickListener(listener); |
| view.getContentView().findViewById(R.id.option_install).setOnClickListener(listener); |
| } |
| } |