Skip to content

Commit

Permalink
Improve search bar visibility
Browse files Browse the repository at this point in the history
  • Loading branch information
moxie0 committed Nov 14, 2017
1 parent 9a75f49 commit 405ee3b
Show file tree
Hide file tree
Showing 10 changed files with 251 additions and 60 deletions.
7 changes: 7 additions & 0 deletions res/drawable/search_toolbar_shadow.xml
@@ -0,0 +1,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="@android:color/transparent"
android:endColor="#40000000"
android:angle="90" />
</shape>
43 changes: 30 additions & 13 deletions res/layout/conversation_list_activity.xml
@@ -1,13 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@id/container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@id/container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
Expand All @@ -18,10 +19,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent">


<ImageView android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
android:src="@drawable/icon_transparent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
Expand All @@ -35,20 +36,36 @@
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/search_action"
android:layout_toStartOf="@+id/search_action"
android:layout_marginStart="66dp"
android:layout_marginLeft="66dp"/>

<ImageView android:id="@+id/search_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_search_white_24dp"
android:paddingRight="16dp"
android:paddingEnd="16dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"/>

</RelativeLayout>

</android.support.v7.widget.Toolbar>

<FrameLayout android:id="@+id/fragment_container"
android:layout_below="@id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

<!--<fragment android:id="@+id/fragment"-->
<!--android:name="org.thoughtcrime.securesms.ConversationListFragment"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent"-->
<!--tools:layout="@layout/conversation_list_fragment"/>-->
<org.thoughtcrime.securesms.components.SearchToolbar
android:id="@+id/search_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:visibility="invisible"
tools:visibility="visible"/>

</LinearLayout>
</RelativeLayout>
19 changes: 19 additions & 0 deletions res/layout/search_toolbar.xml
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content"
android:layout_width="match_parent"
tools:parentTag="android.widget.LinearLayout"
tools:orientation="vertical">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/search_toolbar_background"/>

<View android:layout_width="match_parent"
android:layout_height="7dp"
android:background="@drawable/search_toolbar_shadow"/>

</merge>
11 changes: 0 additions & 11 deletions res/menu/conversation_list.xml

This file was deleted.

11 changes: 11 additions & 0 deletions res/menu/conversation_list_search.xml
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
android:id="@+id/action_filter_search"
android:title=" "
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="collapseActionView|always" />

</menu>
2 changes: 2 additions & 0 deletions res/values/attrs.xml
Expand Up @@ -136,6 +136,8 @@
<attr name="media_overview_document_background" format="color"/>
<attr name="media_overview_document_foreground" format="color"/>

<attr name="search_toolbar_background" format="color"/>

<declare-styleable name="ColorPreference">
<attr name="itemLayout" format="reference" />
<attr name="choices" format="reference" />
Expand Down
1 change: 1 addition & 0 deletions res/values/strings.xml
Expand Up @@ -1494,6 +1494,7 @@
<string name="conversation_list_item_inbox_zero__inbox_zeeerrro">Inbox zeeerrro</string>
<string name="conversation_list_item_inbox_zero__zip_zilch_zero_nada_nyou_re_all_caught_up">Zip. Zilch. Zero. Nada. You\'re all caught up!</string>
<string name="ConversationListFragment_no_results_found_for_s_">No results found for \'%s\'</string>
<string name="SearchToolbar_search">Search</string>


<!-- EOF -->
Expand Down
3 changes: 3 additions & 0 deletions res/values/themes.xml
Expand Up @@ -224,6 +224,8 @@

<item name="group_members_dialog_icon">@drawable/ic_group_grey600_24dp</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.Fix</item>

<item name="search_toolbar_background">@color/white</item>
</style>

<style name="TextSecure.DarkTheme" parent="@style/Theme.AppCompat">
Expand Down Expand Up @@ -348,5 +350,6 @@

<item name="group_members_dialog_icon">@drawable/ic_group_white_24dp</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.Fix</item>
<item name="search_toolbar_background">@color/black</item>
</style>
</resources>
62 changes: 26 additions & 36 deletions src/org/thoughtcrime/securesms/ConversationListActivity.java
Expand Up @@ -26,21 +26,19 @@
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import org.thoughtcrime.securesms.components.RatingManager;
import org.thoughtcrime.securesms.components.SearchToolbar;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase;
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
import org.thoughtcrime.securesms.notifications.MarkReadReceiver;
import org.thoughtcrime.securesms.notifications.MessageNotifier;
Expand All @@ -62,8 +60,10 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();

private ConversationListFragment fragment;
private ContentObserver observer;
private MasterSecret masterSecret;
private ContentObserver observer;
private MasterSecret masterSecret;
private SearchToolbar searchToolbar;
private ImageView searchAction;

@Override
protected void onPreCreate() {
Expand All @@ -80,9 +80,12 @@ protected void onCreate(Bundle icicle, @NonNull MasterSecret masterSecret) {
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

fragment = initFragment(R.id.fragment_container, new ConversationListFragment(), masterSecret, dynamicLanguage.getCurrentLocale());
searchToolbar = findViewById(R.id.search_toolbar);
searchAction = findViewById(R.id.search_action);
fragment = initFragment(R.id.fragment_container, new ConversationListFragment(), masterSecret, dynamicLanguage.getCurrentLocale());

initializeContactUpdatesReceiver();
initializeSearchListener();

RatingManager.showRatingDialogIfNecessary(this);
}
Expand All @@ -109,47 +112,28 @@ public boolean onPrepareOptionsMenu(Menu menu) {

menu.findItem(R.id.menu_clear_passphrase).setVisible(!TextSecurePreferences.isPasswordDisabled(this));

inflater.inflate(R.menu.conversation_list, menu);
MenuItem menuItem = menu.findItem(R.id.menu_search);
initializeSearch(menuItem);

super.onPrepareOptionsMenu(menu);
return true;
}

private void initializeSearch(MenuItem searchViewItem) {
SearchView searchView = (SearchView)MenuItemCompat.getActionView(searchViewItem);
searchView.setQueryHint(getString(R.string.ConversationListActivity_search));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (fragment != null) {
fragment.setQueryFilter(query);
return true;
}

return false;
}

@Override
public boolean onQueryTextChange(String newText) {
return onQueryTextSubmit(newText);
}
private void initializeSearchListener() {
searchAction.setOnClickListener(v -> {
searchToolbar.display(searchAction.getX() + (searchAction.getWidth() / 2), searchAction.getY() + (searchAction.getHeight() / 2));
});

MenuItemCompat.setOnActionExpandListener(searchViewItem, new MenuItemCompat.OnActionExpandListener() {
searchToolbar.setListener(new SearchToolbar.SearchListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem menuItem) {
return true;
public void onSearchTextChange(String text) {
if (fragment != null) {
fragment.setQueryFilter(text);
}
}

@Override
public boolean onMenuItemActionCollapse(MenuItem menuItem) {
public void onSearchReset() {
if (fragment != null) {
fragment.resetQueryFilter();
}

return true;
}
});
}
Expand Down Expand Up @@ -190,6 +174,12 @@ public void onSwitchToArchive() {
startActivity(intent);
}

@Override
public void onBackPressed() {
if (searchToolbar.isVisible()) searchToolbar.collapse();
else super.onBackPressed();
}

private void createGroup() {
Intent intent = new Intent(this, GroupCreateActivity.class);
startActivity(intent);
Expand Down

0 comments on commit 405ee3b

Please sign in to comment.