From 32413a27539182aebc70dbdedbca2af7d3186699 Mon Sep 17 00:00:00 2001
From: relan <relan@users.noreply.github.com>
Date: Wed, 11 Nov 2015 16:27:23 +0300
Subject: [PATCH 1/3] Put empty text below the categories spinner

When an on-screen keyboard is used to enter a search query, empty text
can overlap categories spinner on small screens.
---
 F-Droid/res/layout/available_app_list.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/F-Droid/res/layout/available_app_list.xml b/F-Droid/res/layout/available_app_list.xml
index 166a71897..1ff394163 100644
--- a/F-Droid/res/layout/available_app_list.xml
+++ b/F-Droid/res/layout/available_app_list.xml
@@ -24,6 +24,7 @@
 
     <TextView
         style="@style/AppListEmptyText"
+        android:layout_below="@id/category_spinner"
         android:text="@string/empty_available_app_list" />
 
 </RelativeLayout>

From f0d72a3ec4302ba119a1113f1f1fb66b550743e3 Mon Sep 17 00:00:00 2001
From: relan <relan@users.noreply.github.com>
Date: Fri, 13 Nov 2015 08:25:26 +0300
Subject: [PATCH 2/3] Remove search button from the search results activity

It violates app navigation logic.
---
 F-Droid/src/org/fdroid/fdroid/SearchResults.java | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/F-Droid/src/org/fdroid/fdroid/SearchResults.java b/F-Droid/src/org/fdroid/fdroid/SearchResults.java
index 97e3fc307..8398a266e 100644
--- a/F-Droid/src/org/fdroid/fdroid/SearchResults.java
+++ b/F-Droid/src/org/fdroid/fdroid/SearchResults.java
@@ -23,7 +23,6 @@ import android.os.Build;
 import android.os.Bundle;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.NavUtils;
-import android.support.v4.view.MenuItemCompat;
 import android.support.v7.app.ActionBarActivity;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -73,15 +72,6 @@ public class SearchResults extends ActionBarActivity {
         setIntent(intent);
     }
 
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-        MenuItem search = menu.add(Menu.NONE, SEARCH, 1, R.string.menu_search).setIcon(
-                android.R.drawable.ic_menu_search);
-        MenuItemCompat.setShowAsAction(search, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM);
-        return true;
-    }
-
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {

From e841d63ea9c6b8d59b28c1ebd5bf1f41278d0934 Mon Sep 17 00:00:00 2001
From: relan <relan@users.noreply.github.com>
Date: Wed, 11 Nov 2015 16:56:14 +0300
Subject: [PATCH 3/3] Replace search dialog with a search widget

SearchView is the recommended way to implement search UI. See
https://developer.android.com/guide/topics/search/search-dialog.html#UsingSearchWidget
---
 F-Droid/AndroidManifest.xml               |  8 ++++----
 F-Droid/res/menu/main.xml                 |  3 ++-
 F-Droid/src/org/fdroid/fdroid/FDroid.java | 14 ++++++++++----
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/F-Droid/AndroidManifest.xml b/F-Droid/AndroidManifest.xml
index b8a04e480..0209c5de7 100644
--- a/F-Droid/AndroidManifest.xml
+++ b/F-Droid/AndroidManifest.xml
@@ -88,6 +88,10 @@
             android:name="org.fdroid.fdroid.data.InstalledAppProvider"
             android:exported="false"/>
 
+        <meta-data
+            android:name="android.app.default_searchable"
+            android:value=".SearchResults" />
+
         <activity
             android:name=".FDroid"
             android:launchMode="singleTop"
@@ -292,10 +296,6 @@
                 <data android:pathPattern="/.*/.*/FDROID/REPO" />
                 <data android:pathPattern="/.*/.*/.*/FDROID/REPO" />
             </intent-filter>
-
-            <meta-data
-                android:name="android.app.default_searchable"
-                android:value=".SearchResults" />
         </activity>
         <activity
             android:name=".privileged.views.InstallConfirmActivity"
diff --git a/F-Droid/res/menu/main.xml b/F-Droid/res/menu/main.xml
index f06e36cd1..f988659dd 100644
--- a/F-Droid/res/menu/main.xml
+++ b/F-Droid/res/menu/main.xml
@@ -6,7 +6,8 @@
         android:id="@+id/action_search"
         android:icon="@drawable/ic_search_white"
         android:title="@string/menu_search"
-        app:showAsAction="ifRoom"/>
+        app:actionViewClass="android.support.v7.widget.SearchView"
+        app:showAsAction="collapseActionView|ifRoom"/>
     <item
         android:id="@+id/action_update_repo"
         android:icon="@drawable/ic_refresh_white"
diff --git a/F-Droid/src/org/fdroid/fdroid/FDroid.java b/F-Droid/src/org/fdroid/fdroid/FDroid.java
index 566fb00b2..b904f5afe 100644
--- a/F-Droid/src/org/fdroid/fdroid/FDroid.java
+++ b/F-Droid/src/org/fdroid/fdroid/FDroid.java
@@ -29,9 +29,11 @@ import android.content.res.Configuration;
 import android.database.ContentObserver;
 import android.net.Uri;
 import android.os.Bundle;
+import android.support.v4.view.MenuItemCompat;
 import android.support.v4.view.ViewPager;
 import android.support.v7.app.ActionBarActivity;
 import android.support.v7.app.AlertDialog;
+import android.support.v7.widget.SearchView;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -239,6 +241,14 @@ public class FDroid extends ActionBarActivity {
             MenuItem btItem = menu.findItem(R.id.action_bluetooth_apk);
             btItem.setVisible(false);
         }
+
+        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
+        MenuItem searchItem = menu.findItem(R.id.action_search);
+        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
+        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
+        // LayoutParams.MATCH_PARENT does not work, use a big value instead
+        searchView.setMaxWidth(1000000);
+
         return super.onCreateOptionsMenu(menu);
     }
 
@@ -264,10 +274,6 @@ public class FDroid extends ActionBarActivity {
                 startActivity(new Intent(this, SwapWorkflowActivity.class));
                 return true;
 
-            case R.id.action_search:
-                onSearchRequested();
-                return true;
-
             case R.id.action_bluetooth_apk:
                 /*
                  * If Bluetooth has not been enabled/turned on, then enabling