package com.sunlightlabs.android.congress; import android.app.ListActivity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; import android.widget.ListView; import android.widget.TextView; import com.sunlightlabs.android.congress.notifications.Subscriber; import com.sunlightlabs.android.congress.notifications.Subscription; import com.sunlightlabs.android.congress.utils.Analytics; import com.sunlightlabs.android.congress.utils.Database; import com.sunlightlabs.android.congress.utils.Utils; public class NotificationSubscriptions extends ListActivity { private Database database; private Cursor cursor; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Analytics.init(this); setContentView(R.layout.list); setupDatabase(); setupControls(); } @Override protected void onDestroy() { super.onDestroy(); database.close(); } public void setupDatabase() { database = new Database(this); database.open(); cursor = database.getSubscriptions(); startManagingCursor(cursor); } public void setupControls() { if (cursor.getCount() == 0) Utils.showEmpty(this, R.string.notifications_empty); setListAdapter(new SubscriptionAdapter(this, cursor)); } @Override protected void onListItemClick(ListView l, View view, int position, long id) { Object tag = view.getTag(); if (tag != null) startActivity((Intent) tag); } @Override protected void onResume() { super.onResume(); if (cursor != null) cursor.requery(); setupControls(); } class SubscriptionAdapter extends CursorAdapter { public SubscriptionAdapter(Context context, Cursor cursor) { super(context, cursor); } @Override public void bindView(View view, Context context, Cursor cursor) { TextView text = (TextView) view.findViewById(R.id.text); Subscription subscription = Database.loadSubscription(cursor); Subscriber subscriber; try { subscriber = subscription.getSubscriber(); subscriber.context = context; text.setText(subscriber.subscriptionName(subscription)); view.setTag(subscriber.notificationIntent(subscription)); view.setEnabled(true); } catch (Exception e) { Log.e(Utils.TAG, "Could not instantiate a Subscriber of class " + subscription.notificationClass, e); text.setText(R.string.notification_not_found); view.setTag(null); view.setEnabled(false); } } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { View view = LayoutInflater.from(context).inflate(R.layout.subscription_item, null); bindView(view, context, cursor); return view; } } @Override public void onStart() { super.onStart(); Analytics.start(this); } @Override public void onStop() { super.onStop(); Analytics.stop(this); } }