132 lines
4.3 KiB
Java
132 lines
4.3 KiB
Java
|
|
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<FeedItem> makeWaitingCard() {
|
||
|
|
ArrayList<FeedItem> items = new ArrayList<FeedItem>();
|
||
|
|
items.add(new FeedItem(
|
||
|
|
"local:empty",
|
||
|
|
FeedItemType.INFO,
|
||
|
|
"No cards",
|
||
|
|
"Waiting for feed…",
|
||
|
|
0.0,
|
||
|
|
1,
|
||
|
|
"",
|
||
|
|
new ArrayList<String>()
|
||
|
|
));
|
||
|
|
return items;
|
||
|
|
}
|
||
|
|
|
||
|
|
private List<FeedItem> buildVisibleItems(HudState.Snapshot snapshot) {
|
||
|
|
if (snapshot == null) return makeWaitingCard();
|
||
|
|
FeedEnvelope env = new FeedEnvelope(1, 0L, snapshot.items, snapshot.meta);
|
||
|
|
List<FeedItem> items = env.activeItems();
|
||
|
|
if (items.isEmpty()) return makeWaitingCard();
|
||
|
|
|
||
|
|
ArrayList<FeedItem> filtered = new ArrayList<FeedItem>();
|
||
|
|
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;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|