Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7af3cc7 authored by Thiru Ramasamy's avatar Thiru Ramasamy
Browse files

Add support for logging multiple attributes per item.

This change will make use of new attributes field in LauncherAtoms to log multiple item attributes by converting them int array and then writes proto bytes into statsd.

Test: wwdebug && wwlogcat http://gpaste/5985977337118720
Change-Id: Iabda0b14100558f5625d01ba829d3ad96a6419fc
parent 18b9d159
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import "launcher_atom_extension.proto";
//
// ItemInfos
message ItemInfo {
  reserved 8;

  oneof Item {
    Application application = 1;
    Task task = 2;
@@ -42,7 +44,14 @@ message ItemInfo {
  optional ContainerInfo container_info = 7;

  // Stores the origin of the Item
  optional Attribute attribute = 8;
  repeated Attribute item_attributes = 12;
}

message LauncherAttributes{

  // Integer value of item attribute enum
  // (e.g. SUGGESTED_LABEL, ALL_APPS_SEARCH_RESULT_SETTING etc)
  repeated int32 item_attributes = 1;
}

// Represents various launcher surface where items are placed.
+17 −12
Original line number Diff line number Diff line
@@ -42,10 +42,12 @@ import androidx.slice.SliceItem;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.Utilities;
import com.android.launcher3.logger.LauncherAtom;
import com.android.launcher3.logger.LauncherAtom.Attribute;
import com.android.launcher3.logger.LauncherAtom.ContainerInfo;
import com.android.launcher3.logger.LauncherAtom.FolderContainer.ParentContainerCase;
import com.android.launcher3.logger.LauncherAtom.FolderIcon;
import com.android.launcher3.logger.LauncherAtom.FromState;
import com.android.launcher3.logger.LauncherAtom.LauncherAttributes;
import com.android.launcher3.logger.LauncherAtom.ToState;
import com.android.launcher3.logger.LauncherAtomExtensions.DeviceSearchResultContainer;
import com.android.launcher3.logger.LauncherAtomExtensions.DeviceSearchResultContainer.SearchAttributes;
@@ -88,7 +90,6 @@ public class StatsLogCompatManager extends StatsLogManager {
    private static final int FOLDER_HIERARCHY_OFFSET = 100;
    private static final int SEARCH_RESULT_HIERARCHY_OFFSET = 200;
    private static final int EXTENDED_CONTAINERS_HIERARCHY_OFFSET = 300;
    private static final int ATTRIBUTE_MULTIPLIER = 100;

    /**
     * Flags for converting SearchAttribute to integer value.
@@ -128,8 +129,7 @@ public class StatsLogCompatManager extends StatsLogManager {
        }
        SysUiStatsLog.write(SysUiStatsLog.LAUNCHER_SNAPSHOT,
                LAUNCHER_WORKSPACE_SNAPSHOT.getId() /* event_id */,
                info.getAttribute().getNumber() * ATTRIBUTE_MULTIPLIER
                        + info.getItemCase().getNumber()  /* target_id */,
                info.getItemCase().getNumber()  /* target_id */,
                instanceId.getId() /* instance_id */,
                0 /* uid */,
                getPackageName(info) /* package_name */,
@@ -142,15 +142,22 @@ public class StatsLogCompatManager extends StatsLogManager {
                getParentPageId(info) /* page_id_parent */,
                getHierarchy(info) /* hierarchy */,
                info.getIsWork() /* is_work_profile */,
                info.getAttribute().getNumber() /* origin */,
                0 /* origin */,
                getCardinality(info) /* cardinality */,
                info.getWidget().getSpanX(),
                info.getWidget().getSpanY(),
                getFeatures(info),
                null /* attributes */
                getAttributes(info) /* attributes */
        );
    }

    private static byte[] getAttributes(LauncherAtom.ItemInfo itemInfo) {
        LauncherAttributes.Builder responseBuilder = LauncherAttributes.newBuilder();
        itemInfo.getItemAttributesList().stream().map(Attribute::getNumber).forEach(
                responseBuilder::addItemAttributes);
        return responseBuilder.build().toByteArray();
    }

    /**
     * Builds {@link StatsEvent} from {@link LauncherAtom.ItemInfo}. Used for pulled atom callback
     * implementation.
@@ -160,8 +167,7 @@ public class StatsLogCompatManager extends StatsLogManager {
        return SysUiStatsLog.buildStatsEvent(
                SysUiStatsLog.LAUNCHER_LAYOUT_SNAPSHOT, // atom ID,
                LAUNCHER_WORKSPACE_SNAPSHOT.getId(), // event_id = 1;
                info.getAttribute().getNumber() * ATTRIBUTE_MULTIPLIER
                        + info.getItemCase().getNumber(), // item_id = 2;
                info.getItemCase().getNumber(), // item_id = 2;
                instanceId == null ? 0 : instanceId.getId(), //instance_id = 3;
                0, //uid = 4 [(is_uid) = true];
                getPackageName(info), // package_name = 5;
@@ -174,11 +180,11 @@ public class StatsLogCompatManager extends StatsLogManager {
                getParentPageId(info), //page_id_parent = 12 [default = -2];
                getHierarchy(info), // container_id = 13;
                info.getIsWork(), // is_work_profile = 14;
                info.getAttribute().getNumber(), // attribute_id = 15;
                0, // attribute_id = 15;
                getCardinality(info), // cardinality = 16;
                info.getWidget().getSpanX(), // span_x = 17 [default = 1];
                info.getWidget().getSpanY(), // span_y = 18 [default = 1];
                null /* attributes */
                getAttributes(info) /* attributes */
        );
    }

