package com.zulip.android.activities; import android.content.Context; import android.database.Cursor; import android.database.MatrixCursor; import android.widget.SimpleCursorTreeAdapter; import com.zulip.android.ZulipApp; import com.zulip.android.models.Message; import com.zulip.android.models.Stream; import com.zulip.android.util.ZLog; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; /** * Adapter for the left side drawer of the streams and subjects. */ public class ExpandableStreamDrawerAdapter extends SimpleCursorTreeAdapter { public static final String UNREAD_TABLE_NAME = "unread"; private ZulipApp zulipApp; public ExpandableStreamDrawerAdapter(final Context context, Cursor cursor, int groupLayout, String[] groupFrom, int[] groupTo, int childLayout, String[] childFrom, int[] childTo) { super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom, childTo); zulipApp = ZulipApp.get(); } @Override public Cursor getChildrenCursor(Cursor groupCursor) { List<String[]> results = new ArrayList<>(); try { results = ZulipApp.get().getDao(Message.class).queryRaw("SELECT DISTINCT subject FROM messages " + "JOIN streams ON streams.id=messages.stream " + "WHERE streams.id=" + groupCursor.getInt(0) + " and streams." + Stream.SUBSCRIBED_FIELD + " = " + "1 group by subject").getResults(); } catch (SQLException e) { ZLog.logException(e); } MatrixCursor matrixCursor = new MatrixCursor(new String[]{"subject", "_id"}); for (String[] result : results) { try { matrixCursor.addRow(new String[]{result[0], String.valueOf(groupCursor.getInt(0))}); } catch (Exception e) { ZLog.logException(e); } } return matrixCursor; } }