• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.emailcommon;
18 
19 import android.content.Context;
20 
21 import com.android.emailcommon.provider.Account;
22 
23 /**
24  * Constants for tagging threads for traffic stats, and associated utilities
25  *
26  * Example usage:
27  *  TrafficStats.setThreadStatsTag(accountId | DATA_EMAIL | REASON_SYNC);
28  */
29 public class TrafficFlags {
30     // Bits 0->15, account id
31     private static final int ACCOUNT_MASK = 0x0000FFFF;
32 
33     // Bits 18&19, type (0 = EMAIL)
34     private static final int DATA_SHIFT = 18;
35     private static final int DATA_MASK = 3 << DATA_SHIFT;
36     public static final int DATA_EMAIL = 0 << DATA_SHIFT;
37     public static final int DATA_CONTACTS = 1 << DATA_SHIFT;
38     public static final int DATA_CALENDAR = 2 << DATA_SHIFT;
39 
40     // Bits 20&21, reason (if protocol != SMTP)
41     private static final int REASON_SHIFT = 20;
42     private static final int REASON_MASK = 3 << REASON_SHIFT;
43     public static final int REASON_SYNC = 0 << REASON_SHIFT;
44     public static final int REASON_ATTACHMENT_USER = 1 << REASON_SHIFT;
45     // Note: We don't yet use the PRECACHE reason (it's complicated...)
46     public static final int REASON_ATTACHMENT_PRECACHE = 2 << REASON_SHIFT;
47     private static final String[] REASONS = new String[] {"sync", "attachment", "precache"};
48 
49     /**
50      * Get flags indicating sync of the passed-in account; note that, by default, these flags
51      * indicate an email sync; to change the type of sync, simply "or" in DATA_CONTACTS or
52      * DATA_CALENDAR (since DATA_EMAIL = 0)
53      *
54      * @param context the caller's context
55      * @param account the account being used
56      * @return flags for syncing this account
57      */
getSyncFlags(Context context, Account account)58     public static int getSyncFlags(Context context, Account account) {
59         return (int)account.mId | REASON_SYNC;
60     }
61 
62     /**
63      * Get flags indicating attachment loading from the passed-in account
64      *
65      * @param context the caller's context
66      * @param account the account being used
67      * @return flags for loading an attachment in this account
68      */
getAttachmentFlags(Context context, Account account)69     public static int getAttachmentFlags(Context context, Account account) {
70         return (int)account.mId | REASON_ATTACHMENT_USER;
71     }
72 
73     /**
74      * Get flags indicating sending SMTP email from the passed-in account
75      *
76      * @param context the caller's context
77      * @param account the account being used
78      * @return flags for sending SMTP email from this account
79      */
getSmtpFlags(Context context, Account account)80     public static int getSmtpFlags(Context context, Account account) {
81         return (int)account.mId | REASON_SYNC;
82     }
83 
toString(int flags)84     public static String toString(int flags) {
85         StringBuilder sb = new StringBuilder();
86         sb.append("account ");
87         sb.append(flags & ACCOUNT_MASK);
88         sb.append(',');
89         sb.append(REASONS[(flags & REASON_MASK) >> REASON_SHIFT]);
90         int maskedData = flags & DATA_MASK;
91         if (maskedData != 0) {
92             sb.append(',');
93             sb.append(maskedData == DATA_CALENDAR ? "calendar" : "contacts");
94         }
95         return sb.toString();
96     }
97 }
98