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

Commit d8405a63 authored by thiruram's avatar thiruram
Browse files

Replace StatsLogManager with builder pattern.

Follow up CLs will remove the deprecating log methods and update their references.

Bug: 159170445
Change-Id: I5dfd30209eeba561df1b528a6305ca5923ba42a2
parent cbe1251c
Loading
Loading
Loading
Loading
+87 −65
Original line number Original line Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.launcher3.util.LogConfig;
import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.shared.system.SysUiStatsLog;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.OptionalInt;


/**
/**
 * This class calls StatsLog compile time generated methods.
 * This class calls StatsLog compile time generated methods.
@@ -73,12 +74,17 @@ public class StatsLogCompatManager extends StatsLogManager {
        sContext = context;
        sContext = context;
    }
    }


    @Override
    public StatsLogger logger() {
        return new StatsCompatLogger();
    }

    /**
    /**
     * Logs a {@link EventEnum}.
     * Logs a {@link EventEnum}.
     */
     */
    @Override
    @Override
    public void log(EventEnum event) {
    public void log(EventEnum event) {
        log(event, DEFAULT_INSTANCE_ID, (ItemInfo) null);
        logger().log(event);
    }
    }


    /**
    /**
@@ -86,7 +92,7 @@ public class StatsLogCompatManager extends StatsLogManager {
     */
     */
    @Override
    @Override
    public void log(EventEnum event, InstanceId instanceId) {
    public void log(EventEnum event, InstanceId instanceId) {
        log(event, instanceId, (ItemInfo) null);
        logger().withInstanceId(instanceId).log(event);
    }
    }


    /**
    /**
@@ -94,7 +100,7 @@ public class StatsLogCompatManager extends StatsLogManager {
     */
     */
    @Override
    @Override
    public void log(EventEnum event, @Nullable ItemInfo info) {
    public void log(EventEnum event, @Nullable ItemInfo info) {
        log(event, DEFAULT_INSTANCE_ID, info);
        logger().withItemInfo(info).log(event);
    }
    }


    /**
    /**
@@ -109,9 +115,8 @@ public class StatsLogCompatManager extends StatsLogManager {
                    @Override
                    @Override
                    public void execute(LauncherAppState app, BgDataModel dataModel,
                    public void execute(LauncherAppState app, BgDataModel dataModel,
                            AllAppsList apps) {
                            AllAppsList apps) {
                        write(event, instanceId, atomInfo, null,
                        write(event, instanceId, atomInfo, LAUNCHER_UICHANGED__DST_STATE__HOME,
                                LAUNCHER_UICHANGED__DST_STATE__HOME,
                                LAUNCHER_UICHANGED__DST_STATE__BACKGROUND, OptionalInt.empty());
                                LAUNCHER_UICHANGED__DST_STATE__BACKGROUND);
                    }
                    }
                });
                });
    }
    }
@@ -127,9 +132,7 @@ public class StatsLogCompatManager extends StatsLogManager {
            int dstState) {
            int dstState) {
        write(event, DEFAULT_INSTANCE_ID,
        write(event, DEFAULT_INSTANCE_ID,
                atomItemInfo == null ? LauncherAtom.ItemInfo.getDefaultInstance() : atomItemInfo,
                atomItemInfo == null ? LauncherAtom.ItemInfo.getDefaultInstance() : atomItemInfo,
                null,
                srcState, dstState, OptionalInt.empty());
                srcState,
                dstState);
    }
    }


    /**
    /**
@@ -138,10 +141,7 @@ public class StatsLogCompatManager extends StatsLogManager {
    @Override
    @Override
    public void log(EventEnum event, InstanceId instanceId,
    public void log(EventEnum event, InstanceId instanceId,
            @Nullable ItemInfo info) {
            @Nullable ItemInfo info) {
        logInternal(event, instanceId, info,
        logger().withItemInfo(info).withInstanceId(instanceId).log(event);
                LAUNCHER_UICHANGED__DST_STATE__HOME,
                LAUNCHER_UICHANGED__DST_STATE__BACKGROUND,
                DEFAULT_PAGE_INDEX);
    }
    }


    /**
    /**
@@ -163,65 +163,21 @@ public class StatsLogCompatManager extends StatsLogManager {
     */
     */
    @Override
    @Override
    public void log(EventEnum event, int srcState, int dstState, int pageIndex) {
    public void log(EventEnum event, int srcState, int dstState, int pageIndex) {
        logInternal(event, DEFAULT_INSTANCE_ID, null, srcState, dstState, pageIndex);
        logger().withSrcState(srcState).withDstState(dstState).log(event);
    }

    /**
     * Logs an event and accompanying {@link InstanceId} and {@link ItemInfo}.
     */
    private void logInternal(EventEnum event, InstanceId instanceId,
            @Nullable ItemInfo info, int srcState, int dstState, int pageIndex) {

        LauncherAppState.getInstance(sContext).getModel().enqueueModelUpdateTask(
                new BaseModelUpdateTask() {
                    @Override
                    public void execute(LauncherAppState app, BgDataModel dataModel,
                            AllAppsList apps) {
                        writeEvent(event, instanceId, info, srcState, dstState, pageIndex,
                                dataModel.folders);
                    }
                });
    }
    }


    private static void writeEvent(EventEnum event, InstanceId instanceId,
    private  void write(EventEnum event, InstanceId instanceId,
            @Nullable ItemInfo info, int srcState, int dstState, int pageIndex,
            IntSparseArrayMap<FolderInfo> folders) {

        if (!Utilities.ATLEAST_R) {
            return;
        }
        LauncherAtom.ItemInfo atomInfo = LauncherAtom.ItemInfo.getDefaultInstance();
        if (info != null) {
            if (info.container >= 0) {
                atomInfo = info.buildProto(folders.get(info.container));
            } else {
                atomInfo = info.buildProto();
            }
        } else {
            if (srcState == LAUNCHER_UICHANGED__DST_STATE__HOME
                    || dstState == LAUNCHER_UICHANGED__SRC_STATE__HOME) {
                atomInfo = LauncherAtom.ItemInfo.newBuilder().setContainerInfo(
                        LauncherAtom.ContainerInfo.newBuilder().setWorkspace(
                                LauncherAtom.WorkspaceContainer.newBuilder().setPageIndex(pageIndex)
                        )).build();
            }
        }
        write(event, instanceId, atomInfo, info, srcState, dstState);
    }

    private static void write(EventEnum event, InstanceId instanceId,
            LauncherAtom.ItemInfo atomInfo,
            LauncherAtom.ItemInfo atomInfo,
            @Nullable ItemInfo info,
            int srcState, int dstState, OptionalInt mRank) {
            int srcState, int dstState) {
        if (IS_VERBOSE) {
        if (IS_VERBOSE) {
            String name = (event instanceof Enum) ? ((Enum) event).name() :
            String name = (event instanceof Enum) ? ((Enum) event).name() :
                    event.getId() + "";
                    event.getId() + "";


            Log.d(TAG, instanceId == DEFAULT_INSTANCE_ID
            Log.d(TAG, instanceId == DEFAULT_INSTANCE_ID
                    ? String.format("\n%s (State:%s->%s) \n%s\n%s", name, getStateString(srcState),
                    ? String.format("\n%s (State:%s->%s)\n%s", name, getStateString(srcState),
                            getStateString(dstState), info, atomInfo)
                    getStateString(dstState),  atomInfo)
                    : String.format("\n%s (State:%s->%s) (InstanceId:%s)\n%s\n%s", name,
                    : String.format("\n%s (State:%s->%s) (InstanceId:%s)\n%s", name,
                            getStateString(srcState), getStateString(dstState), instanceId, info,
                            getStateString(srcState), getStateString(dstState), instanceId,
                            atomInfo));
                            atomInfo));
        }
        }


@@ -246,7 +202,7 @@ public class StatsLogCompatManager extends StatsLogManager {
                getPageId(atomInfo, true) /* page_id_parent */,
                getPageId(atomInfo, true) /* page_id_parent */,
                getHierarchy(atomInfo) /* hierarchy */,
                getHierarchy(atomInfo) /* hierarchy */,
                atomInfo.getIsWork() /* is_work_profile */,
                atomInfo.getIsWork() /* is_work_profile */,
                atomInfo.getRank() /* rank */,
                mRank.orElse(atomInfo.getRank()) /* rank */,
                atomInfo.getFolderIcon().getFromLabelState().getNumber() /* fromState */,
                atomInfo.getFolderIcon().getFromLabelState().getNumber() /* fromState */,
                atomInfo.getFolderIcon().getToLabelState().getNumber() /* toState */,
                atomInfo.getFolderIcon().getToLabelState().getNumber() /* toState */,
                atomInfo.getFolderIcon().getLabelInfo() /* edittext */,
                atomInfo.getFolderIcon().getLabelInfo() /* edittext */,
@@ -319,6 +275,72 @@ public class StatsLogCompatManager extends StatsLogManager {
                info.getWidget().getSpanY());
                info.getWidget().getSpanY());
    }
    }


    /**
     * Helps to construct and write statsd compatible log message.
     */
    private class StatsCompatLogger implements StatsLogger {
        private ItemInfo mItemInfo = new ItemInfo();
        private InstanceId mInstanceId = DEFAULT_INSTANCE_ID;
        private OptionalInt mRank = OptionalInt.empty();
        private int mSrcState = LAUNCHER_UICHANGED__SRC_STATE__HOME;
        private int mDstState = LAUNCHER_UICHANGED__DST_STATE__BACKGROUND;

        @Override
        public StatsLogger withItemInfo(ItemInfo itemInfo) {
            this.mItemInfo = itemInfo;
            return this;
        }

        @Override
        public StatsLogger withInstanceId(InstanceId instanceId) {
            this.mInstanceId = instanceId;
            return this;
        }

        @Override
        public StatsLogger withRank(int rank) {
            this.mRank = OptionalInt.of(rank);
            return this;
        }

        @Override
        public StatsLogger withSrcState(int srcState) {
            this.mSrcState = srcState;
            return this;
        }

        @Override
        public StatsLogger withDstState(int dstState) {
            this.mDstState = dstState;
            return this;
        }

        @Override
        public void log(EventEnum event) {
            if (!Utilities.ATLEAST_R) {
                return;
            }

            if (mItemInfo.container < 0) {
                // Item is not within a folder. Write to StatsLog in same thread.
                write(event, mInstanceId, mItemInfo.buildProto(), mSrcState, mDstState, mRank);
            } else {
                // Item is inside the folder, fetch folder info in a BG thread
                // and then write to StatsLog.
                LauncherAppState.getInstance(sContext).getModel().enqueueModelUpdateTask(
                        new BaseModelUpdateTask() {
                            @Override
                            public void execute(LauncherAppState app, BgDataModel dataModel,
                                    AllAppsList apps) {
                                FolderInfo folderInfo = dataModel.folders.get(mItemInfo.container);
                                write(event, mInstanceId, mItemInfo.buildProto(folderInfo),
                                        mSrcState, mDstState, mRank);
                            }
                        });
            }
        }
    }

    private static int getCardinality(LauncherAtom.ItemInfo info) {
    private static int getCardinality(LauncherAtom.ItemInfo info) {
        return info.getContainerInfo().getContainerCase().equals(PREDICTED_HOTSEAT_CONTAINER)
        return info.getContainerInfo().getContainerCase().equals(PREDICTED_HOTSEAT_CONTAINER)
                ? info.getContainerInfo().getPredictedHotseatContainer().getCardinality()
                ? info.getContainerInfo().getPredictedHotseatContainer().getCardinality()
+56 −0
Original line number Original line Diff line number Diff line
@@ -181,6 +181,62 @@ public class StatsLogManager implements ResourceBasedOverride {
        }
        }
    }
    }


    /**
     * Helps to construct and write the log message.
     */
    public interface StatsLogger {

        /**
         * Sets log fields from provided {@link ItemInfo}.
         */
        default StatsLogger withItemInfo(ItemInfo itemInfo) {
            return this;
        }


        /**
         * Sets {@link InstanceId} of log message.
         */
        default StatsLogger withInstanceId(InstanceId instanceId) {
            return this;
        }

        /**
         * Sets rank field of log message.
         */
        default StatsLogger withRank(int rank) {
            return this;
        }

        /**
         * Sets source launcher state field of log message.
         */
        default StatsLogger withSrcState(int srcState) {
            return this;
        }

        /**
         * Sets destination launcher state field of log message.
         */
        default StatsLogger withDstState(int dstState) {
            return this;
        }

        /**
         * Builds the final message and logs it as {@link EventEnum}.
         */
        default void log(EventEnum event) {
        }
    }

    /**
     * Returns new logger object.
     */
    public StatsLogger logger() {
        return new StatsLogger() {
        };
    }

    protected LogStateProvider mStateProvider;
    protected LogStateProvider mStateProvider;


    /**
    /**