Files
aris-old/IrisGlass/app/src/main/java/sh/nym/irisglass/FeedActivity.java

132 lines
4.3 KiB
Java
Raw Normal View History

2026-01-08 19:16:32 +00:00
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;
}
}