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 android.widget;
  
  import android.content.Context;
  import android.util.AttributeSet;
  import android.view.View;
  import android.view.ViewGroup;
  
  /**
   * {@link ViewAnimator} that switches between two views, and has a factory
   * from which these views are created.  You can either use the factory to
   * create the views, or add them yourself.  A ViewSwitcher can only have two
   * child views, of which only one is shown at a time.
   */
  public class ViewSwitcher extends ViewAnimator {
      /**
       * The factory used to create the two children.
       */
      ViewFactory mFactory;
  
      /**
       * Creates a new empty ViewSwitcher.
       *
       * @param context the application's environment
       */
      public ViewSwitcher(Context context) {
          super(context);
      }
  
      /**
       * Creates a new empty ViewSwitcher for the given context and with the
       * specified set attributes.
       *
       * @param context the application environment
       * @param attrs a collection of attributes
       */
      public ViewSwitcher(Context context, AttributeSet attrs) {
          super(context, attrs);
      }
  
      /**
       * {@inheritDoc}
       *
       * @throws IllegalStateException if this switcher already contains two children
       */
      @Override
      public void addView(View child, int index, ViewGroup.LayoutParams params) {
          if (getChildCount() >= 2) {
              throw new IllegalStateException("Can't add more than 2 views to a ViewSwitcher");
          }
          super.addView(child, index, params);
      }
  
      @Override
      public CharSequence getAccessibilityClassName() {
          return ViewSwitcher.class.getName();
      }
  
      /**
       * Returns the next view to be displayed.
       *
       * @return the view that will be displayed after the next views flip.
       */
      public View getNextView() {
          int which = mWhichChild == 0 ? 1 : 0;
          return getChildAt(which);
      }
  
      private View obtainView() {
          View child = mFactory.makeView();
          LayoutParams lp = (LayoutParams) child.getLayoutParams();
          if (lp == null) {
              lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
          }
          addView(child, lp);
          return child;
      }
  
      /**
       * Sets the factory used to create the two views between which the
       * ViewSwitcher will flip. Instead of using a factory, you can call
       * {@link #addView(android.view.View, int, android.view.ViewGroup.LayoutParams)}
       * twice.
       *
       * @param factory the view factory used to generate the switcher's content
       */
      public void setFactory(ViewFactory factory) {
          mFactory = factory;
          obtainView();
          obtainView();
      }
  
      /**
       * Reset the ViewSwitcher to hide all of the existing views and to make it
       * think that the first time animation has not yet played.
       */
      public void reset() {
          mFirstTime = true;
          View v;
          v = getChildAt(0);
          if (v != null) {
              v.setVisibility(View.GONE);
          }
          v = getChildAt(1);
          if (v != null) {
              v.setVisibility(View.GONE);
          }
      }
  
      /**
       * Creates views in a ViewSwitcher.
       */
      public interface ViewFactory {
          /**
           * Creates a new {@link android.view.View} to be added in a
           * {@link android.widget.ViewSwitcher}.
           *
           * @return a {@link android.view.View}
           */
          View makeView();
      }
  }
  
  