From 53f61893018403047c87e3d9618c82e9f03b0c55 Mon Sep 17 00:00:00 2001 From: Miroojin Bakshi Date: Thu, 6 Mar 2014 02:24:13 +0530 Subject: [PATCH] Implement search for KeyListPublicFragment --- .../keychain/ui/KeyListPublicFragment.java | 47 ++++++++++++++++-- .../res/drawable-mdpi/ic_action_search.png | Bin 0 -> 2349 bytes .../src/main/res/menu/key_list_public.xml | 7 ++- 3 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 OpenPGP-Keychain/src/main/res/drawable-mdpi/ic_action_search.png diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListPublicFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListPublicFragment.java index 0afa556cb..af5d946eb 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListPublicFragment.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListPublicFragment.java @@ -46,9 +46,13 @@ import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; +import android.support.v4.view.MenuItemCompat; +import android.support.v7.widget.SearchView; +import android.text.TextUtils; import android.view.ActionMode; import android.view.LayoutInflater; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; @@ -64,23 +68,25 @@ import com.beardedhen.androidbootstrap.BootstrapButton; * Public key list with sticky list headers. It does _not_ extend ListFragment because it uses * StickyListHeaders library which does not extend upon ListView. */ -public class KeyListPublicFragment extends Fragment implements AdapterView.OnItemClickListener, +public class KeyListPublicFragment extends Fragment implements SearchView.OnQueryTextListener, AdapterView.OnItemClickListener, LoaderManager.LoaderCallbacks { private KeyListPublicAdapter mAdapter; private StickyListHeadersListView mStickyList; - + private String mCurQuery; + private SearchView mSearchView; // empty list layout private BootstrapButton mButtonEmptyCreate; private BootstrapButton mButtonEmptyImport; + /** * Load custom layout with StickyListView from library */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.key_list_public_fragment, container, false); - + setHasOptionsMenu(true); mButtonEmptyCreate = (BootstrapButton) view.findViewById(R.id.key_list_empty_button_create); mButtonEmptyCreate.setOnClickListener(new OnClickListener() { @@ -232,10 +238,13 @@ public class KeyListPublicFragment extends Fragment implements AdapterView.OnIte // This is called when a new Loader needs to be created. This // sample only has one Loader, so we don't care about the ID. Uri baseUri = KeyRings.buildPublicKeyRingsUri(); + String where = null; + if(mCurQuery != null) + where = KeychainContract.UserIds.USER_ID + " LIKE \"" + mCurQuery + "%\""; // Now create and return a CursorLoader that will take care of // creating a Cursor for the data being displayed. - return new CursorLoader(getActivity(), baseUri, PROJECTION, null, null, SORT_ORDER); + return new CursorLoader(getActivity(), baseUri, PROJECTION, where, null, SORT_ORDER); } @Override @@ -335,4 +344,34 @@ public class KeyListPublicFragment extends Fragment implements AdapterView.OnIte deleteKeyDialog.show(getActivity().getSupportFragmentManager(), "deleteKeyDialog"); } + + @Override + public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { + + // Get the searchview + MenuItem searchItem = menu.findItem(R.id.menu_key_list_public_search); + mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); + + // Execute this when searching + mSearchView.setOnQueryTextListener(this); + + super.onCreateOptionsMenu(menu, inflater); + + } + + @Override + public boolean onQueryTextSubmit(String s) { + return true; + } + + @Override + public boolean onQueryTextChange(String s) { + // Called when the action bar search text has changed. Update + // the search filter, and restart the loader to do a new query + // with this filter. + String newQuery = !TextUtils.isEmpty(s) ? s : null; + mCurQuery = newQuery; + getLoaderManager().restartLoader(0, null, this); + return true; + } } diff --git a/OpenPGP-Keychain/src/main/res/drawable-mdpi/ic_action_search.png b/OpenPGP-Keychain/src/main/res/drawable-mdpi/ic_action_search.png new file mode 100644 index 0000000000000000000000000000000000000000..f6719d228a614e6090fd20281eda453d5002f424 GIT binary patch literal 2349 zcmaJ@cT`hnA5J6;L5d6!88rq(OUZ&jNFa<1kP&1GVo^eJm3)|Caw8!c1WHvsn#P(C z2t?a+6E#4wVwA6jn&KO>Z0?X^Sp(8S!9dJE^$wka(Frxtw9trGXb4iHTH|r2^Hj9J^v7=+? zdG>3(nuPXNH}P#7c=V~>H`V^LUJ93GFihTCAU7&OKPjkQ5y@kCo2A_fEh@*ou6 z1gxFJ0IK^JUkZzahyp=A5si+Ci9yBKqIiN`Xe@z1P-@uNAQcFtFqR84#7M5td`W={ z2$=#lA7t~maHS$6k|zR52t}m-q`={SmE{V*lu1!Aw3xw1V^J7oN=raG{r^KboUdph z7y$em@Bb7Q2F3CLbO0dai3ChV<93=WUGa$&0l)xxf*>Am_fi%8qIe)r7{%kmDS>uy zI)lmPD(%mBI-Tgr6@m;d6Y!*x5DEnpo6RD+k+Bpz0+~#+rQ)zy8ph4umPT=>;q5SZ zES6wLS>jT8Oc4j*f=gW1zg)^Uxyn)C@D-k^fPlRhV7Uu;9QfyyiR^F3LincM7cT4D zvABJci&g}KRyOv(8ohL+m>%W!>)0xcuY(V871J(Ij5R=ftOJ3l7I{+Lg2d0pw|X84 z_ArPO6;w2>i&|kEMr(ksw*bx0C2X8MyGPgG0&&A1)D72K(0HzqxKhJnrFqRtmA*Tf zN!B%ciVniG9cbEniyd^((o6E#`JB@s;UeDiE(C7&7s`|KbB>}WiDk>xXMPLEo~>Lw z2wkBfmP3zfh$^e9>Moiv|MM*DK5y=f_FIdw*N=xDWCX~KCAB=M{Ap)r;48Ip%U4aG zI7tq;Yll2`#CqVd^8k!#v$|Go{NbC?wuJ!9Mw9LYn`(0C|J7DoY)+IzBiwrO}<>1PyncBFQ|4 zQjf3q+7Iik+o+Qer^72zX~)hqYvNe^$)j5uLhJ z8NhNJG}59D$(K#2&bMB_W@MX%kN7E?sWZ`;X_aPOY8nH~%aPWzDmteoJ7P_}3BL7l z>Jm$0A~w2GY;a0ej*s~0-2b)(<-+`Z*X$(rsdW{3KGVd(<2c$4`+Lv!%##CeUqUZe z7%S_E(aQ3zkE;98`Qi0L@H#OZPkV777zv&*8W+E#%*X^e=p@t z;>FAvj@JXV2k9afjfgpYc6054X6^p|V?)^{2PdnZk6j;GJo`uw_<2f&cBR9}Q7zZ$ zp=n^>!(#Pc`)hVU5425{MBOc>mf|3&ZoeALGs59^rnwWmkU;6?rJ9W1|A`S{1w_KS4>#d^GHBD+#@>1^^ zuaSLpI689XNp+$;q=)94=eMODQ@&vExQqts1w0>06r?|fKO=a%-21d5kcT+L>wl_6j8z1&6N(yte(zc#P$`)_*N(|%? zJ|=E&%0O&z-v&lAszb2sIB(ssw|n)$Lv}3X=VrOychNpNzx-IU!jw?F&mH&~{Ep&}Cr}GX&9VlnxN@MBy4(Ein zjZ-Yv52D`hW#+KzEUcew+gR!LPpU*$c=GJ5;U>kM5(_D6Jnee68Dm`wiLNZWY(D75 zoeb`Csz$44o;YHrndG0Gek*dE*<=sjrgd9O6$*mj!2P0@^~uqem-i>Mu4Qsda*|ue zvMJKUQEpD_nv@a9$}K0Rx$xwU1jClX+gGmIqiI1#S9)H)NVUnrMYP(v7~X5D$(K7> zM;Y>>5CuDqHCW(!3Lj+I?5sTjlWa2^>w@a!Pxgs!(7m55ORNepi+{Zw(>}4 - + \ No newline at end of file