/** This method is called when user taps "Start/Stop shopping" button */
  public void toggleShopping(View view) {
    /** Create map and fill it in with deep path multi write operations list */
    HashMap<String, Object> updatedUserData = new HashMap<String, Object>();
    String propertyToUpdate = Constants.FIREBASE_PROPERTY_USERS_SHOPPING + "/" + mEncodedEmail;

    /** If current user is already shopping, remove current user from usersShopping map */
    if (mShopping) {

      /* Add the value to update at the specified property for all lists */
      Utils.updateMapForAllWithValue(
          mSharedWithUsers,
          mListId,
          mShoppingList.getOwner(),
          updatedUserData,
          propertyToUpdate,
          null);

      /* Appends the timestamp changes for all lists */
      Utils.updateMapWithTimestampLastChanged(
          mSharedWithUsers, mListId, mShoppingList.getOwner(), updatedUserData);

      /* Do a deep-path update */
      mFirebaseRef.updateChildren(
          updatedUserData,
          new Firebase.CompletionListener() {
            @Override
            public void onComplete(FirebaseError firebaseError, Firebase firebase) {
              /* Updates the reversed timestamp */
              Utils.updateTimestampReversed(
                  firebaseError, LOG_TAG, mListId, mSharedWithUsers, mShoppingList.getOwner());
            }
          });
    } else {
      /**
       * If current user is not shopping, create map to represent User model add to usersShopping
       * map
       */
      HashMap<String, Object> currentUser =
          (HashMap<String, Object>) new ObjectMapper().convertValue(mCurrentUser, Map.class);

      /* Add the value to update at the specified property for all lists */
      Utils.updateMapForAllWithValue(
          mSharedWithUsers,
          mListId,
          mShoppingList.getOwner(),
          updatedUserData,
          propertyToUpdate,
          currentUser);

      /* Appends the timestamp changes for all lists */
      Utils.updateMapWithTimestampLastChanged(
          mSharedWithUsers, mListId, mShoppingList.getOwner(), updatedUserData);

      /* Do a deep-path update */
      mFirebaseRef.updateChildren(
          updatedUserData,
          new Firebase.CompletionListener() {
            @Override
            public void onComplete(FirebaseError firebaseError, Firebase firebase) {
              /* Updates the reversed timestamp */
              Utils.updateTimestampReversed(
                  firebaseError, LOG_TAG, mListId, mSharedWithUsers, mShoppingList.getOwner());
            }
          });
    }
  }
 /** Return true if currentUserEmail equals to shoppingList.owner() Return false otherwise */
 public static boolean checkIfOwner(ShoppingList shoppingList, String currentUserEmail) {
   return (shoppingList.getOwner() != null && shoppingList.getOwner().equals(currentUserEmail));
 }