/******************************************************************************* * This file is part of RedReader. * * RedReader is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * RedReader is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with RedReader. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package org.quantumbadger.redreader.adapters; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatDialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.account.RedditAccountManager; import org.quantumbadger.redreader.activities.SessionChangeListener; import org.quantumbadger.redreader.cache.CacheEntry; import org.quantumbadger.redreader.cache.CacheManager; import org.quantumbadger.redreader.common.BetterSSB; import org.quantumbadger.redreader.common.RRTime; import org.quantumbadger.redreader.viewholders.VH; import org.quantumbadger.redreader.viewholders.VH1Text; import java.net.URI; import java.util.ArrayList; import java.util.UUID; public class SessionListAdapter extends HeaderRecyclerAdapter<VH> { private final Context context; private final UUID current; private final SessionChangeListener.SessionChangeType type; private final AppCompatDialogFragment fragment; private final ArrayList<CacheEntry> sessions; private final Drawable rrIconRefresh; public SessionListAdapter(final Context context, final URI url, final UUID current, SessionChangeListener.SessionChangeType type, final AppCompatDialogFragment fragment) { this.context = context; this.current = current; this.type = type; this.fragment = fragment; sessions = new ArrayList<>( CacheManager.getInstance(context).getSessions(url, RedditAccountManager.getInstance(context).getDefaultAccount())); final TypedArray attr = context.obtainStyledAttributes(new int[]{R.attr.rrIconRefresh,}); rrIconRefresh = ContextCompat.getDrawable(context, attr.getResourceId(0, 0)); attr.recycle(); } @Override protected VH onCreateHeaderItemViewHolder(ViewGroup parent) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item_1_text, parent, false); return new VH1Text(v); } @Override protected VH onCreateContentItemViewHolder(ViewGroup parent) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item_1_text, parent, false); return new VH1Text(v); } @Override protected void onBindHeaderItemViewHolder(VH holder, final int position) { final VH1Text vh = (VH1Text) holder; vh.text.setText(context.getString(R.string.options_refresh)); vh.text.setCompoundDrawablesWithIntrinsicBounds(rrIconRefresh, null, null, null); vh.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((SessionChangeListener) context).onSessionRefreshSelected(type); fragment.dismiss(); } }); } @Override protected void onBindContentItemViewHolder(VH holder, final int position) { final VH1Text vh = (VH1Text) holder; final CacheEntry session = sessions.get(position); final BetterSSB name = new BetterSSB(); if (RRTime.utcCurrentTimeMillis() - session.timestamp < 1000 * 120) { name.append(RRTime.formatDurationFrom(context, session.timestamp), 0); } else { name.append(RRTime.formatDateTime(session.timestamp, context), 0); } if (session.session.equals(current)) { final TypedArray attr = context.obtainStyledAttributes(new int[]{R.attr.rrListSubtitleCol}); final int col = attr.getColor(0, 0); attr.recycle(); name.append(" (" + context.getString(R.string.session_active) + ")", BetterSSB.FOREGROUND_COLOR | BetterSSB.SIZE, col, 0, 0.8f); } vh.text.setText(name.get()); vh.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final CacheEntry ce = sessions.get(position); ((SessionChangeListener) context).onSessionSelected(ce.session, type); fragment.dismiss(); } }); } @Override protected int getContentItemCount() { return sessions.size(); } }