Skip to content
This repository was archived by the owner on Jul 25, 2024. It is now read-only.

Commit 2658143

Browse files
committed
Change steamAdapter cursor instead of setting adapter on search
1 parent f075fbd commit 2658143

File tree

1 file changed

+42
-49
lines changed

1 file changed

+42
-49
lines changed

app/src/main/java/com/zulip/android/activities/ZulipActivity.java

Lines changed: 42 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -343,10 +343,11 @@ public void onClick(View v) {
343343
@Override
344344
public void onClick(View v) {
345345
//set default stream list
346-
setupListViewAdapter(true);
347-
//set visibility of this image false
348-
ivSearchStreamCancel.setVisibility(View.GONE);
349-
//set search editText text empty
346+
try {
347+
streamsDrawerAdapter.changeCursor(getSteamCursorGenerator().call());
348+
} catch (Exception e) {
349+
e.printStackTrace();
350+
}
350351
etSearchStream.setText("");
351352
}
352353
});
@@ -366,7 +367,7 @@ public void onDrawerClosed(View view) {
366367
public void onDrawerOpened(View drawerView) {
367368
// pass
368369
try {
369-
streamsDrawerAdapter.changeCursor(streamsGenerator.call());
370+
streamsDrawerAdapter.changeCursor(getSteamCursorGenerator().call());
370371
} catch (Exception e) {
371372
ZLog.logException(e);
372373
}
@@ -542,19 +543,10 @@ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
542543

543544
@Override
544545
public void onTextChanged(CharSequence s, int start, int before, int count) {
545-
if (etSearchStream.getText().toString().equals("") || etSearchStream.getText().toString().isEmpty())
546-
{
547-
//set default stream list
548-
setupListViewAdapter(true);
549-
//set visibility of this image false
550-
ivSearchStreamCancel.setVisibility(View.GONE);
551-
}else
552-
{
553-
//filter stream list
554-
streamSearchFilterKeyword = etSearchStream.getText().toString();
555-
setupListViewAdapter(false);
556-
//set visibility of this image false
557-
ivSearchStreamCancel.setVisibility(View.VISIBLE);
546+
try {
547+
streamsDrawerAdapter.changeCursor(getSteamCursorGenerator().call());
548+
} catch (Exception e) {
549+
e.printStackTrace();
558550
}
559551
}
560552

@@ -565,6 +557,35 @@ public void afterTextChanged(Editable s) {
565557
});
566558
}
567559

560+
private Callable<Cursor> getSteamCursorGenerator() {
561+
562+
Callable<Cursor> steamCursorGenerator = new Callable<Cursor>() {
563+
@Override
564+
public Cursor call() throws Exception {
565+
int pointer = app.getPointer();
566+
String query="SELECT s.id as _id, s.name, s.color, count(case when m.id > " + pointer + " or m." + Message.MESSAGE_READ_FIELD
567+
+ " = 0 then 1 end) as " + ExpandableStreamDrawerAdapter.UNREAD_TABLE_NAME
568+
+ " FROM streams as s LEFT JOIN messages as m ON s.id=m.stream ";
569+
if (!etSearchStream.getText().toString().equals("") && !etSearchStream.getText().toString().isEmpty())
570+
{
571+
//append where clause
572+
query+=" WHERE s.name LIKE '%"+ etSearchStream.getText().toString() + "%'";
573+
//set visibility of this image false
574+
ivSearchStreamCancel.setVisibility(View.VISIBLE);
575+
}else
576+
{
577+
//set visibility of this image false
578+
ivSearchStreamCancel.setVisibility(View.GONE);
579+
}
580+
//append group by
581+
query+= " group by s.name order by s.name COLLATE NOCASE";
582+
583+
return ((AndroidDatabaseResults) app.getDao(Stream.class).queryRaw(query).closeableIterator().getRawResults()).getRawCursor();
584+
}
585+
};
586+
return steamCursorGenerator;
587+
}
588+
568589
private void setUpPeopleList() {
569590
try {
570591
this.peopleAdapter = new RefreshableCursorAdapter(
@@ -943,30 +964,10 @@ public void onAnimationRepeat(Animator animator) {
943964
animator.start();
944965
}
945966

946-
Callable<Cursor> streamsGenerator = new Callable<Cursor>() {
947-
@Override
948-
public Cursor call() throws Exception {
949-
int pointer = app.getPointer();
950-
return ((AndroidDatabaseResults) app.getDao(Stream.class).queryRaw("SELECT s.id as _id, s.name, s.color," +
951-
" count(case when m.id > " + pointer + " or m." + Message.MESSAGE_READ_FIELD + " = 0 then 1 end) as " + ExpandableStreamDrawerAdapter.UNREAD_TABLE_NAME
952-
+ " FROM streams as s LEFT JOIN messages as m ON s.id=m.stream group by s.name order by s.name COLLATE NOCASE").closeableIterator().getRawResults()).getRawCursor();
953-
}
954-
};
955-
956-
Callable<Cursor> streamsGeneratorWithFilter = new Callable<Cursor>() {
957-
@Override
958-
public Cursor call() throws Exception {
959-
int pointer = app.getPointer();
960-
return ((AndroidDatabaseResults) app.getDao(Stream.class).queryRaw("SELECT s.id as _id, s.name, s.color," +
961-
" count(case when m.id > " + pointer + " or m." + Message.MESSAGE_READ_FIELD + " = 0 then 1 end) as " + ExpandableStreamDrawerAdapter.UNREAD_TABLE_NAME
962-
+ " FROM streams as s LEFT JOIN messages as m ON s.id=m.stream"+" WHERE s.name LIKE '%"+ streamSearchFilterKeyword +"%' group by s.name order by s.name COLLATE NOCASE").closeableIterator().getRawResults()).getRawCursor();
963-
}
964-
};
965-
966967
/**
967968
* Setup the streams Drawer which has a {@link ExpandableListView} categorizes the stream and subject
968969
*/
969-
private void setupListViewAdapter(boolean isDefault) {
970+
private void setupListViewAdapter() {
970971
streamsDrawerAdapter = null;
971972
String[] groupFrom = {Stream.NAME_FIELD, Stream.COLOR_FIELD, ExpandableStreamDrawerAdapter.UNREAD_TABLE_NAME};
972973
int[] groupTo = {R.id.name, R.id.stream_dot, R.id.unread_group};
@@ -976,18 +977,10 @@ private void setupListViewAdapter(boolean isDefault) {
976977
final ExpandableListView streamsDrawer = (ExpandableListView) findViewById(R.id.streams_drawer);
977978
streamsDrawer.setGroupIndicator(null);
978979
try {
979-
if (isDefault) {
980-
streamsDrawerAdapter = new ExpandableStreamDrawerAdapter(this, streamsGenerator.call(),
980+
streamsDrawerAdapter = new ExpandableStreamDrawerAdapter(this, getSteamCursorGenerator().call(),
981981
R.layout.stream_tile_new, groupFrom,
982982
groupTo, R.layout.stream_tile_child, childFrom,
983983
childTo);
984-
}else
985-
{
986-
streamsDrawerAdapter = new ExpandableStreamDrawerAdapter(this, streamsGeneratorWithFilter.call(),
987-
R.layout.stream_tile_new, groupFrom,
988-
groupTo, R.layout.stream_tile_child, childFrom,
989-
childTo);
990-
}
991984
} catch (Exception e) {
992985
ZLog.logException(e);
993986
}
@@ -1090,7 +1083,7 @@ public void onClick(View v) {
10901083
* Initiates the streams Drawer if the streams in the drawer is 0.
10911084
*/
10921085
public void checkAndSetupStreamsDrawer() {
1093-
setupListViewAdapter(true);
1086+
setupListViewAdapter();
10941087
}
10951088

10961089
private void sendMessage() {

0 commit comments

Comments
 (0)