blob: fd7503a43937daae047ffbc1e83976f35d429bb9 [file] [log] [blame]
/*
* 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.chassis.car.ui.sharedlibrary.recyclerview;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.android.car.ui.sharedlibrary.oemapis.recyclerview.AdapterDataObserverOEMV1;
import com.android.car.ui.sharedlibrary.oemapis.recyclerview.AdapterOEMV1;
import com.android.car.ui.sharedlibrary.oemapis.recyclerview.RecyclerViewOEMV1;
import com.android.car.ui.sharedlibrary.oemapis.recyclerview.ViewHolderOEMV1;
import com.chassis.car.ui.sharedlibrary.recyclerview.AdapterWrapper.ViewHolderWrapper;
/**
* Wrapper class that passes the data to car-ui via AdapterOEMV1 interface
*/
public final class AdapterWrapper extends RecyclerView.Adapter<ViewHolderWrapper> {
@NonNull
private AdapterOEMV1 mAdapter;
@NonNull
private AdapterDataObserverOEMV1 mAdapterDataObserver = new AdapterDataObserverOEMV1() {
@Override
public void onChanged() {
AdapterWrapper.super.notifyDataSetChanged();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
AdapterWrapper.super.notifyItemRangeChanged(positionStart, itemCount);
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount,
@Nullable Object payload) {
AdapterWrapper.super.notifyItemRangeChanged(positionStart, itemCount, payload);
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
AdapterWrapper.super.notifyItemRangeInserted(positionStart, itemCount);
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
AdapterWrapper.super.notifyItemRangeRemoved(positionStart, itemCount);
}
@Override
public void onItemMoved(int fromPosition, int toPosition) {
AdapterWrapper.super.notifyItemMoved(fromPosition, toPosition);
}
@Override
public void onStateRestorationPolicyChanged() {
AdapterWrapper.this.updateStateRestorationPolicy();
}
};
public AdapterWrapper(@NonNull AdapterOEMV1 adapter) {
this.mAdapter = adapter;
AdapterWrapper.super.setHasStableIds(adapter.hasStableIds());
updateStateRestorationPolicy();
}
private void updateStateRestorationPolicy() {
switch (mAdapter.getStateRestorationPolicyInt()) {
case 2:
AdapterWrapper.super.setStateRestorationPolicy(
RecyclerView.Adapter.StateRestorationPolicy.PREVENT);
break;
case 1:
AdapterWrapper.super.setStateRestorationPolicy(
RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
break;
case 0:
default:
AdapterWrapper.super.setStateRestorationPolicy(
RecyclerView.Adapter.StateRestorationPolicy.ALLOW);
}
}
@Override
public int getItemCount() {
return mAdapter.getItemCount();
}
@Override
public long getItemId(int position) {
return mAdapter.getItemId(position);
}
@Override
public int getItemViewType(int position) {
return mAdapter.getItemViewType(position);
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
mAdapter.onAttachedToRecyclerView((RecyclerViewOEMV1) recyclerView);
}
@Override
public void onBindViewHolder(ViewHolderWrapper holder, int position) {
mAdapter.bindViewHolder(holder.getViewHolder(), position);
}
@Override
public ViewHolderWrapper onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolderWrapper(mAdapter.createViewHolder(parent, viewType));
}
@Override
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
mAdapter.onDetachedFromRecyclerView((RecyclerViewOEMV1) recyclerView);
}
@Override
public boolean onFailedToRecycleView(ViewHolderWrapper holder) {
return mAdapter.onFailedToRecycleView(holder.getViewHolder());
}
@Override
public void onViewAttachedToWindow(ViewHolderWrapper holder) {
mAdapter.onViewAttachedToWindow(holder.getViewHolder());
}
@Override
public void onViewDetachedFromWindow(ViewHolderWrapper holder) {
mAdapter.onViewDetachedFromWindow(holder.getViewHolder());
}
@Override
public void onViewRecycled(ViewHolderWrapper holder) {
mAdapter.onViewRecycled(holder.getViewHolder());
}
@Override
public void registerAdapterDataObserver(RecyclerView.AdapterDataObserver observer) {
if (!super.hasObservers()) {
mAdapter.registerAdapterDataObserver(mAdapterDataObserver);
}
super.registerAdapterDataObserver(observer);
}
@Override
public void unregisterAdapterDataObserver(RecyclerView.AdapterDataObserver observer) {
super.unregisterAdapterDataObserver(observer);
if (!super.hasObservers()) {
mAdapter.registerAdapterDataObserver(mAdapterDataObserver);
}
}
/**
* Holds views for each element in the list.
*/
public static class ViewHolderWrapper extends RecyclerView.ViewHolder {
@NonNull
private ViewHolderOEMV1 mViewHolder;
ViewHolderWrapper(@NonNull ViewHolderOEMV1 viewHolder) {
super(viewHolder.getItemView());
mViewHolder = viewHolder;
setIsRecyclable(viewHolder.isRecyclable());
}
@NonNull
public ViewHolderOEMV1 getViewHolder() {
return mViewHolder;
}
}
}