content: package com.alexstyl.searchtransition.searchscreen;
  
  import android.os.Bundle;
  import android.transition.Transition;
  import android.transition.TransitionManager;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.ViewTreeObserver;
  
  import com.alexstyl.searchtransition.boilerplate.BoilerplateActivity;
  import com.alexstyl.searchtransition.R;
  import com.alexstyl.searchtransition.transition.FadeInTransition;
  import com.alexstyl.searchtransition.transition.FadeOutTransition;
  import com.alexstyl.searchtransition.transition.SimpleTransitionListener;
  
  public class SearchActivity extends BoilerplateActivity {
  
      private Searchbar searchbar;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_search);
  
          searchbar = (Searchbar) findViewById(R.id.search_toolbar);
          setSupportActionBar(searchbar);
  
  
  
          // make sure to check if this is the first time running the activity
          // we don't want to play the enter animation on configuration changes (i.e. orientation)
          if (isFirstTimeRunning(savedInstanceState)) {
              // Start with an empty looking Toolbar
              // We are going to fade its contents in, as long as the activity finishes rendering
              searchbar.hideContent();
  
              ViewTreeObserver viewTreeObserver = searchbar.getViewTreeObserver();
              viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                  @Override
                  public void onGlobalLayout() {
                      searchbar.getViewTreeObserver().removeOnGlobalLayoutListener(this);
  
                      // after the activity has finished drawing the initial layout, we are going to continue the animation
                      // that we left off from the MainActivity
                      showSearch();
                  }
  
                  private void showSearch() {
                      // use the TransitionManager to animate the changes of the Toolbar
                      TransitionManager.beginDelayedTransition(searchbar, FadeInTransition.createTransition());
                      // here we are just changing all children to VISIBLE
                      searchbar.showContent();
                  }
              });
          }
      }
  
      private boolean isFirstTimeRunning(Bundle savedInstanceState) {
          return savedInstanceState == null;
      }
  
      @Override
      public void finish() {
          // when the user tries to finish the activity we have to animate the exit
          // let's start by hiding the keyboard so that the exit seems smooth
          hideKeyboard();
  
          // at the same time, start the exit transition
          exitTransitionWithAction(new Runnable() {
              @Override
              public void run() {
                  // which finishes the activity (for real) when done
                  SearchActivity.super.finish();
  
                  // override the system pending transition as we are handling ourselves
                  overridePendingTransition(0, 0);
              }
          });
      }
  
      private void exitTransitionWithAction(final Runnable endingAction) {
  
          Transition transition = FadeOutTransition.withAction(new SimpleTransitionListener() {
              @Override
              public void onTransitionEnd(Transition transition) {
                  endingAction.run();
              }
          });
  
          TransitionManager.beginDelayedTransition(searchbar, transition);
          searchbar.hideContent();
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.menu_search, menu);
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          if (item.getItemId() == android.R.id.home) {
              finish();
              return true;
          } else if (item.getItemId() == R.id.action_clear) {
              searchbar.clearText();
              return true;
          }
          return super.onOptionsItemSelected(item);
      }
  
  }
  