content: /*
   * Copyright (C) 2006 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.android.internal.view.menu;
  
  import android.annotation.UnsupportedAppUsage;
  import android.content.Context;
  import android.graphics.drawable.Drawable;
  import android.os.IBinder;
  import android.util.EventLog;
  import android.view.ContextMenu;
  import android.view.View;
  
  /**
   * Implementation of the {@link android.view.ContextMenu} interface.
   * <p>
   * Most clients of the menu framework will never need to touch this
   * class.  However, if the client has a window that
   * is not a content view of a Dialog or Activity (for example, the
   * view was added directly to the window manager) and needs to show
   * context menus, it will use this class.
   * <p>
   * To use this class, instantiate it via {@link #ContextMenuBuilder(Context)},
   * and optionally populate it with any of your custom items.  Finally,
   * call {@link #showDialog(View, IBinder)} which will populate the menu
   * with a view's context menu items and show the context menu.
   */
  public class ContextMenuBuilder extends MenuBuilder implements ContextMenu {
      
      @UnsupportedAppUsage
      public ContextMenuBuilder(Context context) {
          super(context);
      }
  
      public ContextMenu setHeaderIcon(Drawable icon) {
          return (ContextMenu) super.setHeaderIconInt(icon);
      }
  
      public ContextMenu setHeaderIcon(int iconRes) {
          return (ContextMenu) super.setHeaderIconInt(iconRes);
      }
  
      public ContextMenu setHeaderTitle(CharSequence title) {
          return (ContextMenu) super.setHeaderTitleInt(title);
      }
  
      public ContextMenu setHeaderTitle(int titleRes) {
          return (ContextMenu) super.setHeaderTitleInt(titleRes);
      }
  
      public ContextMenu setHeaderView(View view) {
          return (ContextMenu) super.setHeaderViewInt(view);
      }
  
      /**
       * Shows this context menu, allowing the optional original view (and its
       * ancestors) to add items.
       * 
       * @param originalView Optional, the original view that triggered the
       *        context menu.
       * @param token Optional, the window token that should be set on the context
       *        menu's window.
       * @return If the context menu was shown, the {@link MenuDialogHelper} for
       *         dismissing it. Otherwise, null.
       */
      public MenuDialogHelper showDialog(View originalView, IBinder token) {
          if (originalView != null) {
              // Let relevant views and their populate context listeners populate
              // the context menu
              originalView.createContextMenu(this);
          }
  
          if (getVisibleItems().size() > 0) {
              EventLog.writeEvent(50001, 1);
              
              MenuDialogHelper helper = new MenuDialogHelper(this); 
              helper.show(token);
              
              return helper;
          }
          
          return null;
      }
      
      public MenuPopupHelper showPopup(Context context, View originalView, float x, float y) {
          if (originalView != null) {
              // Let relevant views and their populate context listeners populate
              // the context menu
              originalView.createContextMenu(this);
          }
  
          if (getVisibleItems().size() > 0) {
              EventLog.writeEvent(50001, 1);
  
              int location[] = new int[2];
              originalView.getLocationOnScreen(location);
  
              final MenuPopupHelper helper = new MenuPopupHelper(
                      context,
                      this,
                      originalView,
                      false /* overflowOnly */,
                      com.android.internal.R.attr.contextPopupMenuStyle);
              helper.show(Math.round(x), Math.round(y));
              return helper;
          }
  
          return null;
      }
  }
  