blob: 5672880d5415fb47d3ad767df60ea530aaaf272f [file] [log] [blame]
/*
* Copyright 2018 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 androidx.car.widget;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import java.util.Collection;
import androidx.annotation.NonNull;
import androidx.car.R;
import androidx.gridlayout.widget.GridLayout;
/**
* This view shows a grid of alphabetic letters that you can tap on to advance a list to the
* beginning of that list.
*/
public class AlphaJumpOverlayView extends GridLayout {
private IAlphaJumpAdapter mAdapter;
private PagedListView mPagedListView;
private Collection<IAlphaJumpAdapter.Bucket> mBuckets;
public AlphaJumpOverlayView(@NonNull Context context) {
super(context);
setBackgroundResource(R.color.car_card);
setColumnCount(context.getResources().getInteger(R.integer.alpha_jump_button_columns));
setUseDefaultMargins(false);
}
void init(PagedListView plv, IAlphaJumpAdapter adapter) {
mPagedListView = plv;
mAdapter = adapter;
mBuckets = adapter.getAlphaJumpBuckets();
createButtons();
}
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
// TODO: change the hamburger button into a back button...
if (visibility == VISIBLE && changedView == this) {
mAdapter.onAlphaJumpEnter();
}
}
private void createButtons() {
LayoutInflater inflater = LayoutInflater.from(getContext());
removeAllViews();
for (IAlphaJumpAdapter.Bucket bucket : mBuckets) {
View container = inflater.inflate(R.layout.car_alpha_jump_button, this, false);
TextView btn = container.findViewById(R.id.button);
btn.setText(bucket.getLabel());
btn.setOnClickListener(this::onButtonClick);
btn.setTag(bucket);
if (bucket.isEmpty()) {
btn.setEnabled(false);
}
addView(container);
}
}
private void onButtonClick(View v) {
setVisibility(View.GONE);
IAlphaJumpAdapter.Bucket bucket = (IAlphaJumpAdapter.Bucket) v.getTag();
if (bucket != null) {
mAdapter.onAlphaJumpLeave(bucket);
mPagedListView.snapToPosition(bucket.getIndex());
}
}
}