blob: 1118e787559018d371d80d2130be7e3ab99fdf9e [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content.browser.input;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Select popup item adapter for SelectPopupDialog, used so we can disable
* OPTION_GROUP items.
*/
public class SelectPopupAdapter extends ArrayAdapter<SelectPopupItem> {
// Holds the items of the select popup alert dialog list.
private List<SelectPopupItem> mItems;
// True if all items have type PopupItemType.ENABLED.
private boolean mAreAllItemsEnabled;
/**
* Creates a new SelectPopupItem adapter for the select popup alert dialog list.
* @param context Application context.
* @param layoutResource Layout resource used for the alert dialog list.
* @param items SelectPopupItem array list.
*/
public SelectPopupAdapter(Context context, int layoutResource,
List<SelectPopupItem> items) {
super(context, layoutResource, items);
mItems = new ArrayList<SelectPopupItem>(items);
mAreAllItemsEnabled = true;
for (int i = 0; i < mItems.size(); i++) {
if (mItems.get(i).getType() != PopupItemType.ENABLED) {
mAreAllItemsEnabled = false;
break;
}
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (position < 0 || position >= getCount()) return null;
// Always pass in null so that we will get a new CheckedTextView. Otherwise, an item
// which was previously used as an <optgroup> element (i.e. has no check), could get
// used as an <option> element, which needs a checkbox/radio, but it would not have
// one.
convertView = super.getView(position, null, parent);
((TextView) convertView).setText(mItems.get(position).getLabel());
if (mItems.get(position).getType() != PopupItemType.ENABLED) {
if (mItems.get(position).getType() == PopupItemType.GROUP) {
// Currently select_dialog_multichoice uses CheckedTextViews.
// If that changes, the class cast will no longer be valid.
((CheckedTextView) convertView).setCheckMarkDrawable(null);
} else {
// Draw the disabled element in a disabled state.
convertView.setEnabled(false);
}
}
return convertView;
}
@Override
public boolean areAllItemsEnabled() {
return mAreAllItemsEnabled;
}
@Override
public boolean isEnabled(int position) {
if (position < 0 || position >= getCount()) return false;
return mItems.get(position).getType() == PopupItemType.ENABLED;
}
}