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
484fe0af81874976a1995191321e35c844b2229811Andy Huang    public static final int CD_INDEX_REPLY_ALL_SETTING = 7;
494fe0af81874976a1995191321e35c844b2229811Andy Huang
50761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    private static Tracker sInstance;
51761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
52761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    private Analytics() {
53761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    }
54761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
55761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    public static Tracker getInstance() {
56761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        synchronized (Analytics.class) {
57761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang            if (sInstance == null) {
58761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang                sInstance = new StubTracker();
59761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang            }
60761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        }
61761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        return sInstance;
62761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    }
63761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
64761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    public static void setTracker(Tracker t) {
65761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        synchronized (Analytics.class) {
66761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang            sInstance = t;
67761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        }
68761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    }
69761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
708cc0de897f4d4b5790a363684347eeae06088f45Andy Huang    public static boolean isLoggable() {
718cc0de897f4d4b5790a363684347eeae06088f45Andy Huang        return !ActivityManager.isUserAMonkey() && !ActivityManager.isRunningInTestHarness();
728cc0de897f4d4b5790a363684347eeae06088f45Andy Huang    }
738cc0de897f4d4b5790a363684347eeae06088f45Andy Huang
74761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    private static final class StubTracker implements Tracker {
75761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
76761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
77761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void activityStart(Activity a) {}
78761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
79761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
80761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void activityStop(Activity a) {}
81761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
82761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
83761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void sendEvent(String category, String action, String label, long value) {}
84761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
85761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
862b55549d4fbe25e91f673a0727fc89ff755d9327Andy Huang        public void sendMenuItemEvent(String category, int itemResId, String label, long value) {}
872b55549d4fbe25e91f673a0727fc89ff755d9327Andy Huang
882b55549d4fbe25e91f673a0727fc89ff755d9327Andy Huang        @Override
89761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void sendView(String view) {}
90761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
91761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
92761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void setCustomDimension(int index, String value) {}
93761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
94761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
95761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void setCustomMetric(int index, Long value) {}
96761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
97761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        @Override
98761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang        public void debugDispatchNow() {}
99761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
100761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang    }
101761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang
102761522c1ac7a8fa05acde714f0e26fde47f3415fAndy Huang}
103