/******************************************************************************* * Copyright (c) 2013 Gabriele Mariotti. * * 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 it.gmariotti.changelibs.library.internal; import android.content.Context; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.util.List; import it.gmariotti.changelibs.R; import it.gmariotti.changelibs.library.Constants; /** * Adapter for ChangeLog model * * @author Gabriele Mariotti (gabri.mariotti@gmail.com) */ public class ChangeLogAdapter extends ArrayAdapter<ChangeLogRow> { protected static final int TYPE_ROW = 0; protected static final int TYPE_HEADER = 1; private final Context mContext; private int mRowLayoutId = Constants.mRowLayoutId; private int mRowHeaderLayoutId = Constants.mRowHeaderLayoutId; private int mStringVersionHeader = Constants.mStringVersionHeader; private boolean mChangeLogRowClickable = false; public ChangeLogAdapter(Context context, List<ChangeLogRow> items) { super(context, 0, items); mContext = context; } @Override public boolean isEnabled(int position) { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { //It uses ViewHolder Pattern. ChangeLogRow item = getItem(position); View view = convertView; int viewType = this.getItemViewType(position); // LayoutInflater mInflater = mContext.getLayoutInflater(); LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); switch (viewType) { case TYPE_HEADER: ViewHolderHeader viewHolderHeader = null; if (view != null) { Object obj = view.getTag(); if (obj instanceof ViewHolderHeader) { viewHolderHeader = (ViewHolderHeader) obj; } else { viewHolderHeader = null; } } if (view == null || viewHolderHeader == null) { int layout = mRowHeaderLayoutId; view = mInflater.inflate(layout, parent, false); //VersionName text TextView textHeader = (TextView) view.findViewById(R.id.chg_headerVersion); //ChangeData text TextView textDate = (TextView) view.findViewById(R.id.chg_headerDate); viewHolderHeader = new ViewHolderHeader(textHeader, textDate); view.setTag(viewHolderHeader); } if (item != null && viewHolderHeader != null) { if (viewHolderHeader.version != null) { StringBuilder sb = new StringBuilder(); //String resource for Version String versionHeaderString = getContext().getString(mStringVersionHeader); if (versionHeaderString != null) sb.append(versionHeaderString); //VersionName text sb.append(item.versionName); viewHolderHeader.version.setText(sb.toString()); } //ChangeData text if (viewHolderHeader.date != null) { //Check if exists if (item.changeDate != null) { viewHolderHeader.date.setText(item.changeDate); viewHolderHeader.date.setVisibility(View.VISIBLE); } else { //If item hasn't changedata, hide TextView viewHolderHeader.date.setText(""); viewHolderHeader.date.setVisibility(View.GONE); } } } break; case TYPE_ROW: ViewHolderRow viewHolder = null; if (view != null) { Object obj = view.getTag(); if (obj instanceof ViewHolderRow) { viewHolder = (ViewHolderRow) obj; } else { viewHolder = null; } } if (view == null || viewHolder == null) { int layout = mRowLayoutId; view = mInflater.inflate(layout, parent, false); TextView textText = (TextView) view.findViewById(R.id.chg_text); TextView bulletText = (TextView) view.findViewById(R.id.chg_textbullet); viewHolder = new ViewHolderRow(textText, bulletText); view.setTag(viewHolder); } if (item != null && viewHolder != null) { if (viewHolder.text != null) { viewHolder.text.setText(Html.fromHtml(item.getChangeText())); } if (viewHolder.bulletText != null) { if (item.isBulletedList()) { viewHolder.bulletText.setVisibility(View.VISIBLE); } else { viewHolder.bulletText.setVisibility(View.GONE); } } } break; default: //Throw exception, unknown data type } return view; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { if (getItem(position).isHeader()) return TYPE_HEADER; return TYPE_ROW; } //----------------------------------------------------------------------------------- // View Holder //----------------------------------------------------------------------------------- public int getmRowLayoutId() { return mRowLayoutId; } public void setmRowLayoutId(int mRowLayoutId) { this.mRowLayoutId = mRowLayoutId; } //----------------------------------------------------------------------------------- // Getter and Setter //----------------------------------------------------------------------------------- public int getmRowHeaderLayoutId() { return mRowHeaderLayoutId; } public void setmRowHeaderLayoutId(int mRowHeaderLayoutId) { this.mRowHeaderLayoutId = mRowHeaderLayoutId; } public int getmStringVersionHeader() { return mStringVersionHeader; } public void setmStringVersionHeader(int mStringVersionHeader) { this.mStringVersionHeader = mStringVersionHeader; } static class ViewHolderHeader { TextView version; TextView date; public ViewHolderHeader(TextView version, TextView date) { this.version = version; this.date = date; } } static class ViewHolderRow { TextView text; TextView bulletText; public ViewHolderRow(TextView text, TextView bulletText) { this.text = text; this.bulletText = bulletText; } } }