Merge branch 'search-widget' into 'master'

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

The UX is still far from ideal but looks much better now.

Before and after (Gingerbred):

![gingerbred-before](/uploads/f724afaf152aeef8ff9cb3e838427d22/gingerbred-before.png)
![gingerbred-after](/uploads/da67fe57d2a55e64cce7d0cba31aa181/gingerbred-after.png)

Before and after (Lollipop):

![lollipop-before](/uploads/4a50258993a8304d984450456d07e3bb/lollipop-before.png)
![lollipop-after](/uploads/4b49b2f802eca567c6713fe653b10331/lollipop-after.png)


See merge request !168
This commit is contained in:
Daniel Martí 2015-11-13 17:22:19 +00:00
commit 682cf58aa9
5 changed files with 17 additions and 19 deletions

View File

@ -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"

View File

@ -24,6 +24,7 @@
<TextView
style="@style/AppListEmptyText"
android:layout_below="@id/category_spinner"
android:text="@string/empty_available_app_list" />
</RelativeLayout>

View File

@ -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"

View File

@ -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

View File

@ -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()) {