blob: 0db269d254478769a1a37b3a5bd52d44187a6d81 [file] [log] [blame]
// 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();
}
}