package sh.nym.irisglass; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.Toast; import com.google.android.glass.widget.CardScrollView; import java.util.ArrayList; import java.util.List; public final class FeedActivity extends Activity { private static final int REQ_MENU = 1; private CardScrollView cardScrollView; private FeedAdapter adapter; private FeedItem selectedItem; private final HudState.Listener hudListener = new HudState.Listener() { @Override public void onHudStateChanged(HudState.Snapshot snapshot, boolean shouldRender) { // FeedActivity should always update while visible. adapter.setItems(buildVisibleItems(snapshot)); try { cardScrollView.setSelection(0); } catch (Throwable ignored) { } } }; @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); cardScrollView = new CardScrollView(this); adapter = new FeedAdapter(this, makeWaitingCard()); cardScrollView.setAdapter(adapter); cardScrollView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { onCardTapped(position); } }); setContentView(cardScrollView); } @Override protected void onResume() { super.onResume(); cardScrollView.activate(); HudState.get().addListener(hudListener); adapter.setItems(buildVisibleItems(HudState.get().snapshot())); } @Override protected void onPause() { try { HudState.get().removeListener(hudListener); } catch (Throwable ignored) { } cardScrollView.deactivate(); super.onPause(); } private void onCardTapped(int position) { Object obj = adapter.getItem(position); if (!(obj instanceof FeedItem)) return; selectedItem = (FeedItem) obj; startActivityForResult(MenuActivity.newIntent(this, selectedItem), REQ_MENU); } @Override protected void onActivityResult(int requestCode, int resultCode, android.content.Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode != REQ_MENU || resultCode != RESULT_OK || data == null) return; String cardId = data.getStringExtra(MenuActivity.EXTRA_CARD_ID); String action = data.getStringExtra(MenuActivity.EXTRA_ACTION); if (cardId == null || action == null) return; if ("DISMISS".equals(action)) { adapter.removeById(cardId); } else if ("SNOOZE_2H".equals(action)) { adapter.removeById(cardId); } else if ("SNOOZE_24H".equals(action)) { adapter.removeById(cardId); } else if ("SAVE".equals(action)) { Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show(); } if (adapter.getCount() == 0) { adapter.setItems(makeWaitingCard()); } } private List makeWaitingCard() { ArrayList items = new ArrayList(); items.add(new FeedItem( "local:empty", FeedItemType.INFO, "No cards", "Waiting for feed…", 0.0, 1, "", new ArrayList() )); return items; } private List buildVisibleItems(HudState.Snapshot snapshot) { if (snapshot == null) return makeWaitingCard(); FeedEnvelope env = new FeedEnvelope(1, 0L, snapshot.items, snapshot.meta); List items = env.activeItems(); if (items.isEmpty()) return makeWaitingCard(); ArrayList filtered = new ArrayList(); for (int i = 0; i < items.size(); i++) { FeedItem it = items.get(i); if (it == null) continue; filtered.add(it); } if (filtered.isEmpty()) return makeWaitingCard(); return filtered; } }