Analytics.java revision 8cc0de897f4d4b5790a363684347eeae06088f45
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
36042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang    public static final int CD_INDEX_ACCOUNT_TYPE = 1;
37761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
38042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang    public static final int CD_INDEX_ACCOUNT_COUNT = 2;
39761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
40042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang    public static final int CD_INDEX_SENDER_IMAGES_ENABLED = 3;
41042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang
42042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang    public static final int CD_INDEX_ATTACHMENT_PREVIEWS_ENABLED = 4;
43042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang
44042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang    public static final int CD_INDEX_INBOX_TYPE = 5;
45042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang
46042a530b2296487fa5899a3e871214ac4a47e3d8Andy Huang    public static final int CD_INDEX_INBOX_SECTIONS_ENABLED = 6;
47761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
48761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    private static Tracker sInstance;
49761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
50761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    private Analytics() {
51761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    }
52761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
53761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    public static Tracker getInstance() {
54761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        synchronized (Analytics.class) {
55761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang            if (sInstance == null) {
56761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang                sInstance = new StubTracker();
57761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang            }
58761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        }
59761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        return sInstance;
60761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    }
61761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
62761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    public static void setTracker(Tracker t) {
63761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        synchronized (Analytics.class) {
64761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang            sInstance = t;
65761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        }
66761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    }
67761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
688cc0de897f4d4b5790a363684347eeae06088f45Andy Huang    public static boolean isLoggable() {
698cc0de897f4d4b5790a363684347eeae06088f45Andy Huang        return !ActivityManager.isUserAMonkey() && !ActivityManager.isRunningInTestHarness();
708cc0de897f4d4b5790a363684347eeae06088f45Andy Huang    }
718cc0de897f4d4b5790a363684347eeae06088f45Andy Huang
72761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    private static final class StubTracker implements Tracker {
73761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
74761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
75761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void activityStart(Activity a) {}
76761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
77761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
78761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void activityStop(Activity a) {}
79761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
80761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
81761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void sendEvent(String category, String action, String label, long value) {}
82761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
83761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
842b55549d4fbe25e91f673a0727fc89ff755d9327Andy Huang        public void sendMenuItemEvent(String category, int itemResId, String label, long value) {}
852b55549d4fbe25e91f673a0727fc89ff755d9327Andy Huang
862b55549d4fbe25e91f673a0727fc89ff755d9327Andy Huang        @Override
87761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void sendView(String view) {}
88761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
89761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
90761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void setCustomDimension(int index, String value) {}
91761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
92761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
93761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void setCustomMetric(int index, Long value) {}
94761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
95761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
96761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void debugDispatchNow() {}
97761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
98761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    }
99761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
100761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang}
101