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}