boolean resizeCameras() {
    try {
      int screen_width = readScreenWidth(this);
      camerasPerRow = recalculateCameraPerRow();

      io.evercam.androidapp.custom.FlowLayout camsLineView =
          (io.evercam.androidapp.custom.FlowLayout) this.findViewById(R.id.cameras_flow_layout);
      for (int i = 0; i < camsLineView.getChildCount(); i++) {
        LinearLayout pview = (LinearLayout) camsLineView.getChildAt(i);
        CameraLayout cameraLayout = (CameraLayout) pview.getChildAt(0);

        LinearLayout.LayoutParams params =
            new LinearLayout.LayoutParams(
                android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
                android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
        params.width =
            ((i + 1 % camerasPerRow == 0)
                ? (screen_width - (i % camerasPerRow) * (screen_width / camerasPerRow))
                : screen_width / camerasPerRow);
        params.width = params.width - 1; // 1 pixels spacing between cameras
        params.height = (int) (params.width / (1.25));
        params.setMargins(1, 1, 0, 0); // 1 pixels spacing between cameras
        cameraLayout.setLayoutParams(params);
      }
      return true;
    } catch (Exception e) {
      Log.e(TAG, e.toString() + "::" + Log.getStackTraceString(e));

      sendToMint(e);

      EvercamPlayApplication.sendCaughtException(this, e);
      CustomedDialog.showUnexpectedErrorDialog(CamerasActivity.this);
    }
    return false;
  }
 // Stop All Camera Views
 public void stopAllCameraViews() {
   io.evercam.androidapp.custom.FlowLayout camsLineView =
       (io.evercam.androidapp.custom.FlowLayout) this.findViewById(R.id.cameras_flow_layout);
   for (int count = 0; count < camsLineView.getChildCount(); count++) {
     LinearLayout linearLayout = (LinearLayout) camsLineView.getChildAt(count);
     CameraLayout cameraLayout = (CameraLayout) linearLayout.getChildAt(0);
     cameraLayout.stopAllActivity();
   }
 }
  private void updateCameraNames() {
    try {
      io.evercam.androidapp.custom.FlowLayout camsLineView =
          (io.evercam.androidapp.custom.FlowLayout) this.findViewById(R.id.cameras_flow_layout);
      for (int i = 0; i < camsLineView.getChildCount(); i++) {
        LinearLayout pview = (LinearLayout) camsLineView.getChildAt(i);
        CameraLayout cameraLayout = (CameraLayout) pview.getChildAt(0);

        cameraLayout.updateTitleIfDifferent();
      }
    } catch (Exception e) {
      Log.e(TAG, e.toString());
      EvercamPlayApplication.sendCaughtException(this, e);
    }
  }
  // Remove all the cameras so that all activities being performed can be
  // stopped
  public boolean removeAllCameraViews() {
    try {
      stopAllCameraViews();

      io.evercam.androidapp.custom.FlowLayout camsLineView =
          (io.evercam.androidapp.custom.FlowLayout) this.findViewById(R.id.cameras_flow_layout);
      camsLineView.removeAllViews();

      return true;
    } catch (Exception e) {
      Log.e(TAG, e.toString() + "::" + Log.getStackTraceString(e));

      sendToMint(e);

      EvercamPlayApplication.sendCaughtException(this, e);
      CustomedDialog.showUnexpectedErrorDialog(CamerasActivity.this);
    }
    return false;
  }
  /**
   * 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 true and if thumbnail
   *     not available, it will request latest snapshot instead. If false, it will request neither
   *     thumbnail nor latest snapshot.
   */
  public boolean addAllCameraViews(final boolean reloadImages, final boolean showThumbnails) {
    try {
      // Recalculate camera per row
      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) {
        // Don't show offline camera
        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; // 1 pixels spacing between cameras
        params.height = (int) (params.width / (1.25));
        params.setMargins(0, 0, 0, 0); // No spacing between cameras
        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);

      return true;
    } catch (Exception e) {
      Log.e(TAG, e.toString(), e);

      sendToMint(e);

      EvercamPlayApplication.sendCaughtException(this, e);
      CustomedDialog.showUnexpectedErrorDialog(CamerasActivity.this);
    }
    return false;
  }