14f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal/*******************************************************************************
24f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      Copyright (C) 2011 Google Inc.
34f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      Licensed to The Android Open Source Project.
4fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira *
54f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      Licensed under the Apache License, Version 2.0 (the "License");
64f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      you may not use this file except in compliance with the License.
74f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      You may obtain a copy of the License at
8fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira *
94f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *           http://www.apache.org/licenses/LICENSE-2.0
10fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira *
114f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      Unless required by applicable law or agreed to in writing, software
124f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      distributed under the License is distributed on an "AS IS" BASIS,
134f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
144f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      See the License for the specific language governing permissions and
154f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *      limitations under the License.
164f9a4c5ccb1370f583639e763b1c529fe6762271Vikram Aggarwal *******************************************************************************/
1796b5c357860f46a7bd5f867774a53d5cc5069defMindy Pereirapackage com.android.mail.ui;
18fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira
197ad3b8756b39674b293a8fc821623c9b92990811Mindy Pereiraimport android.content.Context;
20d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereiraimport android.os.Parcel;
21d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereiraimport android.os.Parcelable;
222bc8bc1f69faacaddab41ab61e1d2e8658f4181fAndy Huang
232bc8bc1f69faacaddab41ab61e1d2e8658f4181fAndy Huangimport com.android.mail.R;
242bc8bc1f69faacaddab41ab61e1d2e8658f4181fAndy Huangimport com.android.mail.providers.Folder;
25fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira
26fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira/**
2730fd47bf1947da5ad813cb957b6cbe569dce563aMindy Pereira * A simple holder class that stores the information to undo the application of a folder.
28fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira */
29f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sappersteinpublic class ToastBarOperation implements Parcelable,
30f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein        ActionableToastBar.ActionClickedListener {
31d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    public static final int UNDO = 0;
32d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    public static final int ERROR = 1;
33d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal    private final int mAction;
34d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal    private final int mCount;
351c3cac4cca3aac6a06f1120ea1a5919bcdd8200cAndrew Sapperstein    private final boolean mBatch;
36d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    private final int mType;
376a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy    private final Folder mFolder;
38fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira
39fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira    /**
40d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira     * Create a ToastBarOperation
417ad3b8756b39674b293a8fc821623c9b92990811Mindy Pereira     *
42d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira     * @param count Number of conversations this action would be applied to.
436a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy     * @param menuId res id identifying the menu item tapped; used to determine what action was
446a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy     *        performed
456a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy     * @param operationFolder The {@link Folder} upon which the operation was run. This may be
466a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy     *        <code>null</code>, but is required in {@link #getDescription(Context)} for certain
476a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy     *        actions.
48fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira     */
496a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy    public ToastBarOperation(int count, int menuId, int type, boolean batch,
506a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy            final Folder operationFolder) {
511c3cac4cca3aac6a06f1120ea1a5919bcdd8200cAndrew Sapperstein        mCount = count;
521c3cac4cca3aac6a06f1120ea1a5919bcdd8200cAndrew Sapperstein        mAction = menuId;
53a59283a9856b9356b058575e89dfe3f17fffa529mindyp        mBatch = batch;
54d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        mType = type;
556a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy        mFolder = operationFolder;
56d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    }
57d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira
58d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    public int getType() {
59d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        return mType;
600963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira    }
610963ef8394e1f0bca3f931f930b127b00790361aMindy Pereira
621c3cac4cca3aac6a06f1120ea1a5919bcdd8200cAndrew Sapperstein    public boolean isBatchUndo() {
631c3cac4cca3aac6a06f1120ea1a5919bcdd8200cAndrew Sapperstein        return mBatch;
64fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira    }
65fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira
666a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy    public ToastBarOperation(final Parcel in, final ClassLoader loader) {
67d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        mCount = in.readInt();
68d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        mAction = in.readInt();
69d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        mBatch = in.readInt() != 0;
70d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        mType = in.readInt();
716a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy        mFolder = in.readParcelable(loader);
72d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    }
73d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira
74d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    @Override
75c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang    public String toString() {
76c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        final StringBuilder sb = new StringBuilder("{");
77c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(super.toString());
78c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(" mAction=");
79c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(mAction);
80c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(" mCount=");
81c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(mCount);
82c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(" mBatch=");
83c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(mBatch);
84c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(" mType=");
85c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(mType);
86c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(" mFolder=");
87c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append(mFolder);
88c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        sb.append("}");
89c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang        return sb.toString();
90c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang    }
91c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang
92c1922a93fb9540d4ff8c28a30d1ae58d3a3d73f9Andy Huang    @Override
93d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    public void writeToParcel(Parcel dest, int flags) {
94d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        dest.writeInt(mCount);
95d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        dest.writeInt(mAction);
96d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        dest.writeInt(mBatch ? 1 : 0);
97d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        dest.writeInt(mType);
986a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy        dest.writeParcelable(mFolder, 0);
99d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    }
100d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira
1016a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy    public static final ClassLoaderCreator<ToastBarOperation> CREATOR =
1026a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy            new ClassLoaderCreator<ToastBarOperation>() {
1037747d15a9ca0be42e1c69b3b6c442c08ba37171fMindy Pereira        @Override
1046a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy        public ToastBarOperation createFromParcel(final Parcel source) {
1056a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy            return createFromParcel(source, null);
1067747d15a9ca0be42e1c69b3b6c442c08ba37171fMindy Pereira        }
1077747d15a9ca0be42e1c69b3b6c442c08ba37171fMindy Pereira
1087747d15a9ca0be42e1c69b3b6c442c08ba37171fMindy Pereira        @Override
1096a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy        public ToastBarOperation[] newArray(final int size) {
1107747d15a9ca0be42e1c69b3b6c442c08ba37171fMindy Pereira            return new ToastBarOperation[size];
1117747d15a9ca0be42e1c69b3b6c442c08ba37171fMindy Pereira        }
1126a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy
1136a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy        @Override
1146a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy        public ToastBarOperation createFromParcel(final Parcel source, final ClassLoader loader) {
1156a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy            return new ToastBarOperation(source, loader);
1166a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy        }
1177747d15a9ca0be42e1c69b3b6c442c08ba37171fMindy Pereira    };
1187747d15a9ca0be42e1c69b3b6c442c08ba37171fMindy Pereira
119fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira    /**
120d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira     * Get a string description of the operation that will be performed
1217ad3b8756b39674b293a8fc821623c9b92990811Mindy Pereira     * when the user taps the undo bar.
122fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira     */
1236a3d5ce0b18f58fcfa1af0315dc8ddc7331c2c5fScott Kennedy    public String getDescription(Context context) {
1242b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        final int resId;
1252b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        if (mAction == R.id.delete) {
1262b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.plurals.conversation_deleted;
1272b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.remove_folder) {
1282b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            return context.getString(R.string.folder_removed, mFolder.name);
1296c570db71b8adc43d7dc2f31e6fa63cf50c1426eAndrew Sapperstein        } else if (mAction == R.id.change_folders) {
1302b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.plurals.conversation_folder_changed;
1312b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.move_folder) {
1322b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            return context.getString(R.string.conversation_folder_moved, mFolder.name);
1332b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.archive) {
1342b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.plurals.conversation_archived;
1352b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.report_spam) {
1362b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.plurals.conversation_spammed;
1372b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.mark_not_spam) {
1382b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.plurals.conversation_not_spam;
1392b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.mark_not_important) {
1402b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.plurals.conversation_not_important;
1412b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.mute) {
1422b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.plurals.conversation_muted;
1432b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.remove_star) {
1442b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.plurals.conversation_unstarred;
1452b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.report_phishing) {
1462b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.plurals.conversation_phished;
1472b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else {
1482b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = -1;
1497ad3b8756b39674b293a8fc821623c9b92990811Mindy Pereira        }
150d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal        final String desc = (resId == -1) ? "" :
151d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal                String.format(context.getResources().getQuantityString(resId, mCount), mCount);
1527ad3b8756b39674b293a8fc821623c9b92990811Mindy Pereira        return desc;
153fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira    }
154d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira
155bcd784c09f649785a3dda1d6d9a6d5f58ba41770Mindy Pereira    public String getSingularDescription(Context context, Folder folder) {
15601f30509c4c8ad0d13b7635447b7f023c7a0cab7Mindy Pereira        if (mAction == R.id.remove_folder) {
157bcd784c09f649785a3dda1d6d9a6d5f58ba41770Mindy Pereira            return context.getString(R.string.folder_removed, folder.name);
158bcd784c09f649785a3dda1d6d9a6d5f58ba41770Mindy Pereira        }
1592b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        final int resId;
1602b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        if (mAction ==  R.id.delete) {
1612b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.string.deleted;
1622b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else if (mAction == R.id.archive) {
1632b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = R.string.archived;
1642b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy        } else {
1652b9d80eb16156173f11a02eae4f770d8c975927cScott Kennedy            resId = -1;
166350acdc75af67425aa3f8b6e4f889d4828ce8705Mindy Pereira        }
167bcd784c09f649785a3dda1d6d9a6d5f58ba41770Mindy Pereira        return (resId == -1) ? "" : context.getString(resId);
168350acdc75af67425aa3f8b6e4f889d4828ce8705Mindy Pereira    }
169350acdc75af67425aa3f8b6e4f889d4828ce8705Mindy Pereira
170d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    @Override
171d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    public int describeContents() {
172d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira        return 0;
173d3367499e56116854ed637b1036fd71057ac0f49Mindy Pereira    }
174f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein
175f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein    /**
176f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein     * Returns true if this object should take precedence
177f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein     * when the {@link ActionableToastBar}'s action button is clicked.
178f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein     * If <code>true</code>, the listener passed in {@link ActionableToastBar#show}
179f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein     * will not be used. The default implementation returns false. Derived
180f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein     * classes should override if this behavior is desired.
181f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein     */
182f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein    public boolean shouldTakeOnActionClickedPrecedence() {
183f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein        return false;
184f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein    }
185f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein
186f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein    @Override
187f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein    public void onActionClicked(Context context) {
188f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein        // DO NOTHING
189f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein    }
190f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein
191f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein    public void onToastBarTimeout(Context context) {
192f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein        // DO NOTHING
193f8ccdcfc26f362d9c20771e2295a0c0e8d1195f3Andrew Sapperstein    }
194fdd984b69cabc5951eec269a23d42898ea70360fMindy Pereira}
195