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