• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 Google Inc.
3  * Licensed to The Android Open Source Project.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package com.android.mail.ui;
19 
20 import com.android.mail.providers.Folder;
21 import com.google.common.base.Objects;
22 import com.google.common.collect.ImmutableList;
23 
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.Collections;
27 import java.util.HashSet;
28 
29 public class FolderOperation {
30     /** An immutable, empty conversation list */
31     public static final Collection<FolderOperation> EMPTY = Collections.emptyList();
32     public Folder mFolder;
33     public boolean mAdd;
34 
FolderOperation(Folder folder, Boolean operation)35     public FolderOperation(Folder folder, Boolean operation) {
36         mAdd = operation;
37         mFolder = folder;
38     }
39 
40     /**
41      * Get all the unique folders associated with a set of folder operations.
42      * @param ops
43      * @return
44      */
getFolders(Collection<FolderOperation> ops)45     public final static ArrayList<Folder> getFolders(Collection<FolderOperation> ops) {
46         HashSet<Folder> folders = new HashSet<Folder>();
47         for (FolderOperation op : ops) {
48             folders.add(op.mFolder);
49         }
50         return new ArrayList<Folder>(folders);
51     }
52 
53     /**
54      * Returns a collection of a single FolderOperation. This method always
55      * returns a valid collection even if the input folder is null.
56      *
57      * @param in a FolderOperation, possibly null.
58      * @return a collection of the folder.
59      */
listOf(FolderOperation in)60     public static Collection<FolderOperation> listOf(FolderOperation in) {
61         final Collection<FolderOperation> target = (in == null) ? EMPTY : ImmutableList.of(in);
62         return target;
63     }
64 
65     /**
66      * Return if a set of folder operations removes the specified folder or adds
67      * inbox to a trashed conversation, making it a destructive operation.
68      */
isDestructive(Collection<FolderOperation> folderOps, Folder folder)69     public static boolean isDestructive(Collection<FolderOperation> folderOps, Folder folder) {
70         for (FolderOperation op : folderOps) {
71             if (Objects.equal(op.mFolder, folder) && !op.mAdd) {
72                 return true;
73             }
74             if (folder.isTrash() && op.mFolder.isInbox()) {
75                 return true;
76             }
77         }
78         return false;
79     }
80 }
81