247 lines
9.5 KiB
Java
247 lines
9.5 KiB
Java
/*
|
|
* Copyright (C) 2020 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.internal.app;
|
|
|
|
import android.content.Intent;
|
|
import android.provider.MediaStore;
|
|
|
|
import com.android.internal.logging.InstanceId;
|
|
import com.android.internal.logging.UiEvent;
|
|
import com.android.internal.logging.UiEventLogger;
|
|
import com.android.internal.util.FrameworkStatsLog;
|
|
|
|
/**
|
|
* Interface for writing Sharesheet atoms to statsd log.
|
|
* @hide
|
|
*/
|
|
public interface ChooserActivityLogger {
|
|
/** Logs a UiEventReported event for the system sharesheet completing initial start-up. */
|
|
void logShareStarted(int eventId, String packageName, String mimeType, int appProvidedDirect,
|
|
int appProvidedApp, boolean isWorkprofile, int previewType, String intent);
|
|
|
|
/** Logs a UiEventReported event for the system sharesheet when the user selects a target. */
|
|
void logShareTargetSelected(int targetType, String packageName, int positionPicked,
|
|
boolean isPinned);
|
|
|
|
/** Logs a UiEventReported event for the system sharesheet being triggered by the user. */
|
|
default void logSharesheetTriggered() {
|
|
log(SharesheetStandardEvent.SHARESHEET_TRIGGERED, getInstanceId());
|
|
}
|
|
|
|
/** Logs a UiEventReported event for the system sharesheet completing loading app targets. */
|
|
default void logSharesheetAppLoadComplete() {
|
|
log(SharesheetStandardEvent.SHARESHEET_APP_LOAD_COMPLETE, getInstanceId());
|
|
}
|
|
|
|
/**
|
|
* Logs a UiEventReported event for the system sharesheet completing loading service targets.
|
|
*/
|
|
default void logSharesheetDirectLoadComplete() {
|
|
log(SharesheetStandardEvent.SHARESHEET_DIRECT_LOAD_COMPLETE, getInstanceId());
|
|
}
|
|
|
|
/**
|
|
* Logs a UiEventReported event for the system sharesheet timing out loading service targets.
|
|
*/
|
|
default void logSharesheetDirectLoadTimeout() {
|
|
log(SharesheetStandardEvent.SHARESHEET_DIRECT_LOAD_TIMEOUT, getInstanceId());
|
|
}
|
|
|
|
/**
|
|
* Logs a UiEventReported event for the system sharesheet switching
|
|
* between work and main profile.
|
|
*/
|
|
default void logShareheetProfileChanged() {
|
|
log(SharesheetStandardEvent.SHARESHEET_PROFILE_CHANGED, getInstanceId());
|
|
}
|
|
|
|
/** Logs a UiEventReported event for the system sharesheet getting expanded or collapsed. */
|
|
default void logSharesheetExpansionChanged(boolean isCollapsed) {
|
|
log(isCollapsed ? SharesheetStandardEvent.SHARESHEET_COLLAPSED :
|
|
SharesheetStandardEvent.SHARESHEET_EXPANDED, getInstanceId());
|
|
}
|
|
|
|
/**
|
|
* Logs a UiEventReported event for the system sharesheet app share ranking timing out.
|
|
*/
|
|
default void logSharesheetAppShareRankingTimeout() {
|
|
log(SharesheetStandardEvent.SHARESHEET_APP_SHARE_RANKING_TIMEOUT, getInstanceId());
|
|
}
|
|
|
|
/**
|
|
* Logs a UiEventReported event for the system sharesheet when direct share row is empty.
|
|
*/
|
|
default void logSharesheetEmptyDirectShareRow() {
|
|
log(SharesheetStandardEvent.SHARESHEET_EMPTY_DIRECT_SHARE_ROW, getInstanceId());
|
|
}
|
|
|
|
/**
|
|
* Logs a UiEventReported event for a given share activity
|
|
* @param event
|
|
* @param instanceId
|
|
*/
|
|
void log(UiEventLogger.UiEventEnum event, InstanceId instanceId);
|
|
|
|
/**
|
|
*
|
|
* @return
|
|
*/
|
|
InstanceId getInstanceId();
|
|
|
|
/**
|
|
* The UiEvent enums that this class can log.
|
|
*/
|
|
enum SharesheetStartedEvent implements UiEventLogger.UiEventEnum {
|
|
@UiEvent(doc = "Basic system Sharesheet has started and is visible.")
|
|
SHARE_STARTED(228);
|
|
|
|
private final int mId;
|
|
SharesheetStartedEvent(int id) {
|
|
mId = id;
|
|
}
|
|
@Override
|
|
public int getId() {
|
|
return mId;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The UiEvent enums that this class can log.
|
|
*/
|
|
enum SharesheetTargetSelectedEvent implements UiEventLogger.UiEventEnum {
|
|
INVALID(0),
|
|
@UiEvent(doc = "User selected a service target.")
|
|
SHARESHEET_SERVICE_TARGET_SELECTED(232),
|
|
@UiEvent(doc = "User selected an app target.")
|
|
SHARESHEET_APP_TARGET_SELECTED(233),
|
|
@UiEvent(doc = "User selected a standard target.")
|
|
SHARESHEET_STANDARD_TARGET_SELECTED(234),
|
|
@UiEvent(doc = "User selected the copy target.")
|
|
SHARESHEET_COPY_TARGET_SELECTED(235),
|
|
@UiEvent(doc = "User selected the nearby target.")
|
|
SHARESHEET_NEARBY_TARGET_SELECTED(626),
|
|
@UiEvent(doc = "User selected the edit target.")
|
|
SHARESHEET_EDIT_TARGET_SELECTED(669);
|
|
|
|
private final int mId;
|
|
SharesheetTargetSelectedEvent(int id) {
|
|
mId = id;
|
|
}
|
|
@Override public int getId() {
|
|
return mId;
|
|
}
|
|
|
|
public static SharesheetTargetSelectedEvent fromTargetType(int targetType) {
|
|
switch(targetType) {
|
|
case ChooserActivity.SELECTION_TYPE_SERVICE:
|
|
return SHARESHEET_SERVICE_TARGET_SELECTED;
|
|
case ChooserActivity.SELECTION_TYPE_APP:
|
|
return SHARESHEET_APP_TARGET_SELECTED;
|
|
case ChooserActivity.SELECTION_TYPE_STANDARD:
|
|
return SHARESHEET_STANDARD_TARGET_SELECTED;
|
|
case ChooserActivity.SELECTION_TYPE_COPY:
|
|
return SHARESHEET_COPY_TARGET_SELECTED;
|
|
case ChooserActivity.SELECTION_TYPE_NEARBY:
|
|
return SHARESHEET_NEARBY_TARGET_SELECTED;
|
|
case ChooserActivity.SELECTION_TYPE_EDIT:
|
|
return SHARESHEET_EDIT_TARGET_SELECTED;
|
|
default:
|
|
return INVALID;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The UiEvent enums that this class can log.
|
|
*/
|
|
enum SharesheetStandardEvent implements UiEventLogger.UiEventEnum {
|
|
INVALID(0),
|
|
@UiEvent(doc = "User clicked share.")
|
|
SHARESHEET_TRIGGERED(227),
|
|
@UiEvent(doc = "User changed from work to personal profile or vice versa.")
|
|
SHARESHEET_PROFILE_CHANGED(229),
|
|
@UiEvent(doc = "User expanded target list.")
|
|
SHARESHEET_EXPANDED(230),
|
|
@UiEvent(doc = "User collapsed target list.")
|
|
SHARESHEET_COLLAPSED(231),
|
|
@UiEvent(doc = "Sharesheet app targets is fully populated.")
|
|
SHARESHEET_APP_LOAD_COMPLETE(322),
|
|
@UiEvent(doc = "Sharesheet direct targets is fully populated.")
|
|
SHARESHEET_DIRECT_LOAD_COMPLETE(323),
|
|
@UiEvent(doc = "Sharesheet direct targets timed out.")
|
|
SHARESHEET_DIRECT_LOAD_TIMEOUT(324),
|
|
@UiEvent(doc = "Sharesheet app share ranking timed out.")
|
|
SHARESHEET_APP_SHARE_RANKING_TIMEOUT(831),
|
|
@UiEvent(doc = "Sharesheet empty direct share row.")
|
|
SHARESHEET_EMPTY_DIRECT_SHARE_ROW(828);
|
|
|
|
private final int mId;
|
|
SharesheetStandardEvent(int id) {
|
|
mId = id;
|
|
}
|
|
@Override public int getId() {
|
|
return mId;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the enum used in sharesheet started atom to indicate what preview type was used.
|
|
*/
|
|
default int typeFromPreviewInt(int previewType) {
|
|
switch(previewType) {
|
|
case ChooserActivity.CONTENT_PREVIEW_IMAGE:
|
|
return FrameworkStatsLog.SHARESHEET_STARTED__PREVIEW_TYPE__CONTENT_PREVIEW_IMAGE;
|
|
case ChooserActivity.CONTENT_PREVIEW_FILE:
|
|
return FrameworkStatsLog.SHARESHEET_STARTED__PREVIEW_TYPE__CONTENT_PREVIEW_FILE;
|
|
case ChooserActivity.CONTENT_PREVIEW_TEXT:
|
|
default:
|
|
return FrameworkStatsLog
|
|
.SHARESHEET_STARTED__PREVIEW_TYPE__CONTENT_PREVIEW_TYPE_UNKNOWN;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the enum used in sharesheet started atom to indicate what intent triggers the
|
|
* ChooserActivity.
|
|
*/
|
|
default int typeFromIntentString(String intent) {
|
|
if (intent == null) {
|
|
return FrameworkStatsLog.SHARESHEET_STARTED__INTENT_TYPE__INTENT_DEFAULT;
|
|
}
|
|
switch (intent) {
|
|
case Intent.ACTION_VIEW:
|
|
return FrameworkStatsLog.SHARESHEET_STARTED__INTENT_TYPE__INTENT_ACTION_VIEW;
|
|
case Intent.ACTION_EDIT:
|
|
return FrameworkStatsLog.SHARESHEET_STARTED__INTENT_TYPE__INTENT_ACTION_EDIT;
|
|
case Intent.ACTION_SEND:
|
|
return FrameworkStatsLog.SHARESHEET_STARTED__INTENT_TYPE__INTENT_ACTION_SEND;
|
|
case Intent.ACTION_SENDTO:
|
|
return FrameworkStatsLog.SHARESHEET_STARTED__INTENT_TYPE__INTENT_ACTION_SENDTO;
|
|
case Intent.ACTION_SEND_MULTIPLE:
|
|
return FrameworkStatsLog
|
|
.SHARESHEET_STARTED__INTENT_TYPE__INTENT_ACTION_SEND_MULTIPLE;
|
|
case MediaStore.ACTION_IMAGE_CAPTURE:
|
|
return FrameworkStatsLog
|
|
.SHARESHEET_STARTED__INTENT_TYPE__INTENT_ACTION_IMAGE_CAPTURE;
|
|
case Intent.ACTION_MAIN:
|
|
return FrameworkStatsLog.SHARESHEET_STARTED__INTENT_TYPE__INTENT_ACTION_MAIN;
|
|
default:
|
|
return FrameworkStatsLog.SHARESHEET_STARTED__INTENT_TYPE__INTENT_DEFAULT;
|
|
}
|
|
}
|
|
}
|