Android Open Source - FreeFlow Free Flow Container Test






From Project

Back to project page FreeFlow.

License

The source code is released under:

Apache License

If you think the Android project FreeFlow listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*******************************************************************************
 * Copyright 2013 Comcast Cable Communications Management, LLC
 * //from w w  w . j  a  va  2  s.c o m
 * 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.comcast.freeflow.core;

import java.util.HashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import com.comcast.freeflow.helpers.DefaultSectionAdapter;
import com.comcast.freeflow.layouts.FreeFlowLayout;
import com.comcast.freeflow.layouts.VLayout;
import com.comcast.freeflow.teststub.MainActivity;

import android.app.Activity;
import android.graphics.Rect;
import android.test.ActivityInstrumentationTestCase2;
import android.view.ViewTreeObserver.OnPreDrawListener;

public class FreeFlowContainerTest extends ActivityInstrumentationTestCase2<MainActivity> {
  
  Activity main ;
  
  public FreeFlowContainerTest() {
    super(MainActivity.class);
    
  }

  protected void setUp() throws Exception {
    super.setUp();
    main = getActivity();
  }
  
  protected void tearDown() throws Exception {
    super.tearDown();
  }
  
  /**
   * Tests that changing an attached layout cannot change 
   * the internal map of the item proxies insode a container
   * 
   * @throws InterruptedException
   */
  public void testSourceCannotModifyFreeFlowContainerReferences() throws InterruptedException{
    final CountDownLatch lock = new CountDownLatch(1);
    main.runOnUiThread(new Runnable() {
      
      @Override
      public void run() {
        
        final FreeFlowContainer container = new FreeFlowContainer(main);
              
        
        final VLayout vLayout = new VLayout();
        vLayout.setLayoutParams(new VLayout.LayoutParams(300, 200, 10));
        container.setLayout(vLayout);
        
        final DefaultSectionAdapter adapter = new DefaultSectionAdapter(main, 1, 2);
        container.setAdapter(adapter);
        
        
        main.setContentView(container);  
        
        container.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
          @Override
          public boolean onPreDraw() {
            
            int frameCount = container.getFrames().size();
            adapter.setData(5, 10);
            
            // setItems will force new frames to be generated, but not set 
            vLayout.setAdapter(adapter); 
            vLayout.prepareLayout() ;
            
            //assertEquals("Layout frames did not generate as expected", 5*(10+1), vLayout.getAllProxies().size());
            assertEquals("FreeFlowContainer frames changed unexpectedly with data", frameCount, container.getFrames().size());
            
            lock.countDown();
            return false;
          }
        });
      }
    });
    lock.await(5000, TimeUnit.MILLISECONDS);
  }
  
  /**
   * Tests that all items are generated by the time predraw kicks in
   * 
   * @throws InterruptedException
   */
  public void testAllViewsAreGeneratedByFirstLayout() throws InterruptedException{
    final CountDownLatch lock = new CountDownLatch(1);
    main.runOnUiThread(new Runnable() {
      
      @Override
      public void run() {
        
        final FreeFlowContainer container = new FreeFlowContainer(main);
        
        DefaultSectionAdapter adapter = new DefaultSectionAdapter(main, 1, 2);
        container.setAdapter(adapter);
        
        VLayout vLayout = new VLayout();
        vLayout.setLayoutParams(new VLayout.LayoutParams(300, 200, 10));
        container.setLayout(vLayout);
        
        container.addFreeFlowEventListener( new FreeFlowEventListener() {
          
          @Override
          public void onLayoutChanging(FreeFlowLayout oldLayout,
              FreeFlowLayout newLayout) {
          }
          
          @Override
          public void layoutComputed() {
          }
          
          @Override
          public void layoutComplete(boolean areTransitionAnimationsPlaying) {
            assertEquals("Correct number of children were not created", 3, container.getChildCount());
          }
          
          @Override
          public void dataChanged() {
          }
          
          @Override
          public void animationsStarted() {
          }
          
          @Override
          public void layoutChangeAnimationsComplete() {
          }
        } );
        
        main.setContentView(container);  
        
        
      }
    });
    lock.await(5000, TimeUnit.MILLISECONDS);
    
  }
  
  /**
   * Tests if a view is within the viewport and is moved,
   */
  public void testViewChangesWhenViewMovesWithinViewport(){
    
    HashMap<Object, FreeFlowItem> oldMap = new HashMap<Object, FreeFlowItem>();
    HashMap<Object, FreeFlowItem> newMap = new HashMap<Object, FreeFlowItem>();
    
    
    String one = "one";
    FreeFlowItem proxy = new FreeFlowItem();
    proxy.data = one;
    proxy.frame = new Rect(0,0, 20, 20);
    oldMap.put(one, proxy);
    
    FreeFlowItem proxy2 = new FreeFlowItem();
    proxy.data = one;
    proxy.frame =  new Rect(20,20,20+40,20+40);
    newMap.put(one, proxy2);
    
    FreeFlowContainer container = new FreeFlowContainer(getActivity());
    LayoutChangeset changes = container.getViewChanges(oldMap, newMap);
    
    assertTrue(changes.getMoved().size() == 1);
    assertTrue(changes.getAdded().size() == 0);
    assertTrue(changes.getRemoved().size() == 0);
  }
  
  
