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

Commit eda66000 authored by Manjeet Rulhania's avatar Manjeet Rulhania Committed by Android (Google) Code Review
Browse files

Merge "Fix discrete dump order by column query" into main

parents 946c79ab ef9bbd0d
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -189,11 +189,11 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
            @AppOpsManager.HistoricalOpsRequestFilter int requestFilters,
            int uidFilter, @Nullable String packageNameFilter,
            @Nullable String attributionTagFilter, IntArray opCodesFilter, int opFlagsFilter,
            long beginTime, long endTime, int limit, String orderByColumn) {
            long beginTime, long endTime, int limit, String orderByColumn, boolean ascending) {
        List<SQLCondition> conditions = prepareConditions(beginTime, endTime, requestFilters,
                uidFilter, packageNameFilter,
                attributionTagFilter, opCodesFilter, opFlagsFilter);
        String sql = buildSql(conditions, orderByColumn, limit);
        String sql = buildSql(conditions, orderByColumn, ascending, limit);
        long startTime = 0;
        if (Flags.sqliteDiscreteOpEventLoggingEnabled()) {
            startTime = SystemClock.elapsedRealtime();
@@ -249,7 +249,8 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {
        return results;
    }

    private String buildSql(List<SQLCondition> conditions, String orderByColumn, int limit) {
    private String buildSql(List<SQLCondition> conditions, String orderByColumn, boolean ascending,
            int limit) {
        StringBuilder sql = new StringBuilder(DiscreteOpsTable.SELECT_TABLE_DATA);
        if (!conditions.isEmpty()) {
            sql.append(" WHERE ");
@@ -264,6 +265,7 @@ class DiscreteOpsDbHelper extends SQLiteOpenHelper {

        if (orderByColumn != null) {
            sql.append(" ORDER BY ").append(orderByColumn);
            sql.append(ascending ? " ASC " : " DESC ");
        }
        if (limit > 0) {
            sql.append(" LIMIT ").append(limit);
+0 −17
Original line number Diff line number Diff line
@@ -31,23 +31,15 @@ import static android.app.AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION;
import static android.app.AppOpsManager.OP_MONITOR_LOCATION;
import static android.app.AppOpsManager.OP_PHONE_CALL_CAMERA;
import static android.app.AppOpsManager.OP_PHONE_CALL_MICROPHONE;
import static android.app.AppOpsManager.OP_PROCESS_OUTGOING_CALLS;
import static android.app.AppOpsManager.OP_READ_DEVICE_IDENTIFIERS;
import static android.app.AppOpsManager.OP_READ_HEART_RATE;
import static android.app.AppOpsManager.OP_READ_ICC_SMS;
import static android.app.AppOpsManager.OP_READ_OXYGEN_SATURATION;
import static android.app.AppOpsManager.OP_READ_SKIN_TEMPERATURE;
import static android.app.AppOpsManager.OP_READ_SMS;
import static android.app.AppOpsManager.OP_RECEIVE_AMBIENT_TRIGGER_AUDIO;
import static android.app.AppOpsManager.OP_RECEIVE_SANDBOX_TRIGGER_AUDIO;
import static android.app.AppOpsManager.OP_RECORD_AUDIO;
import static android.app.AppOpsManager.OP_RESERVED_FOR_TESTING;
import static android.app.AppOpsManager.OP_RUN_IN_BACKGROUND;
import static android.app.AppOpsManager.OP_SEND_SMS;
import static android.app.AppOpsManager.OP_SMS_FINANCIAL_TRANSACTIONS;
import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW;
import static android.app.AppOpsManager.OP_WRITE_ICC_SMS;
import static android.app.AppOpsManager.OP_WRITE_SMS;

import static java.lang.Long.min;
import static java.lang.Math.max;
@@ -134,15 +126,6 @@ abstract class DiscreteOpsRegistry {
            + "," + OP_READ_HEART_RATE + "," + OP_READ_OXYGEN_SATURATION + ","
            + OP_READ_SKIN_TEMPERATURE + "," + OP_RESERVED_FOR_TESTING;

    static final int[] sDiscreteOpsToLog =
            new int[]{OP_FINE_LOCATION, OP_COARSE_LOCATION, OP_EMERGENCY_LOCATION, OP_CAMERA,
                    OP_RECORD_AUDIO, OP_PHONE_CALL_MICROPHONE, OP_PHONE_CALL_CAMERA,
                    OP_RECEIVE_AMBIENT_TRIGGER_AUDIO, OP_RECEIVE_SANDBOX_TRIGGER_AUDIO, OP_READ_SMS,
                    OP_WRITE_SMS, OP_SEND_SMS, OP_READ_ICC_SMS, OP_WRITE_ICC_SMS,
                    OP_SMS_FINANCIAL_TRANSACTIONS, OP_SYSTEM_ALERT_WINDOW, OP_MONITOR_LOCATION,
                    OP_MONITOR_HIGH_POWER_LOCATION, OP_PROCESS_OUTGOING_CALLS,
            };

    static final long DEFAULT_DISCRETE_HISTORY_CUTOFF = Duration.ofDays(7).toMillis();
    static final long MAXIMUM_DISCRETE_HISTORY_CUTOFF = Duration.ofDays(30).toMillis();
    // The duration for which the data is kept, default is 7 days and max 30 days enforced.
+4 −3
Original line number Diff line number Diff line
@@ -180,7 +180,7 @@ public class DiscreteOpsSqlRegistry extends DiscreteOpsRegistry {
                ChronoUnit.MILLIS).toEpochMilli());
        List<DiscreteOp> discreteOps = mDiscreteOpsDbHelper.getDiscreteOps(filter, uidFilter,
                packageNameFilter, attributionTagFilter, opCodes, opFlagsFilter, beginTimeMillis,
                endTimeMillis, -1, null);
                endTimeMillis, -1, null, false);

        LongSparseArray<AttributionChain> attributionChains = null;
        if (assembleChains) {
@@ -213,14 +213,15 @@ public class DiscreteOpsSqlRegistry extends DiscreteOpsRegistry {
            @AppOpsManager.HistoricalOpsRequestFilter int filter, int dumpOp,
            @NonNull SimpleDateFormat sdf, @NonNull Date date, @NonNull String prefix,
            int nDiscreteOps) {
        writeAndClearOldAccessHistory();
        // flush the cache into database before dump.
        mDiscreteOpsDbHelper.insertDiscreteOps(mDiscreteOpCache.getAllEventsAndClear());
        IntArray opCodes = new IntArray();
        if (dumpOp != AppOpsManager.OP_NONE) {
            opCodes.add(dumpOp);
        }
        List<DiscreteOp> discreteOps = mDiscreteOpsDbHelper.getDiscreteOps(filter, uidFilter,
                packageNameFilter, attributionTagFilter, opCodes, 0, -1,
                -1, nDiscreteOps, DiscreteOpsTable.Columns.ACCESS_TIME);
                -1, nDiscreteOps, DiscreteOpsTable.Columns.ACCESS_TIME, false);

        pw.print(prefix);
        pw.print("Largest chain id: ");