| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package io.v.syncslides; |
| |
| import android.content.Context; |
| import android.content.Intent; |
| import android.support.v7.widget.RecyclerView; |
| import android.util.Log; |
| import android.view.LayoutInflater; |
| import android.view.MenuItem; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.ImageView; |
| import android.widget.TextView; |
| import android.widget.Toast; |
| import android.widget.Toolbar; |
| |
| import java.util.Calendar; |
| import java.util.Locale; |
| |
| import io.v.syncslides.db.DB; |
| import io.v.syncslides.model.Deck; |
| import io.v.syncslides.model.DynamicList; |
| import io.v.syncslides.model.ListListener; |
| import io.v.v23.verror.VException; |
| |
| /** |
| * Provides a list of decks to be shown in the RecyclerView of the |
| * DeckChooserFragment. |
| */ |
| public class DeckListAdapter extends RecyclerView.Adapter<DeckListAdapter.ViewHolder> |
| implements ListListener { |
| private static final String TAG = "DeckListAdapter"; |
| |
| private final DB mDB; |
| private DynamicList<Deck> mDecks; |
| |
| public DeckListAdapter(DB db) { |
| mDB = db; |
| } |
| |
| /** |
| * Starts background monitoring of the underlying data. |
| */ |
| public void start() { |
| mDecks = mDB.getDecks(); |
| mDecks.addListener(this); |
| } |
| |
| /** |
| * Stops any background monitoring of the underlying data. |
| */ |
| public void stop() { |
| mDecks.removeListener(this); |
| mDecks = null; |
| } |
| |
| @Override |
| public ViewHolder onCreateViewHolder(ViewGroup parent, int i) { |
| View v = LayoutInflater.from(parent.getContext()) |
| .inflate(R.layout.deck_card, parent, false); |
| return new ViewHolder(v); |
| } |
| |
| @Override |
| public void onBindViewHolder(final ViewHolder holder, final int deckIndex) { |
| final Deck deck = mDecks.get(deckIndex); |
| |
| // TODO(afergan): Set actual date here. |
| final Calendar cal = Calendar.getInstance(); |
| holder.mToolbarLastOpened.setText("Opened on " |
| + cal.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.US) + " " |
| + cal.get(Calendar.DAY_OF_MONTH) + ", " + cal.get(Calendar.YEAR)); |
| |
| holder.mToolbarLastOpened.setVisibility(View.VISIBLE); |
| holder.mToolbarLiveNow.setVisibility(View.GONE); |
| holder.mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() { |
| @Override |
| public boolean onMenuItemClick(MenuItem item) { |
| switch (item.getItemId()) { |
| case R.id.action_delete_deck: |
| // TODO(kash): Implement delete. |
| // mDB.deleteDeck(deck.getId()); |
| return true; |
| } |
| return false; |
| } |
| }); |
| |
| holder.mToolbarTitle.setText(deck.getTitle()); |
| holder.mThumb.setImageBitmap(deck.getThumb()); |
| holder.mThumb.setOnClickListener(new View.OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| Log.d(TAG, "Clicking through to PresentationActivity."); |
| String sessionId; |
| try { |
| sessionId = mDB.createSession(deck.getId()); |
| } catch (VException e) { |
| handleError(v.getContext(), "Could not view deck.", e); |
| return; |
| } |
| startPresentationActivity(v.getContext(), sessionId); |
| } |
| }); |
| } |
| |
| @Override |
| public int getItemCount() { |
| return mDecks.getItemCount(); |
| } |
| |
| @Override |
| public void onError(Exception e) { |
| // TODO(kash): Not sure what to do here... Call start()/stop() to reset |
| // the DynamicList? |
| } |
| |
| public static class ViewHolder extends RecyclerView.ViewHolder { |
| public final ImageView mThumb; |
| public final Toolbar mToolbar; |
| public final TextView mToolbarTitle; |
| public final TextView mToolbarLiveNow; |
| public final TextView mToolbarLastOpened; |
| |
| public ViewHolder(final View itemView) { |
| super(itemView); |
| mThumb = (ImageView) itemView.findViewById(R.id.deck_thumb); |
| mToolbar = (Toolbar) itemView.findViewById(R.id.deck_card_toolbar); |
| mToolbarTitle = (TextView) itemView.findViewById(R.id.deck_card_toolbar_title); |
| mToolbarLiveNow = (TextView) itemView.findViewById(R.id.deck_card_toolbar_live_now); |
| mToolbarLastOpened = |
| (TextView) itemView.findViewById(R.id.deck_card_toolbar_last_opened); |
| mToolbar.inflateMenu(R.menu.deck_card); |
| } |
| } |
| |
| private void startPresentationActivity(Context ctx, String sessionId) { |
| Intent intent = new Intent(ctx, PresentationActivity.class); |
| intent.putExtra(PresentationActivity.SESSION_ID_KEY, sessionId); |
| ctx.startActivity(intent); |
| } |
| |
| private void handleError(Context ctx, String msg, Throwable throwable) { |
| Log.e(TAG, msg + ": " + Log.getStackTraceString(throwable)); |
| Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show(); |
| } |
| |
| } |