// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.chrome.browser.metrics; import android.app.Activity; import android.support.annotation.IntDef; import org.chromium.base.ApplicationStatus; import org.chromium.base.metrics.RecordHistogram; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Tracks metrics caused by a particular Activity stopping. */ public class ActivityStopMetrics { @Retention(RetentionPolicy.SOURCE) @IntDef({ STOP_REASON_UNKNOWN, STOP_REASON_BACK_BUTTON, STOP_REASON_OTHER_CHROME_ACTIVITY_IN_FOREGROUND, STOP_REASON_COUNT }) public @interface StopReason{} /** Activity stopped for unknown reasons. */ public static final int STOP_REASON_UNKNOWN = 0; /** Activity stopped after the user hit the back button. */ public static final int STOP_REASON_BACK_BUTTON = 1; // Obsolete -- Activity stopped after the user hit the close/return UI button. // public static final int STOP_REASON_RETURN_BUTTON = 2; // Obsolete -- Activity stopped because it launched a {@link CustomTabActivity} on top of // itself. // public static final int STOP_REASON_CUSTOM_TAB_STARTED = 3; // Obsolete -- Activity stopped because its child {@link CustomTabActivity} stopped itself. // public static final int STOP_REASON_CUSTOM_TAB_STOPPED = 4; /** Activity stopped because another of Chrome Activities came into focus. */ public static final int STOP_REASON_OTHER_CHROME_ACTIVITY_IN_FOREGROUND = 5; /** Boundary. Shouldn't ever be passed to the metrics service. */ public static final int STOP_REASON_COUNT = 6; /** Name of the histogram that will be recorded. */ private static final String HISTOGRAM_NAME = "Android.Activity.ChromeTabbedActivity.StopReason"; /** Why the Activity is being stopped. */ @StopReason private int mStopReason; /** * Constructs an {@link ActivityStopMetrics} instance. */ public ActivityStopMetrics() { mStopReason = STOP_REASON_COUNT; } /** * Records the reason that the parent Activity was stopped. * @param parent Activity that owns this {@link ActivityStopMetrics} instance. */ public void onStopWithNative(Activity parent) { if (mStopReason == STOP_REASON_COUNT) { if (parent != ApplicationStatus.getLastTrackedFocusedActivity() && ApplicationStatus.hasVisibleActivities()) { mStopReason = STOP_REASON_OTHER_CHROME_ACTIVITY_IN_FOREGROUND; } else { mStopReason = STOP_REASON_UNKNOWN; } } RecordHistogram.recordEnumeratedHistogram(HISTOGRAM_NAME, mStopReason, STOP_REASON_COUNT); mStopReason = STOP_REASON_COUNT; } /** * Tracks the reason that the parent Activity was stopped. * @param reason Reason the Activity was stopped (see {@link StopReason}). */ public void setStopReason(@StopReason int reason) { if (mStopReason != STOP_REASON_COUNT) return; mStopReason = reason; } }