@@ -401,8 +407,7 @@ public class StatsLogCompatManager extends StatsLogManager {
                    null /* launcher extensions, deprecated */,
                    false /* quickstep_enabled, deprecated */,
                    event.getId() /* event_id */,
                    atomInfo.getAttribute().getNumber() * ATTRIBUTE_MULTIPLIER
                            + atomInfo.getItemCase().getNumber() /* target_id */,
                    atomInfo.getItemCase().getNumber() /* target_id */,
                    instanceId.getId() /* instance_id TODO */,
                    0 /* uid TODO */,
                    getPackageName(atomInfo) /* package_name */,
@@ -422,7 +427,7 @@ public class StatsLogCompatManager extends StatsLogManager {
                    getCardinality(atomInfo) /* cardinality */,
                    getFeatures(atomInfo) /* features */,
                    getSearchAttributes(atomInfo) /* searchAttributes */,
                    null /* attributes */
                    getAttributes(atomInfo) /* attributes */
            );
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -217,7 +217,7 @@ public class FolderInfo extends ItemInfo {
        return getDefaultItemInfoBuilder()
                .setFolderIcon(folderIcon)
                .setRank(rank)
                .setAttribute(getLabelState().mLogAttribute)
                .addItemAttributes(getLabelState().mLogAttribute)
                .setContainerInfo(getContainerInfo())
                .build();
    }
+1 −1
Original line number Diff line number Diff line
@@ -288,7 +288,7 @@ public class LauncherAppWidgetInfo extends ItemInfo {
        LauncherAtom.ItemInfo info = super.buildProto(folderInfo);
        return info.toBuilder()
                .setWidget(info.getWidget().toBuilder().setWidgetFeatures(widgetFeatures))
                .setAttribute(getAttribute(sourceContainer))
                .addItemAttributes(getAttribute(sourceContainer))
                .build();
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@ public class PendingAddWidgetInfo extends PendingAddItemInfo {
    public LauncherAtom.ItemInfo buildProto(FolderInfo folderInfo) {
        LauncherAtom.ItemInfo info = super.buildProto(folderInfo);
        return info.toBuilder()
                .setAttribute(LauncherAppWidgetInfo.getAttribute(sourceContainer))
                .addItemAttributes(LauncherAppWidgetInfo.getAttribute(sourceContainer))
                .build();
    }
}