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 @@ - + + + + + + + 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:

Update: The following are some of the new demos for Android 4.0:

  • SwitchPreference
  • +href="src/com/example/android/apis/preference/PreferencesFromCode.html">Switch Preference
  • ShareActionProvider +href="src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.html">Settings Action Provider +
  • +
  • Share Action Provider
  • Collapsible action view
  • diff --git a/samples/ApiDemos/res/drawable-hdpi/ic_launcher_settings.png b/samples/ApiDemos/res/drawable-hdpi/ic_launcher_settings.png new file mode 100644 index 000000000..c02bd424f Binary files /dev/null and b/samples/ApiDemos/res/drawable-hdpi/ic_launcher_settings.png differ diff --git a/samples/ApiDemos/res/drawable-mdpi/ic_launcher_settings.png b/samples/ApiDemos/res/drawable-mdpi/ic_launcher_settings.png new file mode 100644 index 000000000..05cdd9aa9 Binary files /dev/null and b/samples/ApiDemos/res/drawable-mdpi/ic_launcher_settings.png differ diff --git a/samples/ApiDemos/res/drawable-xhdpi/ic_launcher_settings.png b/samples/ApiDemos/res/drawable-xhdpi/ic_launcher_settings.png new file mode 100644 index 000000000..2b2907b60 Binary files /dev/null and b/samples/ApiDemos/res/drawable-xhdpi/ic_launcher_settings.png differ 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 @@ + + + + + + + + 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 @@ + + + + + + + + + diff --git a/samples/ApiDemos/res/menu/action_bar_action_provider.xml b/samples/ApiDemos/res/menu/action_bar_share_action_provider.xml similarity index 100% rename from samples/ApiDemos/res/menu/action_bar_action_provider.xml rename to 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 @@ App/Action Bar/Action Bar Mechanics App/Action Bar/Action Bar Usage App/Action Bar/Action Bar Tabs - App/Action Bar/Action Provider + App/Action Bar/Action Provider/Settings Action Provider + App/Action Bar/Action Provider/Share Action Provider + Handling in onOptionsItemSelected avoided Search Add @@ -741,6 +743,7 @@ Alphabetically By size Share with... + Settings App/Action Bar/Display Options DISPLAY_HOME_AS_UP 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 similarity index 96% rename from samples/ApiDemos/src/com/example/android/apis/app/ActionBarActionProviderActivity.java rename to 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. 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. -
    ActionProvider
    -
    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.
    +
    Settings Action Provider
    +
    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.
    +
    Share Action Provider
    +
    Shows how to use a ShareActionProvider to embed sharing functionality in your application + via the streamlined sharing UI added in ICS.
    Display Options
    Shows how various Action Bar display option flags can be combined and their effects.