/* * Copyright (C) 2015 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.settingslib.drawer; import android.graphics.drawable.Icon; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.android.settingslib.R; import java.util.ArrayList; import java.util.List; public class SettingsDrawerAdapter extends BaseAdapter { private final ArrayList<Item> mItems = new ArrayList<>(); private final SettingsDrawerActivity mActivity; public SettingsDrawerAdapter(SettingsDrawerActivity activity) { mActivity = activity; } void updateCategories() { List<DashboardCategory> categories = mActivity.getDashboardCategories(); mItems.clear(); // Spacer. mItems.add(null); Item tile = new Item(); tile.label = mActivity.getString(R.string.home); tile.icon = Icon.createWithResource(mActivity, R.drawable.home); mItems.add(tile); for (int i = 0; i < categories.size(); i++) { Item category = new Item(); category.icon = null; DashboardCategory dashboardCategory = categories.get(i); category.label = dashboardCategory.title; mItems.add(category); for (int j = 0; j < dashboardCategory.tiles.size(); j++) { tile = new Item(); Tile dashboardTile = dashboardCategory.tiles.get(j); tile.label = dashboardTile.title; tile.icon = dashboardTile.icon; tile.tile = dashboardTile; mItems.add(tile); } } notifyDataSetChanged(); } public Tile getTile(int position) { return mItems.get(position) != null ? mItems.get(position).tile : null; } @Override public int getCount() { return mItems.size(); } @Override public Object getItem(int position) { return mItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public boolean isEnabled(int position) { return mItems.get(position) != null && mItems.get(position).icon != null; } @Override public View getView(int position, View convertView, ViewGroup parent) { Item item = mItems.get(position); if (item == null) { if (convertView == null || convertView.getId() != R.id.spacer) { convertView = LayoutInflater.from(mActivity).inflate(R.layout.drawer_spacer, parent, false); } return convertView; } if (convertView != null && convertView.getId() == R.id.spacer) { convertView = null; } boolean isTile = item.icon != null; if (convertView == null || (isTile != (convertView.getId() == R.id.tile_item))) { convertView = LayoutInflater.from(mActivity).inflate(isTile ? R.layout.drawer_item : R.layout.drawer_category, parent, false); } if (isTile) { ((ImageView) convertView.findViewById(android.R.id.icon)).setImageIcon(item.icon); } ((TextView) convertView.findViewById(android.R.id.title)).setText(item.label); return convertView; } private static class Item { public Icon icon; public CharSequence label; public Tile tile; } }