1d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin/* 2d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * Copyright (C) 2016 The Android Open Source Project 3d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * 4d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * Licensed under the Apache License, Version 2.0 (the "License"); 5d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * you may not use this file except in compliance with the License. 6d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * You may obtain a copy of the License at 7d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * 8d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * http://www.apache.org/licenses/LICENSE-2.0 9d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * 10d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * Unless required by applicable law or agreed to in writing, software 11d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * distributed under the License is distributed on an "AS IS" BASIS, 12d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * See the License for the specific language governing permissions and 14d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * limitations under the License. 15d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin */ 16d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 17d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chinpackage com.android.calculator2; 18d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 19d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chinimport android.support.v7.widget.RecyclerView; 20d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chinimport android.view.LayoutInflater; 21d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chinimport android.view.View; 22d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chinimport android.view.ViewGroup; 23d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chinimport android.widget.TextView; 24d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 25d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chinimport java.util.ArrayList; 2636147983cb821ede03f569a562133a08cac9bcdfAnnie Chinimport java.util.Calendar; 27d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chinimport java.util.List; 28d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 29d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin/** 30d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin * Adapter for RecyclerView of HistoryItems. 31d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin */ 32d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chinpublic class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.ViewHolder> { 33d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 3436147983cb821ede03f569a562133a08cac9bcdfAnnie Chin private static final String TAG = "HistoryAdapter"; 3536147983cb821ede03f569a562133a08cac9bcdfAnnie Chin 36ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin private static final int EMPTY_VIEW_TYPE = 0; 37bfffafdedddbbd1d6d8d0ab15130753b1b31affcAnnie Chin public static final int HISTORY_VIEW_TYPE = 1; 38ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin 397d03963e1c33914b789321f898fe1519a011857fAnnie Chin private Evaluator mEvaluator; 4006fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin 4136147983cb821ede03f569a562133a08cac9bcdfAnnie Chin private final Calendar mCalendar = Calendar.getInstance(); 4236147983cb821ede03f569a562133a08cac9bcdfAnnie Chin 4306fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin private List<HistoryItem> mDataSet; 4406fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin 4594c1bd954266677f3e6bdd00741eaf4db6881c18Annie Chin private boolean mIsResultLayout; 468861323dcc360b12de1c369fcb84e88d634cfcb7Annie Chin private boolean mIsOneLine; 47bfffafdedddbbd1d6d8d0ab15130753b1b31affcAnnie Chin private boolean mIsDisplayEmpty; 4870ac8eafeb18711e427d512dcbb3089977521df8Annie Chin 497d03963e1c33914b789321f898fe1519a011857fAnnie Chin public HistoryAdapter(ArrayList<HistoryItem> dataSet) { 5006fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin mDataSet = dataSet; 519179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin setHasStableIds(true); 52d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 53d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 54d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin @Override 55d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin public HistoryAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 56ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin final View v; 57ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin if (viewType == HISTORY_VIEW_TYPE) { 58ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin v = LayoutInflater.from(parent.getContext()) 59ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin .inflate(R.layout.history_item, parent, false); 60ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin } else { 61ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin v = LayoutInflater.from(parent.getContext()) 62ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin .inflate(R.layout.empty_history_view, parent, false); 63ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin } 64ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin return new ViewHolder(v, viewType); 65d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 66d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 67d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin @Override 6806fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin public void onBindViewHolder(final HistoryAdapter.ViewHolder holder, int position) { 6936147983cb821ede03f569a562133a08cac9bcdfAnnie Chin final HistoryItem item = getItem(position); 70d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 71ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin if (item.isEmptyView()) { 72ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin return; 73ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin } 7406fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin 7506fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin holder.mFormula.setText(item.getFormula()); 7606fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin // Note: HistoryItems that are not the current expression will always have interesting ops. 779179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin holder.mResult.setEvaluator(mEvaluator, item.getEvaluatorIndex()); 7831ea252f1a807c19611ba20e98bbf6db255719f8Hans Boehm if (item.getEvaluatorIndex() == Evaluator.HISTORY_MAIN_INDEX) { 797d03963e1c33914b789321f898fe1519a011857fAnnie Chin holder.mDate.setText(R.string.title_current_expression); 808861323dcc360b12de1c369fcb84e88d634cfcb7Annie Chin holder.mResult.setVisibility(mIsOneLine ? View.GONE : View.VISIBLE); 8106fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin } else { 8236147983cb821ede03f569a562133a08cac9bcdfAnnie Chin // If the previous item occurred on the same date, the current item does not need 8336147983cb821ede03f569a562133a08cac9bcdfAnnie Chin // a date header. 8436147983cb821ede03f569a562133a08cac9bcdfAnnie Chin if (shouldShowHeader(position, item)) { 8536147983cb821ede03f569a562133a08cac9bcdfAnnie Chin holder.mDate.setText(item.getDateString()); 8636147983cb821ede03f569a562133a08cac9bcdfAnnie Chin // Special case -- very first item should not have a divider above it. 8736147983cb821ede03f569a562133a08cac9bcdfAnnie Chin holder.mDivider.setVisibility(position == getItemCount() - 1 8836147983cb821ede03f569a562133a08cac9bcdfAnnie Chin ? View.GONE : View.VISIBLE); 8936147983cb821ede03f569a562133a08cac9bcdfAnnie Chin } else { 9036147983cb821ede03f569a562133a08cac9bcdfAnnie Chin holder.mDate.setVisibility(View.GONE); 9136147983cb821ede03f569a562133a08cac9bcdfAnnie Chin holder.mDivider.setVisibility(View.INVISIBLE); 9236147983cb821ede03f569a562133a08cac9bcdfAnnie Chin } 93d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 94d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 95d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 96d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin @Override 97d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin public void onViewRecycled(ViewHolder holder) { 989179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin if (holder.getItemViewType() == EMPTY_VIEW_TYPE) { 999179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin return; 1009179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin } 1019179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin mEvaluator.cancel(holder.getItemId(), true); 1029179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin 10336147983cb821ede03f569a562133a08cac9bcdfAnnie Chin holder.mDate.setVisibility(View.VISIBLE); 10436147983cb821ede03f569a562133a08cac9bcdfAnnie Chin holder.mDivider.setVisibility(View.VISIBLE); 105d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin holder.mDate.setText(null); 106d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin holder.mFormula.setText(null); 107d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin holder.mResult.setText(null); 108d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 109d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin super.onViewRecycled(holder); 110d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 111d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 112d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin @Override 1139179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin public long getItemId(int position) { 11436147983cb821ede03f569a562133a08cac9bcdfAnnie Chin return getItem(position).getEvaluatorIndex(); 1159179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin } 1169179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin 1179179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin @Override 118ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin public int getItemViewType(int position) { 11936147983cb821ede03f569a562133a08cac9bcdfAnnie Chin return getItem(position).isEmptyView() ? EMPTY_VIEW_TYPE : HISTORY_VIEW_TYPE; 120ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin } 121ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin 122ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin @Override 123d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin public int getItemCount() { 124d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin return mDataSet.size(); 125d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 126d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 12706fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin public void setDataSet(ArrayList<HistoryItem> dataSet) { 12806fd3cf86f20a8b927c8b57ef9e94ee48bee46ffAnnie Chin mDataSet = dataSet; 129d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 130d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 13136147983cb821ede03f569a562133a08cac9bcdfAnnie Chin public void setIsResultLayout(boolean isResult) { 13236147983cb821ede03f569a562133a08cac9bcdfAnnie Chin mIsResultLayout = isResult; 13336147983cb821ede03f569a562133a08cac9bcdfAnnie Chin } 13436147983cb821ede03f569a562133a08cac9bcdfAnnie Chin 1358861323dcc360b12de1c369fcb84e88d634cfcb7Annie Chin public void setIsOneLine(boolean isOneLine) { 1368861323dcc360b12de1c369fcb84e88d634cfcb7Annie Chin mIsOneLine = isOneLine; 1378861323dcc360b12de1c369fcb84e88d634cfcb7Annie Chin } 1388861323dcc360b12de1c369fcb84e88d634cfcb7Annie Chin 139bfffafdedddbbd1d6d8d0ab15130753b1b31affcAnnie Chin public void setIsDisplayEmpty(boolean isDisplayEmpty) { 140bfffafdedddbbd1d6d8d0ab15130753b1b31affcAnnie Chin mIsDisplayEmpty = isDisplayEmpty; 141bfffafdedddbbd1d6d8d0ab15130753b1b31affcAnnie Chin } 142bfffafdedddbbd1d6d8d0ab15130753b1b31affcAnnie Chin 1437d03963e1c33914b789321f898fe1519a011857fAnnie Chin public void setEvaluator(Evaluator evaluator) { 1447d03963e1c33914b789321f898fe1519a011857fAnnie Chin mEvaluator = evaluator; 1457d03963e1c33914b789321f898fe1519a011857fAnnie Chin } 1467d03963e1c33914b789321f898fe1519a011857fAnnie Chin 1479179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin private int getEvaluatorIndex(int position) { 148bfffafdedddbbd1d6d8d0ab15130753b1b31affcAnnie Chin if (mIsDisplayEmpty || mIsResultLayout) { 14936147983cb821ede03f569a562133a08cac9bcdfAnnie Chin return (int) (mEvaluator.getMaxIndex() - position); 1509179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin } else { 1519179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin // Account for the additional "Current Expression" with the +1. 15236147983cb821ede03f569a562133a08cac9bcdfAnnie Chin return (int) (mEvaluator.getMaxIndex() - position + 1); 1539179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin } 1549179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin } 1559179623c3d2530f9ccfd1b542c0416317422ca0cAnnie Chin 15636147983cb821ede03f569a562133a08cac9bcdfAnnie Chin private boolean shouldShowHeader(int position, HistoryItem item) { 15736147983cb821ede03f569a562133a08cac9bcdfAnnie Chin if (position == getItemCount() - 1) { 15836147983cb821ede03f569a562133a08cac9bcdfAnnie Chin // First/oldest element should always show the header. 15936147983cb821ede03f569a562133a08cac9bcdfAnnie Chin return true; 16036147983cb821ede03f569a562133a08cac9bcdfAnnie Chin } 16136147983cb821ede03f569a562133a08cac9bcdfAnnie Chin final HistoryItem prevItem = getItem(position + 1); 16236147983cb821ede03f569a562133a08cac9bcdfAnnie Chin // We need to use Calendars to determine this because of Daylight Savings. 16336147983cb821ede03f569a562133a08cac9bcdfAnnie Chin mCalendar.setTimeInMillis(item.getTimeInMillis()); 16436147983cb821ede03f569a562133a08cac9bcdfAnnie Chin final int year = mCalendar.get(Calendar.YEAR); 16536147983cb821ede03f569a562133a08cac9bcdfAnnie Chin final int day = mCalendar.get(Calendar.DAY_OF_YEAR); 16636147983cb821ede03f569a562133a08cac9bcdfAnnie Chin mCalendar.setTimeInMillis(prevItem.getTimeInMillis()); 16736147983cb821ede03f569a562133a08cac9bcdfAnnie Chin final int prevYear = mCalendar.get(Calendar.YEAR); 16836147983cb821ede03f569a562133a08cac9bcdfAnnie Chin final int prevDay = mCalendar.get(Calendar.DAY_OF_YEAR); 16936147983cb821ede03f569a562133a08cac9bcdfAnnie Chin return year != prevYear || day != prevDay; 17036147983cb821ede03f569a562133a08cac9bcdfAnnie Chin } 17136147983cb821ede03f569a562133a08cac9bcdfAnnie Chin 17236147983cb821ede03f569a562133a08cac9bcdfAnnie Chin /** 17336147983cb821ede03f569a562133a08cac9bcdfAnnie Chin * Gets the HistoryItem from mDataSet, lazy-filling the dataSet if necessary. 17436147983cb821ede03f569a562133a08cac9bcdfAnnie Chin */ 17536147983cb821ede03f569a562133a08cac9bcdfAnnie Chin private HistoryItem getItem(int position) { 17636147983cb821ede03f569a562133a08cac9bcdfAnnie Chin HistoryItem item = mDataSet.get(position); 17736147983cb821ede03f569a562133a08cac9bcdfAnnie Chin // Lazy-fill the data set. 17836147983cb821ede03f569a562133a08cac9bcdfAnnie Chin if (item == null) { 17936147983cb821ede03f569a562133a08cac9bcdfAnnie Chin final int evaluatorIndex = getEvaluatorIndex(position); 18036147983cb821ede03f569a562133a08cac9bcdfAnnie Chin item = new HistoryItem(evaluatorIndex, 18136147983cb821ede03f569a562133a08cac9bcdfAnnie Chin mEvaluator.getTimeStamp(evaluatorIndex), 18236147983cb821ede03f569a562133a08cac9bcdfAnnie Chin mEvaluator.getExprAsSpannable(evaluatorIndex)); 18336147983cb821ede03f569a562133a08cac9bcdfAnnie Chin mDataSet.set(position, item); 18436147983cb821ede03f569a562133a08cac9bcdfAnnie Chin } 18536147983cb821ede03f569a562133a08cac9bcdfAnnie Chin return item; 18670ac8eafeb18711e427d512dcbb3089977521df8Annie Chin } 18770ac8eafeb18711e427d512dcbb3089977521df8Annie Chin 188d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin public static class ViewHolder extends RecyclerView.ViewHolder { 189d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 190ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin private TextView mDate; 1918149c8c2f02a3a6aae34d8d8b3bc67ce0f56378cAnnie Chin private AlignedTextView mFormula; 192ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin private CalculatorResult mResult; 19336147983cb821ede03f569a562133a08cac9bcdfAnnie Chin private View mDivider; 194d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 195ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin public ViewHolder(View v, int viewType) { 196d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin super(v); 197ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin if (viewType == EMPTY_VIEW_TYPE) { 198ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin return; 199ab657d463740bfc4322f1c06da80bea9c14e993cAnnie Chin } 200d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin mDate = (TextView) v.findViewById(R.id.history_date); 2018149c8c2f02a3a6aae34d8d8b3bc67ce0f56378cAnnie Chin mFormula = (AlignedTextView) v.findViewById(R.id.history_formula); 202d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin mResult = (CalculatorResult) v.findViewById(R.id.history_result); 20336147983cb821ede03f569a562133a08cac9bcdfAnnie Chin mDivider = v.findViewById(R.id.history_divider); 204d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 205d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 2068149c8c2f02a3a6aae34d8d8b3bc67ce0f56378cAnnie Chin public AlignedTextView getFormula() { 207d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin return mFormula; 208d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 209d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 210d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin public CalculatorResult getResult() { 211d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin return mResult; 212d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 213d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin 214d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin public TextView getDate() { 215d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin return mDate; 216d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 21736147983cb821ede03f569a562133a08cac9bcdfAnnie Chin 21836147983cb821ede03f569a562133a08cac9bcdfAnnie Chin public View getDivider() { 21936147983cb821ede03f569a562133a08cac9bcdfAnnie Chin return mDivider; 22036147983cb821ede03f569a562133a08cac9bcdfAnnie Chin } 221d0f87d20ad9078fd885b3e1f8366f7a07c9b0ac6Annie Chin } 22236147983cb821ede03f569a562133a08cac9bcdfAnnie Chin}