1e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown/* 2e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * Copyright (C) 2010 The Android Open Source Project 3e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * 4e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * you may not use this file except in compliance with the License. 6e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * You may obtain a copy of the License at 7e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * 8e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * 10e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * Unless required by applicable law or agreed to in writing, software 11e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * See the License for the specific language governing permissions and 14e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * limitations under the License. 15e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown */ 16e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownpackage com.example.android.supportv7.app; 17e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown 18e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.graphics.drawable.Drawable; 19e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.os.Bundle; 201f8b4a43c6fa8743a9664b9be93e5951fd788b36Chris Banesimport android.text.TextUtils; 21f0ca6752a527b235a75522699f919e63774fbaabAdam Powellimport android.view.Menu; 22f0ca6752a527b235a75522699f919e63774fbaabAdam Powellimport android.view.MenuInflater; 23f0ca6752a527b235a75522699f919e63774fbaabAdam Powellimport android.view.MenuItem; 24e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.widget.TextView; 25e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.widget.Toast; 26e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown 27def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.appcompat.app.AppCompatActivity; 28def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.appcompat.widget.SearchView; 29def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.view.MenuItemCompat; 30def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas 31458543f38db49fdcb1764f007ded33820964c3feAurimas Liutikasimport com.example.android.supportv7.R; 32458543f38db49fdcb1764f007ded33820964c3feAurimas Liutikas 33e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown/** 34e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * This demonstrates idiomatic usage of the Action Bar. The default Honeycomb theme 35e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * includes the action bar by default and a menu resource is used to populate the 36e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * menu data itself. If you'd like to see how these things work under the hood, see 37e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * ActionBarMechanics. 38e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown */ 3944d25261c2a38c81f1eea123de3986b453b9afeeChris Banespublic class ActionBarUsage extends AppCompatActivity { 40e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown TextView mSearchText; 41e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown int mSortMode = -1; 42e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown 43e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown @Override 44e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown protected void onCreate(Bundle savedInstanceState) { 45e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown super.onCreate(savedInstanceState); 46e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown mSearchText = new TextView(this); 47e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown setContentView(mSearchText); 48e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown } 49e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown 50e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown @Override 51f0ca6752a527b235a75522699f919e63774fbaabAdam Powell public boolean onCreateOptionsMenu(Menu menu) { 52281970133dd4fe76dcaa0fb16e646ecd0402b7cdChris Banes MenuInflater inflater = getMenuInflater(); 53e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown inflater.inflate(R.menu.actions, menu); 54458543f38db49fdcb1764f007ded33820964c3feAurimas Liutikas SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 551f8b4a43c6fa8743a9664b9be93e5951fd788b36Chris Banes searchView.setOnQueryTextListener(mOnQueryTextListener); 567ed1d9e48e54df2c98b6405e0996a3e97490b2bdVladislav Kaznacheev final MenuItem editItem = menu.findItem(R.id.action_edit); 577ed1d9e48e54df2c98b6405e0996a3e97490b2bdVladislav Kaznacheev MenuItemCompat.setContentDescription(editItem, 587ed1d9e48e54df2c98b6405e0996a3e97490b2bdVladislav Kaznacheev getString(R.string.action_bar_edit_description)); 597ed1d9e48e54df2c98b6405e0996a3e97490b2bdVladislav Kaznacheev MenuItemCompat.setTooltipText(editItem, 607ed1d9e48e54df2c98b6405e0996a3e97490b2bdVladislav Kaznacheev getString(R.string.action_bar_edit_tooltip)); 61e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown return true; 62e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown } 63e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown 64e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown @Override 65f0ca6752a527b235a75522699f919e63774fbaabAdam Powell public boolean onPrepareOptionsMenu(Menu menu) { 66e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown if (mSortMode != -1) { 67e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown Drawable icon = menu.findItem(mSortMode).getIcon(); 68e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown menu.findItem(R.id.action_sort).setIcon(icon); 69e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown } 70f0ca6752a527b235a75522699f919e63774fbaabAdam Powell return super.onPrepareOptionsMenu(menu); 71e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown } 72e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown 73e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown @Override 74f0ca6752a527b235a75522699f919e63774fbaabAdam Powell public boolean onOptionsItemSelected(MenuItem item) { 754ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes switch (item.getItemId()) { 764ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case R.id.action_sort_alpha: 774ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case R.id.action_sort_size: 784ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes onSort(item); 794ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes break; 804ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } 814ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 82e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show(); 834ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 84e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown return true; 85e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown } 86e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown 874ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes private void onSort(MenuItem item) { 88e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown mSortMode = item.getItemId(); 89e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown // Request a call to onPrepareOptionsMenu so we can change the sort icon 90e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown supportInvalidateOptionsMenu(); 91e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown } 92e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown 93e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown // The following callbacks are called for the SearchView.OnQueryChangeListener 94e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown // For more about using SearchView, see src/.../view/SearchView1.java and SearchView2.java 951f8b4a43c6fa8743a9664b9be93e5951fd788b36Chris Banes private final SearchView.OnQueryTextListener mOnQueryTextListener = 961f8b4a43c6fa8743a9664b9be93e5951fd788b36Chris Banes new SearchView.OnQueryTextListener() { 97e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown @Override 98e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown public boolean onQueryTextChange(String newText) { 991f8b4a43c6fa8743a9664b9be93e5951fd788b36Chris Banes newText = TextUtils.isEmpty(newText) ? "" : "Query so far: " + newText; 100e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown mSearchText.setText(newText); 101e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown return true; 102e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown } 103e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown 104e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown @Override 105e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown public boolean onQueryTextSubmit(String query) { 106e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown Toast.makeText(ActionBarUsage.this, 107e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown "Searching for: " + query + "...", Toast.LENGTH_SHORT).show(); 108e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown return true; 109e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown } 110e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown }; 111e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown} 112