initial commit
This commit is contained in:
140
IrisGlass/app/src/main/java/sh/nym/irisglass/FeedActivity.java
Normal file
140
IrisGlass/app/src/main/java/sh/nym/irisglass/FeedActivity.java
Normal file
@@ -0,0 +1,140 @@
|
||||
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 SuppressionStore suppressionStore;
|
||||
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);
|
||||
|
||||
suppressionStore = new SuppressionStore(this);
|
||||
|
||||
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;
|
||||
|
||||
long now = System.currentTimeMillis() / 1000L;
|
||||
if ("DISMISS".equals(action)) {
|
||||
suppressionStore.setSuppressed(cardId, now + (10L * 365L * 24L * 60L * 60L));
|
||||
adapter.removeById(cardId);
|
||||
} else if ("SNOOZE_2H".equals(action)) {
|
||||
suppressionStore.setSuppressed(cardId, now + 2L * 60L * 60L);
|
||||
adapter.removeById(cardId);
|
||||
} else if ("SNOOZE_24H".equals(action)) {
|
||||
suppressionStore.setSuppressed(cardId, now + 24L * 60L * 60L);
|
||||
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();
|
||||
|
||||
long now = System.currentTimeMillis() / 1000L;
|
||||
ArrayList<FeedItem> filtered = new ArrayList<FeedItem>();
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
FeedItem it = items.get(i);
|
||||
if (it == null) continue;
|
||||
if (it.id != null && suppressionStore.isSuppressed(it.id, now)) continue;
|
||||
filtered.add(it);
|
||||
}
|
||||
if (filtered.isEmpty()) return makeWaitingCard();
|
||||
return filtered;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user