1e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown/*
2e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * Copyright (C) 2011 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 Brown
17e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownpackage com.example.android.supportv7.app;
18e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown
19e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.content.Context;
20e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.content.Intent;
21e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.provider.Settings;
22e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.view.LayoutInflater;
23f0ca6752a527b235a75522699f919e63774fbaabAdam Powellimport android.view.Menu;
24f0ca6752a527b235a75522699f919e63774fbaabAdam Powellimport android.view.MenuItem;
25e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.view.View;
26e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.widget.ImageButton;
27e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brownimport android.widget.Toast;
28e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown
29def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.appcompat.app.AppCompatActivity;
30def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.core.view.ActionProvider;
31def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
32def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport com.example.android.supportv7.R;
33def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
34e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown/**
35e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * This activity demonstrates how to implement an {@link android.view.ActionProvider}
36e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * for adding functionality to the Action Bar. In particular this demo creates an
37e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * ActionProvider for launching the system settings and adds a menu item with that
38e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown * provider.
39e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown */
4044d25261c2a38c81f1eea123de3986b453b9afeeChris Banespublic class ActionBarSettingsActionProviderActivity extends AppCompatActivity {
41e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown    @Override
42f0ca6752a527b235a75522699f919e63774fbaabAdam Powell    public boolean onCreateOptionsMenu(Menu menu) {
43f0ca6752a527b235a75522699f919e63774fbaabAdam Powell        super.onCreateOptionsMenu(menu);
44281970133dd4fe76dcaa0fb16e646ecd0402b7cdChris Banes        getMenuInflater().inflate(R.menu.action_bar_settings_action_provider, menu);
45e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        return true;
46e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown    }
47e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown
48e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown    @Override
49f0ca6752a527b235a75522699f919e63774fbaabAdam Powell    public boolean onOptionsItemSelected(MenuItem item) {
50e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        // If this callback does not handle the item click, onPerformDefaultAction
51e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        // of the ActionProvider is invoked. Hence, the provider encapsulates the
52e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        // complete functionality of the menu item.
53e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        Toast.makeText(this, R.string.action_bar_settings_action_provider_no_handling,
54e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown                Toast.LENGTH_SHORT).show();
55e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        return false;
56e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown    }
57e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown
58e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown    public static class SettingsActionProvider extends ActionProvider {
59e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        /** An intent for launching the system settings. */
60e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        private static final Intent sSettingsIntent = new Intent(Settings.ACTION_SETTINGS);
61e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown
62e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        /**
63e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown         * Creates a new instance.
64e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown         *
65e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown         * @param context Context for accessing resources.
66e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown         */
67e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        public SettingsActionProvider(Context context) {
68e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            super(context);
69e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        }
70e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown
71e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        @Override
72e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        public View onCreateActionView() {
73e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            // Inflate the action view to be shown on the action bar.
74e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            LayoutInflater layoutInflater = LayoutInflater.from(getContext());
75e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            View view = layoutInflater.inflate(R.layout.action_bar_settings_action_provider, null);
76e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            ImageButton button = (ImageButton) view.findViewById(R.id.button);
77e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            // Attach a click listener for launching the system settings.
78e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            button.setOnClickListener(new View.OnClickListener() {
79e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown                @Override
80e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown                public void onClick(View v) {
81e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown                    getContext().startActivity(sSettingsIntent);
82e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown                }
83e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            });
84e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            return view;
85e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        }
86e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown
87e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        @Override
88e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        public boolean onPerformDefaultAction() {
89e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            // This is called if the host menu item placed in the overflow menu of the
90e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            // action bar is clicked and the host activity did not handle the click.
91e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            getContext().startActivity(sSettingsIntent);
92e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown            return true;
93e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown        }
94e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown    }
95e1ab8c5ca7ab8e6d9a6124ad292363ebd67857d9Jeff Brown}
96