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