1761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang/******************************************************************************* 2761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * Copyright (C) 2013 Google Inc. 3761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * Licensed to The Android Open Source Project. 4761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * 5761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * Licensed under the Apache License, Version 2.0 (the "License"); 6761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * you may not use this file except in compliance with the License. 7761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * You may obtain a copy of the License at 8761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * 9761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * http://www.apache.org/licenses/LICENSE-2.0 10761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * 11761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * Unless required by applicable law or agreed to in writing, software 12761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * distributed under the License is distributed on an "AS IS" BASIS, 13761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * See the License for the specific language governing permissions and 15761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * limitations under the License. 16761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang *******************************************************************************/ 17761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 18761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huangpackage com.android.mail.analytics; 19761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 20761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huangimport android.app.Activity; 218cc0de897f4d4b5790a363684347eeae06088f45Andy Huangimport android.app.ActivityManager; 22761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 23761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang/** 24761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * Mail wrapper for analytics libraries. Libraries should implement {@link Tracker}, and app 25761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * configurations that want to enable analytics should call {@link #setTracker(Tracker)} as soon 26761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * as possible upon application start. 27761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * <p> 28761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * {@link #getInstance()} will always return an object, but if the app has not yet (or will not 29761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * ever) set its own tracker instance, method calls on that tracker will be stubbed out. 30761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang * 31761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang */ 32761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huangpublic final class Analytics { 33761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 34042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang public static final String EVENT_CATEGORY_MENU_ITEM = "menu_item"; 35761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 36cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps /** 370abdb685b601c39ae1ccffb930acac323f4aafedRégis Décamps * The email provider for this account. 38cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps */ 39cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps public static final int CD_INDEX_ACCOUNT_EMAIL_PROVIDER = 1; 40761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 41042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang public static final int CD_INDEX_ACCOUNT_COUNT = 2; 42761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 43042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang public static final int CD_INDEX_SENDER_IMAGES_ENABLED = 3; 44042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang 450e29e769c74e385342fc5dc8e9c85517771aaa34James Lemieux /** @deprecated Attachment Previews entirely removed from Conversation List */ 46042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang public static final int CD_INDEX_ATTACHMENT_PREVIEWS_ENABLED = 4; 47042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang 48042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang public static final int CD_INDEX_INBOX_TYPE = 5; 49042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang 50042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang public static final int CD_INDEX_INBOX_SECTIONS_ENABLED = 6; 51761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 524fe0af81874976a1995191321e35c844b2229811Andy Huang public static final int CD_INDEX_REPLY_ALL_SETTING = 7; 534fe0af81874976a1995191321e35c844b2229811Andy Huang 54e6c9fb6835247d98898e2af581ad9449ad7f3184Andy Huang public static final int CD_INDEX_AUTO_ADVANCE = 8; 55e6c9fb6835247d98898e2af581ad9449ad7f3184Andy Huang 56cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps /** 572168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * Custom dimension in analytics to describe if the user already interacted with the app. 582168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * The value is one of 592168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * <ul> 602168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * <li>{@link #CD_VALUE_USER_RETENTION_TYPE_NEW},</li> 612168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * <li>{@link #CD_VALUE_USER_RETENTION_TYPE_UPGRADING} or</li> 622168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * <li>{@link @CD_VALUE_USER_RETENTION_TYPE_RETURNING}</li> 632168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * </ul> 64cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps */ 65cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps public static final int CD_INDEX_USER_RETENTION_TYPE = 9; 66cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps 67cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps /** 682168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * Value for {@link #CD_INDEX_USER_RETENTION_TYPE} meaning that the user has never used the 69cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps * Mail app anywhere before. 70cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps */ 71cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps public static final String CD_VALUE_USER_RETENTION_TYPE_NEW = "new"; 72cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps /** 732168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * Value for {@link #CD_INDEX_USER_RETENTION_TYPE} meaning that the user has used an older 74cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps * version of the Mail app before. 75cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps */ 76cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps public static final String CD_VALUE_USER_RETENTION_TYPE_UPGRADING = "upgrading"; 772168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps 78cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps /** 792168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps * Value for {@link #CD_INDEX_USER_RETENTION_TYPE} meaning that the user has already this 80cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps * version of the Mail app before. 81cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps */ 82cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps public static final String CD_VALUE_USER_RETENTION_TYPE_RETURNING = "returning"; 83cc4a037b71a60cb912b7fbf25805c54179d75ff0Régis Décamps 84761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang private static Tracker sInstance; 85761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 86761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang private Analytics() { 87761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang } 88761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 89761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang public static Tracker getInstance() { 90761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang synchronized (Analytics.class) { 91761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang if (sInstance == null) { 92761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang sInstance = new StubTracker(); 93761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang } 94761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang } 95761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang return sInstance; 96761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang } 97761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 98761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang public static void setTracker(Tracker t) { 99761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang synchronized (Analytics.class) { 100761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang sInstance = t; 101761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang } 102761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang } 103761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 1048cc0de897f4d4b5790a363684347eeae06088f45Andy Huang public static boolean isLoggable() { 1058cc0de897f4d4b5790a363684347eeae06088f45Andy Huang return !ActivityManager.isUserAMonkey() && !ActivityManager.isRunningInTestHarness(); 1068cc0de897f4d4b5790a363684347eeae06088f45Andy Huang } 1078cc0de897f4d4b5790a363684347eeae06088f45Andy Huang 108761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang private static final class StubTracker implements Tracker { 109761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 110761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang @Override 111761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang public void activityStart(Activity a) {} 112761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 113761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang @Override 114761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang public void activityStop(Activity a) {} 115761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 116761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang @Override 117761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang public void sendEvent(String category, String action, String label, long value) {} 118761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 119761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang @Override 12072953f25e00ee8e7b5c7682148430dc82f00a77dJin Cao public void sendTiming(String category, long millis, String name, String label) {} 12172953f25e00ee8e7b5c7682148430dc82f00a77dJin Cao 12272953f25e00ee8e7b5c7682148430dc82f00a77dJin Cao @Override 1232b55549d4fbe25e91f673a0727fc89ff755d9327Andy Huang public void sendMenuItemEvent(String category, int itemResId, String label, long value) {} 1242b55549d4fbe25e91f673a0727fc89ff755d9327Andy Huang 1252b55549d4fbe25e91f673a0727fc89ff755d9327Andy Huang @Override 126761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang public void sendView(String view) {} 127761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 128761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang @Override 129761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang public void setCustomDimension(int index, String value) {} 130761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 131761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang @Override 132761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang public void setCustomMetric(int index, Long value) {} 133761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 134761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang @Override 135761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang public void debugDispatchNow() {} 136761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 1370abdb685b601c39ae1ccffb930acac323f4aafedRégis Décamps @Override 1382168cbc9c58d2133bdf77ecd342c3d5ee755d607Régis Décamps public void setEmail(String emailAddress, String accountManagerType) {} 139761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang } 140761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang 141761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang} 142