| /* |
| * 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.setupwizardlib.items; |
| |
| import android.content.Context; |
| import android.content.res.TypedArray; |
| import android.graphics.drawable.Drawable; |
| import android.util.AttributeSet; |
| import android.view.View; |
| import android.widget.ImageView; |
| import android.widget.TextView; |
| |
| import com.android.setupwizardlib.R; |
| |
| /** |
| * Definition of an item in an {@link ItemHierarchy}. An item is usually defined in XML and inflated |
| * using {@link ItemInflater}. |
| */ |
| public class Item extends AbstractItem { |
| |
| private boolean mEnabled = true; |
| private Drawable mIcon; |
| private int mLayoutRes; |
| private CharSequence mSummary; |
| private CharSequence mTitle; |
| private boolean mVisible = true; |
| |
| public Item() { |
| super(); |
| mLayoutRes = getDefaultLayoutResource(); |
| } |
| |
| public Item(Context context, AttributeSet attrs) { |
| super(context, attrs); |
| TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SuwItem); |
| mEnabled = a.getBoolean(R.styleable.SuwItem_android_enabled, true); |
| mIcon = a.getDrawable(R.styleable.SuwItem_android_icon); |
| mTitle = a.getText(R.styleable.SuwItem_android_title); |
| mSummary = a.getText(R.styleable.SuwItem_android_summary); |
| mLayoutRes = a.getResourceId(R.styleable.SuwItem_android_layout, |
| getDefaultLayoutResource()); |
| mVisible = a.getBoolean(R.styleable.SuwItem_android_visible, true); |
| a.recycle(); |
| } |
| |
| protected int getDefaultLayoutResource() { |
| return R.layout.suw_items_default; |
| } |
| |
| public void setEnabled(boolean enabled) { |
| mEnabled = enabled; |
| notifyItemChanged(); |
| } |
| |
| @Override |
| public int getCount() { |
| return isVisible() ? 1 : 0; |
| } |
| |
| @Override |
| public boolean isEnabled() { |
| return mEnabled; |
| } |
| |
| public void setIcon(Drawable icon) { |
| mIcon = icon; |
| notifyItemChanged(); |
| } |
| |
| public Drawable getIcon() { |
| return mIcon; |
| } |
| |
| public void setLayoutResource(int layoutResource) { |
| mLayoutRes = layoutResource; |
| notifyItemChanged(); |
| } |
| |
| @Override |
| public int getLayoutResource() { |
| return mLayoutRes; |
| } |
| |
| public void setSummary(CharSequence summary) { |
| mSummary = summary; |
| notifyItemChanged(); |
| } |
| |
| public CharSequence getSummary() { |
| return mSummary; |
| } |
| |
| public void setTitle(CharSequence title) { |
| mTitle = title; |
| notifyItemChanged(); |
| } |
| |
| public CharSequence getTitle() { |
| return mTitle; |
| } |
| |
| public void setVisible(boolean visible) { |
| if (mVisible == visible) { |
| return; |
| } |
| mVisible = visible; |
| if (!visible) { |
| notifyItemRangeRemoved(0, 1); |
| } else { |
| notifyItemRangeInserted(0, 1); |
| } |
| } |
| |
| public boolean isVisible() { |
| return mVisible; |
| } |
| |
| @Override |
| public int getViewId() { |
| return getId(); |
| } |
| |
| @Override |
| public void onBindView(View view) { |
| TextView label = (TextView) view.findViewById(R.id.suw_items_title); |
| label.setText(getTitle()); |
| |
| TextView summaryView = (TextView) view.findViewById(R.id.suw_items_summary); |
| CharSequence summary = getSummary(); |
| if (summary != null && summary.length() > 0) { |
| summaryView.setText(summary); |
| summaryView.setVisibility(View.VISIBLE); |
| } else { |
| summaryView.setVisibility(View.GONE); |
| } |
| |
| final View iconContainer = view.findViewById(R.id.suw_items_icon_container); |
| final Drawable icon = getIcon(); |
| if (icon != null) { |
| final ImageView iconView = (ImageView) view.findViewById(R.id.suw_items_icon); |
| // Set the image drawable to null before setting the state and level to avoid affecting |
| // any recycled drawable in the ImageView |
| iconView.setImageDrawable(null); |
| onMergeIconStateAndLevels(iconView, icon); |
| iconView.setImageDrawable(icon); |
| iconContainer.setVisibility(View.VISIBLE); |
| } else { |
| iconContainer.setVisibility(View.GONE); |
| } |
| |
| view.setId(getViewId()); |
| } |
| |
| /** |
| * Copies state and level information from {@link #getIcon()} to the currently bound view's |
| * ImageView. Subclasses can override this method to change whats being copied from the icon |
| * to the ImageView. |
| */ |
| protected void onMergeIconStateAndLevels(ImageView iconView, Drawable icon) { |
| iconView.setImageState(icon.getState(), false /* merge */); |
| iconView.setImageLevel(icon.getLevel()); |
| } |
| } |