diff options
| author | Svetoslav Ganov <svetoslavganov@google.com> | 2011-10-24 12:07:02 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-10-24 12:07:02 -0700 |
| commit | 43fe209e574d2134adb5dabc76efb0ca81645fcc (patch) | |
| tree | 7d712b5236e11dd5158f125e8022e802b27770d9 /samples | |
| parent | 44bec4313178cfa6b3c3ba9cc634e350370df697 (diff) | |
| parent | 30073fb13b813af0be02239da28f6b711f094358 (diff) | |
| download | android_development-43fe209e574d2134adb5dabc76efb0ca81645fcc.tar.gz android_development-43fe209e574d2134adb5dabc76efb0ca81645fcc.tar.bz2 android_development-43fe209e574d2134adb5dabc76efb0ca81645fcc.zip | |
Merge "Adding a code sample for how to write a custom action provider." into ics-mr0
Diffstat (limited to 'samples')
12 files changed, 211 insertions, 11 deletions
diff --git a/samples/ApiDemos/AndroidManifest.xml b/samples/ApiDemos/AndroidManifest.xml index 4a4a7c3eb..2449e062e 100644 --- a/samples/ApiDemos/AndroidManifest.xml +++ b/samples/ApiDemos/AndroidManifest.xml @@ -816,8 +816,17 @@ </intent-filter> </activity> - <activity android:name=".app.ActionBarActionProviderActivity" - android:label="@string/action_bar_action_provider" + <activity android:name=".app.ActionBarSettingsActionProviderActivity" + android:label="@string/action_bar_settings_action_provider" + android:enabled="@bool/atLeastIceCreamSandwich"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="android.intent.category.SAMPLE_CODE" /> + </intent-filter> + </activity> + + <activity android:name=".app.ActionBarShareActionProviderActivity" + android:label="@string/action_bar_share_action_provider" android:enabled="@bool/atLeastIceCreamSandwich"> <intent-filter> <action android:name="android.intent.action.MAIN" /> diff --git a/samples/ApiDemos/_index.html b/samples/ApiDemos/_index.html index 002ca1585..9466c95b5 100644 --- a/samples/ApiDemos/_index.html +++ b/samples/ApiDemos/_index.html @@ -20,9 +20,12 @@ that illustrate the use of various Android APIs. It includes samples of: <p><strong>Update:</strong> The following are some of the new demos for Android 4.0:</p> <ul> <li><a -href="src/com/example/android/apis/preference/PreferencesFromCode.html">SwitchPreference</a></li> +href="src/com/example/android/apis/preference/PreferencesFromCode.html">Switch Preference</a></li> <li><a -href="src/com/example/android/apis/app/ActionBarActionProviderActivity.html">ShareActionProvider +href="src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.html">Settings Action Provider +</a></li> +<li><a +href="src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html">Share Action Provider </a></li> <li><a href="src/com/example/android/apis/view/SearchViewActionBar.html">Collapsible action view</a></li> diff --git a/samples/ApiDemos/res/drawable-hdpi/ic_launcher_settings.png b/samples/ApiDemos/res/drawable-hdpi/ic_launcher_settings.png Binary files differnew file mode 100644 index 000000000..c02bd424f --- /dev/null +++ b/samples/ApiDemos/res/drawable-hdpi/ic_launcher_settings.png diff --git a/samples/ApiDemos/res/drawable-mdpi/ic_launcher_settings.png b/samples/ApiDemos/res/drawable-mdpi/ic_launcher_settings.png Binary files differnew file mode 100644 index 000000000..05cdd9aa9 --- /dev/null +++ b/samples/ApiDemos/res/drawable-mdpi/ic_launcher_settings.png diff --git a/samples/ApiDemos/res/drawable-xhdpi/ic_launcher_settings.png b/samples/ApiDemos/res/drawable-xhdpi/ic_launcher_settings.png Binary files differnew file mode 100644 index 000000000..2b2907b60 --- /dev/null +++ b/samples/ApiDemos/res/drawable-xhdpi/ic_launcher_settings.png diff --git a/samples/ApiDemos/res/layout/action_bar_settings_action_provider.xml b/samples/ApiDemos/res/layout/action_bar_settings_action_provider.xml new file mode 100644 index 000000000..dd9807b74 --- /dev/null +++ b/samples/ApiDemos/res/layout/action_bar_settings_action_provider.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_gravity="center" + android:focusable="true" + android:addStatesFromChildren="true" + android:background="?android:attr/actionBarItemBackground" + style="?android:attr/actionButtonStyle"> + + <ImageButton android:id="@+id/button" + android:background="@drawable/ic_launcher_settings" + android:layout_width="32dip" + android:layout_height="32dip" + android:layout_gravity="center" + android:scaleType="fitCenter" + android:adjustViewBounds="true" /> + +</LinearLayout> diff --git a/samples/ApiDemos/res/menu/action_bar_settings_action_provider.xml b/samples/ApiDemos/res/menu/action_bar_settings_action_provider.xml new file mode 100644 index 000000000..b72a7d136 --- /dev/null +++ b/samples/ApiDemos/res/menu/action_bar_settings_action_provider.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2011 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<menu xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:id="@+id/menu_item_action_provider_action_bar" + android:showAsAction="ifRoom" + android:title="@string/action_bar_settings" + android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"/> + + <item android:id="@+id/menu_item_action_provider_overflow" + android:showAsAction="never" + android:title="@string/action_bar_settings" + android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"/> + +</menu> diff --git a/samples/ApiDemos/res/menu/action_bar_action_provider.xml b/samples/ApiDemos/res/menu/action_bar_share_action_provider.xml index 7633f9ff5..7633f9ff5 100644 --- a/samples/ApiDemos/res/menu/action_bar_action_provider.xml +++ b/samples/ApiDemos/res/menu/action_bar_share_action_provider.xml diff --git a/samples/ApiDemos/res/values/strings.xml b/samples/ApiDemos/res/values/strings.xml index 45d47554f..5a7183c6d 100644 --- a/samples/ApiDemos/res/values/strings.xml +++ b/samples/ApiDemos/res/values/strings.xml @@ -731,7 +731,9 @@ <string name="action_bar_mechanics">App/Action Bar/Action Bar Mechanics</string> <string name="action_bar_usage">App/Action Bar/Action Bar Usage</string> <string name="action_bar_tabs">App/Action Bar/Action Bar Tabs</string> - <string name="action_bar_action_provider">App/Action Bar/Action Provider</string> + <string name="action_bar_settings_action_provider">App/Action Bar/Action Provider/Settings Action Provider</string> + <string name="action_bar_share_action_provider">App/Action Bar/Action Provider/Share Action Provider</string> + <string name="action_bar_settings_action_provider_no_handling">Handling in onOptionsItemSelected avoided</string> <string name="action_bar_search">Search</string> <string name="action_bar_add">Add</string> @@ -741,6 +743,7 @@ <string name="action_bar_sort_alpha">Alphabetically</string> <string name="action_bar_sort_size">By size</string> <string name="action_bar_share_with">Share with...</string> + <string name="action_bar_settings">Settings</string> <string name="action_bar_display_options">App/Action Bar/Display Options</string> <string name="toggle_home_as_up">DISPLAY_HOME_AS_UP</string> diff --git a/samples/ApiDemos/src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.java b/samples/ApiDemos/src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.java new file mode 100644 index 000000000..2bf7c3785 --- /dev/null +++ b/samples/ApiDemos/src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.apis.app; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.provider.Settings; +import android.view.ActionProvider; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageButton; +import android.widget.Toast; + +import com.example.android.apis.R; + +/** + * This activity demonstrates how to implement an {@link android.view.ActionProvider} + * for adding functionality to the Action Bar. In particular this demo creates an + * ActionProvider for launching the system settings and adds a menu item with that + * provider. + */ +public class ActionBarSettingsActionProviderActivity extends Activity { + + /** + * {@inheritDoc} + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean onCreateOptionsMenu(Menu menu) { + super.onCreateOptionsMenu(menu); + getMenuInflater().inflate(R.menu.action_bar_settings_action_provider, menu); + return true; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // If this callback does not handle the item click, onPerformDefaultAction + // of the ActionProvider is invoked. Hence, the provider encapsulates the + // complete functionality of the menu item. + Toast.makeText(this, R.string.action_bar_settings_action_provider_no_handling, + Toast.LENGTH_SHORT).show(); + return false; + } + + public static class SettingsActionProvider extends ActionProvider { + + /** An intent for launching the system settings. */ + private static final Intent sSettingsIntent = new Intent(Settings.ACTION_SETTINGS); + + /** Context for accessing resources. */ + private final Context mContext; + + /** + * Creates a new instance. + * + * @param context Context for accessing resources. + */ + public SettingsActionProvider(Context context) { + super(context); + mContext = context; + } + + /** + * {@inheritDoc} + */ + @Override + public View onCreateActionView() { + // Inflate the action view to be shown on the action bar. + LayoutInflater layoutInflater = LayoutInflater.from(mContext); + View view = layoutInflater.inflate(R.layout.action_bar_settings_action_provider, null); + ImageButton button = (ImageButton) view.findViewById(R.id.button); + // Attach a click listener for launching the system settings. + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mContext.startActivity(sSettingsIntent); + } + }); + return view; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean onPerformDefaultAction() { + // This is called if the host menu item placed in the overflow menu of the + // action bar is clicked and the host activity did not handle the click. + mContext.startActivity(sSettingsIntent); + return true; + } + } +} diff --git a/samples/ApiDemos/src/com/example/android/apis/app/ActionBarActionProviderActivity.java b/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.java index 2d6bfd7f4..4f37b8d81 100644 --- a/samples/ApiDemos/src/com/example/android/apis/app/ActionBarActionProviderActivity.java +++ b/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.java @@ -38,7 +38,7 @@ import java.io.InputStream; * a menu item with ShareActionProvider as its action provider. The * ShareActionProvider is responsible for managing the UI for sharing actions. */ -public class ActionBarActionProviderActivity extends Activity { +public class ActionBarShareActionProviderActivity extends Activity { private static final String SHARED_FILE_NAME = "shared.png"; @@ -51,7 +51,7 @@ public class ActionBarActionProviderActivity extends Activity { @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate your menu. - getMenuInflater().inflate(R.menu.action_bar_action_provider, menu); + getMenuInflater().inflate(R.menu.action_bar_share_action_provider, menu); // Set file with share history to the provider and set the share intent. MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar); diff --git a/samples/ApiDemos/src/com/example/android/apis/app/_index.html b/samples/ApiDemos/src/com/example/android/apis/app/_index.html index 4333d575e..9400bc9f5 100644 --- a/samples/ApiDemos/src/com/example/android/apis/app/_index.html +++ b/samples/ApiDemos/src/com/example/android/apis/app/_index.html @@ -160,10 +160,12 @@ complete example of how to switch between fragments.</dd> default Honeycomb theme includes the Action Bar by default and a menu resource is used to populate the menu data itself. If you'd like to see how these things work under the hood, see Mechanics.</dd> - <dt><a href="ActionBarActionProviderActivity.html">ActionProvider</a></dt> - <dd>Shows how to use an ActionProvider to supply a menu item with a specialized action view and - handle standard menu item clicks in one place. Demonstrated using the streamlined sharing UI - added in ICS. </dd> + <dt><a href="ActionBarActionProviderSettingsActivity.html">Settings Action Provider</a></dt> + <dd>Shows how to implement an ActionProvider for launching the system settings that supplies a + menu item with a specialized action view and handles standard menu item clicks in one place.</dd> + <dt><a href="ActionBarShareActionProviderActivity.html">Share Action Provider</a></dt> + <dd>Shows how to use a ShareActionProvider to embed sharing functionality in your application + via the streamlined sharing UI added in ICS. </dd> <dt><a href="ActionBarDisplayOptions.html">Display Options</a></dt> <dd>Shows how various Action Bar display option flags can be combined and their effects.</dd> </dl> |
