summaryrefslogtreecommitdiff
path: root/Host/app/renderer/src/main/java/com/android/car/libraries/templates/host/view/presenters/common/RowListWrapperTemplatePresenter.java
diff options
context:
space:
mode:
Diffstat (limited to 'Host/app/renderer/src/main/java/com/android/car/libraries/templates/host/view/presenters/common/RowListWrapperTemplatePresenter.java')
-rw-r--r--Host/app/renderer/src/main/java/com/android/car/libraries/templates/host/view/presenters/common/RowListWrapperTemplatePresenter.java132
1 files changed, 132 insertions, 0 deletions
diff --git a/Host/app/renderer/src/main/java/com/android/car/libraries/templates/host/view/presenters/common/RowListWrapperTemplatePresenter.java b/Host/app/renderer/src/main/java/com/android/car/libraries/templates/host/view/presenters/common/RowListWrapperTemplatePresenter.java
new file mode 100644
index 0000000..ea049fd
--- /dev/null
+++ b/Host/app/renderer/src/main/java/com/android/car/libraries/templates/host/view/presenters/common/RowListWrapperTemplatePresenter.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.car.libraries.templates.host.view.presenters.common;
+
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+
+import android.annotation.SuppressLint;
+import android.content.res.TypedArray;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import androidx.annotation.ColorInt;
+import androidx.annotation.StyleableRes;
+import androidx.car.app.model.Action;
+import androidx.car.app.model.ActionStrip;
+import androidx.car.app.model.TemplateWrapper;
+import com.android.car.libraries.apphost.common.StatusBarManager.StatusBarState;
+import com.android.car.libraries.apphost.common.TemplateContext;
+import com.android.car.libraries.apphost.template.view.model.RowListWrapper;
+import com.android.car.libraries.apphost.template.view.model.RowListWrapperTemplate;
+import com.android.car.libraries.apphost.view.AbstractTemplatePresenter;
+import com.android.car.libraries.apphost.view.TemplatePresenter;
+import com.android.car.libraries.apphost.view.common.ActionButtonListParams;
+import com.android.car.libraries.templates.host.R;
+import com.android.car.libraries.templates.host.view.widgets.common.ActionButtonListView;
+import com.android.car.libraries.templates.host.view.widgets.common.ContentView;
+import com.android.car.libraries.templates.host.view.widgets.common.HeaderView;
+import java.util.List;
+
+/** A {@link TemplatePresenter} for {@link RowListWrapperTemplate} instances. */
+public class RowListWrapperTemplatePresenter extends AbstractTemplatePresenter {
+ // TODO(b/183643108): Use a common value for this constant
+ private static final int MAX_ALLOWED_ACTIONS = 2;
+
+ private final ViewGroup mRootView;
+ private final HeaderView mHeaderView;
+ private final ContentView mContentView;
+ private final ActionButtonListView mStickyActionButtonListView;
+ private final ActionButtonListParams mActionButtonListParams;
+
+ /** Create a RowListWrapperTemplatePresenter */
+ public static RowListWrapperTemplatePresenter create(
+ TemplateContext templateContext, TemplateWrapper templateWrapper) {
+ RowListWrapperTemplatePresenter presenter =
+ new RowListWrapperTemplatePresenter(templateContext, templateWrapper);
+ presenter.update();
+ return presenter;
+ }
+
+ @Override
+ public View getView() {
+ return mRootView;
+ }
+
+ @Override
+ public void onTemplateChanged() {
+ update();
+ }
+
+ @Override
+ protected View getDefaultFocusedView() {
+ if (mContentView.getVisibility() == VISIBLE) {
+ return mContentView;
+ }
+ return super.getDefaultFocusedView();
+ }
+
+ private void update() {
+ RowListWrapperTemplate template = (RowListWrapperTemplate) getTemplate();
+ ActionStrip actionStrip = template.getActionStrip();
+ RowListWrapper list = template.getList();
+
+ List<Action> actionList = template.getActionList();
+ if (actionList != null && !actionList.isEmpty()) {
+ mStickyActionButtonListView.setVisibility(VISIBLE);
+ mStickyActionButtonListView.setActionList(
+ getTemplateContext(), actionList, mActionButtonListParams);
+ } else {
+ mStickyActionButtonListView.setVisibility(GONE);
+ }
+
+ mHeaderView.setActionStrip(actionStrip, template.getActionsConstraints());
+ mHeaderView.setContent(getTemplateContext(), template.getTitle(), template.getHeaderAction());
+
+ mContentView.setRowListContent(getTemplateContext(), list);
+ }
+
+ @SuppressLint("InflateParams")
+ @SuppressWarnings({"methodref.receiver.bound.invalid"})
+ private RowListWrapperTemplatePresenter(
+ TemplateContext templateContext, TemplateWrapper templateWrapper) {
+ super(templateContext, templateWrapper, StatusBarState.LIGHT);
+
+ mRootView =
+ (ViewGroup)
+ LayoutInflater.from(templateContext)
+ .inflate(R.layout.row_list_wrapper_template_layout, null);
+ mContentView = mRootView.findViewById(R.id.content_view);
+ View contentContainer = mRootView.findViewById(R.id.content_container);
+ mHeaderView = HeaderView.install(templateContext, contentContainer);
+
+ @StyleableRes final int[] themeAttrs = {R.attr.templatePlainContentBackgroundColor};
+
+ TypedArray ta = templateContext.obtainStyledAttributes(themeAttrs);
+ @ColorInt int surroundingColor = ta.getColor(0, 0);
+ ta.recycle();
+
+ mActionButtonListParams =
+ ActionButtonListParams.builder()
+ .setMaxActions(MAX_ALLOWED_ACTIONS)
+ .setOemReorderingAllowed(true)
+ .setOemColorOverrideAllowed(true)
+ .setSurroundingColor(surroundingColor)
+ .build();
+
+ mStickyActionButtonListView = mRootView.requireViewById(R.id.sticky_action_button_list_view);
+ }
+}