12e2d4874684931c2934803def0b1cdb5be306096Walter Jang/*
22e2d4874684931c2934803def0b1cdb5be306096Walter Jang * Copyright (C) 2016 The Android Open Source Project
32e2d4874684931c2934803def0b1cdb5be306096Walter Jang *
42e2d4874684931c2934803def0b1cdb5be306096Walter Jang * Licensed under the Apache License, Version 2.0 (the "License");
52e2d4874684931c2934803def0b1cdb5be306096Walter Jang * you may not use this file except in compliance with the License.
62e2d4874684931c2934803def0b1cdb5be306096Walter Jang * You may obtain a copy of the License at
72e2d4874684931c2934803def0b1cdb5be306096Walter Jang *
82e2d4874684931c2934803def0b1cdb5be306096Walter Jang *      http://www.apache.org/licenses/LICENSE-2.0
92e2d4874684931c2934803def0b1cdb5be306096Walter Jang *
102e2d4874684931c2934803def0b1cdb5be306096Walter Jang * Unless required by applicable law or agreed to in writing, software
112e2d4874684931c2934803def0b1cdb5be306096Walter Jang * distributed under the License is distributed on an "AS IS" BASIS,
122e2d4874684931c2934803def0b1cdb5be306096Walter Jang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132e2d4874684931c2934803def0b1cdb5be306096Walter Jang * See the License for the specific language governing permissions and
142e2d4874684931c2934803def0b1cdb5be306096Walter Jang * limitations under the License.
152e2d4874684931c2934803def0b1cdb5be306096Walter Jang */
162e2d4874684931c2934803def0b1cdb5be306096Walter Jangpackage com.android.contacts.common.logging;
172e2d4874684931c2934803def0b1cdb5be306096Walter Jang
182e2d4874684931c2934803def0b1cdb5be306096Walter Jangimport android.app.Activity;
195372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jangimport android.app.Fragment;
205372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jangimport android.text.TextUtils;
212e2d4874684931c2934803def0b1cdb5be306096Walter Jang
225372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jangimport com.android.contacts.common.logging.ScreenEvent.ScreenType;
23e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jangimport com.android.contacts.commonbind.ObjectFactory;
242e2d4874684931c2934803def0b1cdb5be306096Walter Jangimport com.android.contacts.commonbind.analytics.AnalyticsUtil;
252e2d4874684931c2934803def0b1cdb5be306096Walter Jang
262e2d4874684931c2934803def0b1cdb5be306096Walter Jang/**
272e2d4874684931c2934803def0b1cdb5be306096Walter Jang * Logs analytics events.
282e2d4874684931c2934803def0b1cdb5be306096Walter Jang */
292e2d4874684931c2934803def0b1cdb5be306096Walter Jangpublic abstract class Logger {
302e2d4874684931c2934803def0b1cdb5be306096Walter Jang    public static final String TAG = "Logger";
312e2d4874684931c2934803def0b1cdb5be306096Walter Jang
325372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang    private static Logger getInstance() {
33e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang        return ObjectFactory.getLogger();
342e2d4874684931c2934803def0b1cdb5be306096Walter Jang    }
352e2d4874684931c2934803def0b1cdb5be306096Walter Jang
362e2d4874684931c2934803def0b1cdb5be306096Walter Jang    /**
372e2d4874684931c2934803def0b1cdb5be306096Walter Jang     * Logs an event indicating that a screen was displayed.
382e2d4874684931c2934803def0b1cdb5be306096Walter Jang     *
392e2d4874684931c2934803def0b1cdb5be306096Walter Jang     * @param screenType integer identifier of the displayed screen
402e2d4874684931c2934803def0b1cdb5be306096Walter Jang     * @param activity Parent activity of the displayed screen.
412e2d4874684931c2934803def0b1cdb5be306096Walter Jang     */
425372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang    public static void logScreenView(Activity activity, int screenType) {
435372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang        logScreenView(activity, screenType, ScreenType.UNKNOWN);
445372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang    }
455372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang
465372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang    /**
475372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang     * @param previousScreenType integer identifier of the displayed screen the user came from.
485372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang     */
495372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang    public static void logScreenView(Activity activity, int screenType, int previousScreenType) {
502e2d4874684931c2934803def0b1cdb5be306096Walter Jang        final Logger logger = getInstance();
512e2d4874684931c2934803def0b1cdb5be306096Walter Jang        if (logger != null) {
525372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang            logger.logScreenViewImpl(screenType, previousScreenType);
535372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang        }
545372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang        // We prepend the friendly screen name with "From" and use it as the tag to indicate the
555372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang        // screen where the user was previously when they initiated the screen view being logged
565372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang        String tag = ScreenType.getFriendlyName(previousScreenType);
575372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang        if (!TextUtils.isEmpty(tag)) {
585372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang            tag = "From" + tag;
592e2d4874684931c2934803def0b1cdb5be306096Walter Jang        }
605372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang        AnalyticsUtil.sendScreenView(/* fragmentName */ (String) null, activity, tag);
612e2d4874684931c2934803def0b1cdb5be306096Walter Jang    }
622e2d4874684931c2934803def0b1cdb5be306096Walter Jang
63e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang    /**
64e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang     * Logs the results of a user search for a particular contact.
65e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang     */
66e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang    public static void logSearchEvent(SearchState searchState) {
67e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang        final Logger logger = getInstance();
68e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang         if (logger != null) {
69e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang            logger.logSearchEventImpl(searchState);
70e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang        }
71e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang    }
72e5b6d9ce29e67ff13c1eccab4df859786ded9609Walter Jang
735372b0d6989ebb51bc03dead8fb51b5bde02b0c0Walter Jang    public abstract void logScreenViewImpl(int screenType, int previousScreenType);
74ccf138ce183440a206bc30ef48b0dc08ae71f51bWalter Jang    public abstract void logSearchEventImpl(SearchState searchState);
752e2d4874684931c2934803def0b1cdb5be306096Walter Jang}
76