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