Program: 33993
Project: 33993
Buggy source:
/** 
 * Add all camera views to the main grid page
 * @param reloadImages   reload camera images or not
 * @param showThumbnails show thumbnails that returned by Evercam or not, if trueand if thumbnail not available, it will request latest snapshot instead. If false, it will request neither thumbnail nor latest snapshot.
 */
public void addAllCameraViews(final boolean reloadImages,final boolean showThumbnails){
  camerasPerRow=recalculateCameraPerRow();
  io.evercam.androidapp.custom.FlowLayout camsLineView=(io.evercam.androidapp.custom.FlowLayout)this.findViewById(R.id.cameras_flow_layout);
  int screen_width=readScreenWidth(this);
  int index=0;
  if (AppData.evercamCameraList.size() <= 1 && showThumbnails)   showShowcaseViewForFirstTimeUser();
  for (  final EvercamCamera evercamCamera : AppData.evercamCameraList) {
    if (!PrefsManager.showOfflineCameras(this) && !evercamCamera.isActive()) {
      continue;
    }
    final LinearLayout cameraListLayout=new LinearLayout(this);
    int indexPlus=index + 1;
    if (reloadImages)     evercamCamera.loadingStatus=ImageLoadingStatus.not_started;
    final CameraLayout cameraLayout=new CameraLayout(this,evercamCamera,showThumbnails);
    LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
    params.width=((indexPlus % camerasPerRow == 0) ? (screen_width - (index % camerasPerRow) * (screen_width / camerasPerRow)) : screen_width / camerasPerRow);
    params.width=params.width - 1;
    params.height=(int)(params.width / (1.25));
    params.setMargins(0,0,0,0);
    cameraLayout.setLayoutParams(params);
    cameraListLayout.addView(cameraLayout);
    camsLineView.addView(cameraListLayout,new io.evercam.androidapp.custom.FlowLayout.LayoutParams(0,0));
    index++;
    new Handler().postDelayed(new Runnable(){
      @Override public void run(){
        Rect cameraBounds=new Rect();
        cameraListLayout.getHitRect(cameraBounds);
        Rect offlineIconBounds=cameraLayout.getOfflineIconBounds();
        int layoutWidth=cameraBounds.right - cameraBounds.left;
        int offlineStartsAt=offlineIconBounds.left;
        int offlineIconWidth=offlineIconBounds.right - offlineIconBounds.left;
        if (layoutWidth > offlineStartsAt + offlineIconWidth * 2) {
          cameraLayout.showOfflineIconAsFloat=false;
        }
 else {
          cameraLayout.showOfflineIconAsFloat=true;
        }
      }
    }
,200);
  }
  if (refresh != null)   refresh.setActionView(null);
}

Fixed version (ground truth):
/** 
 * Add all camera views to the main grid page
 * @param reloadImages   reload camera images or not
 * @param showThumbnails show thumbnails that returned by Evercam or not, if trueand if thumbnail not available, it will request latest snapshot instead. If false, it will request neither thumbnail nor latest snapshot.
 */
public void addAllCameraViews(final boolean reloadImages,final boolean showThumbnails){
  camerasPerRow=recalculateCameraPerRow();
  io.evercam.androidapp.custom.FlowLayout camsLineView=(io.evercam.androidapp.custom.FlowLayout)this.findViewById(R.id.cameras_flow_layout);
  int screen_width=readScreenWidth(this);
  int index=0;
  for (  final EvercamCamera evercamCamera : AppData.evercamCameraList) {
    if (!PrefsManager.showOfflineCameras(this) && !evercamCamera.isActive()) {
      continue;
    }
    final LinearLayout cameraListLayout=new LinearLayout(this);
    int indexPlus=index + 1;
    if (reloadImages)     evercamCamera.loadingStatus=ImageLoadingStatus.not_started;
    final CameraLayout cameraLayout=new CameraLayout(this,evercamCamera,showThumbnails);
    LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
    params.width=((indexPlus % camerasPerRow == 0) ? (screen_width - (index % camerasPerRow) * (screen_width / camerasPerRow)) : screen_width / camerasPerRow);
    params.width=params.width - 1;
    params.height=(int)(params.width / (1.25));
    params.setMargins(0,0,0,0);
    cameraLayout.setLayoutParams(params);
    cameraListLayout.addView(cameraLayout);
    camsLineView.addView(cameraListLayout,new io.evercam.androidapp.custom.FlowLayout.LayoutParams(0,0));
    index++;
    new Handler().postDelayed(new Runnable(){
      @Override public void run(){
        Rect cameraBounds=new Rect();
        cameraListLayout.getHitRect(cameraBounds);
        Rect offlineIconBounds=cameraLayout.getOfflineIconBounds();
        int layoutWidth=cameraBounds.right - cameraBounds.left;
        int offlineStartsAt=offlineIconBounds.left;
        int offlineIconWidth=offlineIconBounds.right - offlineIconBounds.left;
        if (layoutWidth > offlineStartsAt + offlineIconWidth * 2) {
          cameraLayout.showOfflineIconAsFloat=false;
        }
 else {
          cameraLayout.showOfflineIconAsFloat=true;
        }
      }
    }
,200);
  }
  if (AppData.evercamCameraList.size() <= 1 && showThumbnails)   showShowcaseViewForFirstTimeUser();
  if (refresh != null)   refresh.setActionView(null);
}