content: /*
  * Copyright 2013 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.batchstepsensor;
  
  import android.os.Bundle;
  import android.support.v4.app.FragmentManager;
  import android.support.v4.app.FragmentTransaction;
  import android.view.Menu;
  
  import com.example.android.common.activities.SampleActivityBase;
  import com.example.android.common.logger.Log;
  
  import com.example.android.batchstepsensor.cardstream.CardStream;
  import com.example.android.batchstepsensor.cardstream.CardStreamFragment;
  import com.example.android.batchstepsensor.cardstream.CardStreamState;
  import com.example.android.batchstepsensor.cardstream.OnCardClickListener;
  import com.example.android.batchstepsensor.cardstream.StreamRetentionFragment;
  
  public class MainActivity extends SampleActivityBase implements CardStream {
      public static final String TAG = "MainActivity";
      public static final String FRAGTAG = "BatchStepSensorFragment";
  
      private CardStreamFragment mCardStreamFragment;
  
      private StreamRetentionFragment mRetentionFragment;
      private static final String RETENTION_TAG = "retention";
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          FragmentManager fm = getSupportFragmentManager();
          BatchStepSensorFragment fragment =
                  (BatchStepSensorFragment) fm.findFragmentByTag(FRAGTAG);
  
          if (fragment == null) {
              FragmentTransaction transaction = fm.beginTransaction();
              fragment = new BatchStepSensorFragment();
              transaction.add(fragment, FRAGTAG);
              transaction.commit();
          }
  
          // Use fragment as click listener for cards, but must implement correct interface
          if (!(fragment instanceof OnCardClickListener)){
              throw new ClassCastException("BatchStepSensorFragment must " +
                      "implement OnCardClickListener interface.");
          }
          OnCardClickListener clickListener = (OnCardClickListener) fm.findFragmentByTag(FRAGTAG);
  
          mRetentionFragment = (StreamRetentionFragment) fm.findFragmentByTag(RETENTION_TAG);
          if (mRetentionFragment == null) {
              mRetentionFragment = new StreamRetentionFragment();
              fm.beginTransaction().add(mRetentionFragment, RETENTION_TAG).commit();
          } else {
              // If the retention fragment already existed, we need to pull some state.
              // pull state out
              CardStreamState state = mRetentionFragment.getCardStream();
  
              // dump it in CardStreamFragment.
              mCardStreamFragment =
                      (CardStreamFragment) fm.findFragmentById(R.id.fragment_cardstream);
              mCardStreamFragment.restoreState(state, clickListener);
          }
      }
  
      public CardStreamFragment getCardStream() {
          if (mCardStreamFragment == null) {
              mCardStreamFragment = (CardStreamFragment)
                      getSupportFragmentManager().findFragmentById(R.id.fragment_cardstream);
          }
          return mCardStreamFragment;
      }
  
      @Override
      protected void onSaveInstanceState(Bundle outState) {
          super.onSaveInstanceState(outState);
          CardStreamState state = getCardStream().dumpState();
          mRetentionFragment.storeCardStream(state);
      }
  }
  