/* * Copyright (C) 2012 Google Inc. * Licensed to 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.android.mail.ui; import android.os.Parcel; import android.os.Parcelable; import com.android.mail.providers.Folder; import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; public class FolderOperation implements Parcelable { /** An immutable, empty conversation list */ public static final Collection EMPTY = Collections.emptyList(); public final Folder mFolder; public final boolean mAdd; public FolderOperation(Folder folder, Boolean operation) { mAdd = operation; mFolder = folder; } /** * Get all the unique folders associated with a set of folder operations. * @param ops Operations to inspect * @return ArrayList of Folder objects */ public static ArrayList getFolders(Collection ops) { HashSet folders = new HashSet(); for (FolderOperation op : ops) { folders.add(op.mFolder); } return new ArrayList(folders); } /** * Returns a collection of a single FolderOperation. This method always * returns a valid collection even if the input folder is null. * * @param in a FolderOperation, possibly null. * @return a collection of the folder. */ public static Collection listOf(FolderOperation in) { final Collection target = (in == null) ? EMPTY : ImmutableList.of(in); return target; } /** * Return if a set of folder operations removes the specified folder or adds * inbox to a trashed conversation, making it a destructive operation. */ public static boolean isDestructive(Collection folderOps, Folder folder) { for (FolderOperation op : folderOps) { if (Objects.equal(op.mFolder, folder) && !op.mAdd) { return true; } if (folder.isTrash() && op.mFolder.isInbox()) { return true; } } return false; } // implements Parcelable FolderOperation(Parcel in) { mAdd = in.readByte() != 0; mFolder = in.readParcelable(getClass().getClassLoader()); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeByte((byte)(mAdd ? 1 : 0)); dest.writeParcelable(mFolder, 0); } public static final Creator CREATOR = new Creator() { @Override public FolderOperation createFromParcel(Parcel source) { return new FolderOperation(source); } @Override public FolderOperation[] newArray(int size) { return new FolderOperation[size]; } }; }