//  public void testAsync(){
//    FreeFlowContainer c = new FreeFlowContainer(getActivity());
//    c.setLayoutParams(new LayoutParams(400,400));
//    
//  }
  
  
}




Java Source Code List

com.comcast.freeflow.animations.DefaultLayoutAnimator.java
com.comcast.freeflow.animations.FreeFlowLayoutAnimator.java
com.comcast.freeflow.animations.NoAnimationLayoutAnimator.java
com.comcast.freeflow.animations.interpolators.EaseInOutQuintInterpolator.java
com.comcast.freeflow.core.AbsLayoutContainer.java
com.comcast.freeflow.core.FreeFlowContainerTest.java
com.comcast.freeflow.core.FreeFlowContainer.java
com.comcast.freeflow.core.FreeFlowEventListener.java
com.comcast.freeflow.core.FreeFlowItem.java
com.comcast.freeflow.core.IndexPath.java
com.comcast.freeflow.core.LayoutChangeset.java
com.comcast.freeflow.core.Section.java
com.comcast.freeflow.core.SectionedAdapter.java
com.comcast.freeflow.core.ViewPool.java
com.comcast.freeflow.debug.BaseFreeFlowEventListener.java
com.comcast.freeflow.debug.TouchDebugUtils.java
com.comcast.freeflow.examples.artbook.AboutActivity.java
com.comcast.freeflow.examples.artbook.ArtbookActivity.java
com.comcast.freeflow.examples.artbook.data.DribbbleDataAdapter.java
com.comcast.freeflow.examples.artbook.layouts.ArtbookLayout.java
com.comcast.freeflow.examples.artbook.models.DribbbleFeed.java
com.comcast.freeflow.examples.artbook.models.DribbbleFetch.java
com.comcast.freeflow.examples.artbook.models.Player.java
com.comcast.freeflow.examples.artbook.models.Shot.java
com.comcast.freeflow.examples.freeflowphotogrid.MainActivity.java
com.comcast.freeflow.helpers.DefaultSectionAdapter.java
com.comcast.freeflow.layouts.FreeFlowLayoutBase.java
com.comcast.freeflow.layouts.FreeFlowLayout.java
com.comcast.freeflow.layouts.HGridLayout.java
com.comcast.freeflow.layouts.HLayout.java
com.comcast.freeflow.layouts.VGridLayoutTest.java
com.comcast.freeflow.layouts.VGridLayout.java
com.comcast.freeflow.layouts.VLayout.java
com.comcast.freeflow.teststub.MainActivity.java
com.comcast.freeflow.utils.MathUtils.java
com.comcast.freeflow.utils.ViewUtils.java