/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.dialer.logging; import android.text.TextUtils; import com.android.contacts.common.dialog.ClearFrequentsDialog; import com.android.contacts.common.interactions.ImportExportDialogFragment; import com.android.dialer.calllog.CallLogFragment; import com.android.dialer.dialpad.DialpadFragment; import com.android.dialer.filterednumber.BlockedNumbersFragment; import com.android.dialer.list.AllContactsFragment; import com.android.dialer.list.BlockedListSearchFragment; import com.android.dialer.list.RegularSearchFragment; import com.android.dialer.list.SmartDialSearchFragment; import com.android.dialer.list.SpeedDialFragment; import com.android.dialer.settings.DialerSettingsActivity; import com.android.incallui.AnswerFragment; import com.android.incallui.CallCardFragment; import com.android.incallui.ConferenceManagerFragment; import com.android.incallui.InCallActivity; import java.util.HashMap; import java.util.Map; /** * Stores constants identifying individual screens/dialogs/fragments in the application, and also * provides a mapping of integer id -> screen name mappings for analytics purposes. */ public class ScreenEvent { private static final Map sScreenNameMap = new HashMap<>(); public static final String FRAGMENT_TAG_SEPARATOR = "#"; public static final int UNKNOWN = 0; // The dialpad in the main Dialer activity public static final int DIALPAD = 1; // The speed dial tab in the main Dialer activity public static final int SPEED_DIAL = 2; // The recents tab in the main Dialer activity public static final int CALL_LOG = 3; // The voicemail tab in the main Dialer activity public static final int VOICEMAIL_LOG = 4; // The all contacts tab in the main Dialer activity public static final int ALL_CONTACTS = 5; // List of search results returned by typing into the search box. public static final int REGULAR_SEARCH = 6; // List of search results returned by typing into the dialpad. public static final int SMART_DIAL_SEARCH = 7; // The All and Missed call log tabs in CallLogActivity public static final int CALL_LOG_FILTER = 8; // Dialer settings screen. public static final int SETTINGS = 9; // The "Import/export contacts" dialog launched via the overflow menu. public static final int IMPORT_EXPORT_CONTACTS = 10; // The "Clear frequents" dialog launched via the overflow menu. public static final int CLEAR_FREQUENTS = 11; // The "Send feedback" dialog launched via the overflow menu. public static final int SEND_FEEDBACK = 12; // The main in call screen that displays caller details and contact photos public static final int INCALL = 13; // The screen that displays the glowpad widget (slide right to answer, // slide left to dismiss). public static final int INCOMING_CALL = 14; // Conference management fragment displayed for conferences that support // management of individual calls within the conference. public static final int CONFERENCE_MANAGEMENT = 15; // The dialpad displayed in-call that is used to send dtmf tones. public static final int INCALL_DIALPAD = 16; // Menu options displayed when long pressing on a call log entry. public static final int CALL_LOG_CONTEXT_MENU = 17; // Screen displayed to allow the user to see an overview of all blocked // numbers. public static final int BLOCKED_NUMBER_MANAGEMENT = 18; // Screen displayed to allow the user to add a new blocked number. public static final int BLOCKED_NUMBER_ADD_NUMBER = 19; static { sScreenNameMap.put(ScreenEvent.DIALPAD, getScreenNameWithTag(DialpadFragment.class.getSimpleName(), "Dialer")); sScreenNameMap.put(ScreenEvent.SPEED_DIAL, SpeedDialFragment.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.CALL_LOG, getScreenNameWithTag(CallLogFragment.class.getSimpleName(), "History")); sScreenNameMap.put(ScreenEvent.VOICEMAIL_LOG, getScreenNameWithTag(CallLogFragment.class.getSimpleName(), "Voicemail")); sScreenNameMap.put(ScreenEvent.ALL_CONTACTS, AllContactsFragment.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.REGULAR_SEARCH, RegularSearchFragment.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.SMART_DIAL_SEARCH, SmartDialSearchFragment.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.CALL_LOG_FILTER, getScreenNameWithTag(CallLogFragment.class.getSimpleName(), "Filtered")); sScreenNameMap.put(ScreenEvent.SETTINGS, DialerSettingsActivity.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.IMPORT_EXPORT_CONTACTS, ImportExportDialogFragment.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.CLEAR_FREQUENTS, ClearFrequentsDialog.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.SEND_FEEDBACK, "SendFeedback"); sScreenNameMap.put(ScreenEvent.INCALL, InCallActivity.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.INCOMING_CALL, AnswerFragment.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.CONFERENCE_MANAGEMENT, ConferenceManagerFragment.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.INCALL_DIALPAD, getScreenNameWithTag(DialpadFragment.class.getSimpleName(), "InCall")); sScreenNameMap.put(ScreenEvent.CALL_LOG_CONTEXT_MENU, "CallLogContextMenu"); sScreenNameMap.put(ScreenEvent.BLOCKED_NUMBER_MANAGEMENT, BlockedNumbersFragment.class.getSimpleName()); sScreenNameMap.put(ScreenEvent.BLOCKED_NUMBER_ADD_NUMBER, BlockedListSearchFragment.class.getSimpleName()); } /** * For a given screen type, returns the actual screen name that is used for logging/analytics * purposes. * * @param screenType unique ID of a type of screen * * @return the tagged version of the screen name corresponding to the provided screenType, * or {@null} if the provided screenType is unknown. */ public static String getScreenName(int screenType) { return sScreenNameMap.get(screenType); } /** * Build a tagged version of the provided screenName if the tag is non-empty. * * @param screenName Name of the screen. * @param tag Optional tag describing the screen. * @return the unchanged screenName if the tag is {@code null} or empty, the tagged version of * the screenName otherwise. */ public static String getScreenNameWithTag(String screenName, String tag) { if (TextUtils.isEmpty(tag)) { return screenName; } return screenName + FRAGMENT_TAG_SEPARATOR + tag; } }