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

Commit 146ec916 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6408566 from c69d7817 to mainline-release

Change-Id: I2e798b7bba6ff31b4f2aa5e22fce0dc11515c822
parents fc675e87 c69d7817
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -76,9 +76,14 @@ stubs_defaults {
    name: "metalava-non-updatable-api-stubs-default",
    defaults: ["metalava-base-api-stubs-default"],
    sdk_version: "core_platform",
    libs: ["framework-all"],
    // There are a few classes from modules used as type arguments that
    // need to be resolved by metalava. For now, we can use a previously
    // finalized stub library to resolve them. If a new class gets added,
    // this may be need to be revisited to use a manually maintained stub
    // library with empty classes in order to resolve those references.
    libs: ["sdk_system_29_android"],
    aidl: {
        local_include_dirs: ["apex/media/framework/java"],
        local_include_dirs: ["apex/media/aidl/stable"],
    },
}

@@ -293,7 +298,7 @@ java_library_static {
    name: "android_module_lib_stubs_current",
    srcs: [ ":module-lib-api-stubs-docs" ],
    defaults: ["android_defaults_stubs_current"],
    libs: ["android_system_stubs_current"],
    libs: ["sdk_system_29_android"],
}

/////////////////////////////////////////////////////////////////////
+76 −31
Original line number Diff line number Diff line
@@ -21,14 +21,15 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringDef;
import android.media.MediaCodec.CryptoInfo;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.util.Pair;
import android.util.SparseArray;

import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.ParserException;
import com.google.android.exoplayer2.drm.DrmInitData.SchemeData;
import com.google.android.exoplayer2.extractor.DefaultExtractorInput;
import com.google.android.exoplayer2.extractor.Extractor;
import com.google.android.exoplayer2.extractor.ExtractorInput;
@@ -52,9 +53,6 @@ import com.google.android.exoplayer2.extractor.ts.PsExtractor;
import com.google.android.exoplayer2.extractor.ts.TsExtractor;
import com.google.android.exoplayer2.extractor.wav.WavExtractor;
import com.google.android.exoplayer2.upstream.DataReader;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DataSpec;
import com.google.android.exoplayer2.upstream.TransferListener;
import com.google.android.exoplayer2.util.ParsableByteArray;
import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.video.ColorInfo;
@@ -63,6 +61,8 @@ import java.io.EOFException;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
@@ -70,6 +70,7 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
 * Parses media container formats and extracts contained media samples and metadata.
@@ -711,11 +712,14 @@ public final class MediaParser {

    // Private constants.

    private static final String TAG = "MediaParser";
    private static final Map<String, ExtractorFactory> EXTRACTOR_FACTORIES_BY_NAME;
    private static final Map<String, Class> EXPECTED_TYPE_BY_PARAMETER_NAME;
    private static final String TS_MODE_SINGLE_PMT = "single_pmt";
    private static final String TS_MODE_MULTI_PMT = "multi_pmt";
    private static final String TS_MODE_HLS = "hls";
    @Nullable
    private static final Constructor<DrmInitData.SchemeInitData> SCHEME_INIT_DATA_CONSTRUCTOR;

    // Instance creation methods.

@@ -847,7 +851,7 @@ public final class MediaParser {
    private final OutputConsumer mOutputConsumer;
    private final String[] mParserNamesPool;
    private final PositionHolder mPositionHolder;
    private final InputReadingDataSource mDataSource;
    private final InputReadingDataReader mExoDataReader;
    private final DataReaderAdapter mScratchDataReaderAdapter;
    private final ParsableByteArrayAdapter mScratchParsableByteArrayAdapter;
    private String mParserName;
@@ -855,6 +859,7 @@ public final class MediaParser {
    private ExtractorInput mExtractorInput;
    private long mPendingSeekPosition;
    private long mPendingSeekTimeMicros;
    private boolean mLoggedSchemeInitDataCreationException;

    // Public methods.

@@ -950,11 +955,11 @@ public final class MediaParser {
            // clearBuffers() method, or similar.
            mExtractorInput =
                    new DefaultExtractorInput(
                            mDataSource,
                            mExoDataReader,
                            seekableInputReader.getPosition(),
                            seekableInputReader.getLength());
        }
        mDataSource.mInputReader = seekableInputReader;
        mExoDataReader.mInputReader = seekableInputReader;

        // TODO: Apply parameters when creating extractor instances.
        if (mExtractor == null) {
@@ -1046,7 +1051,7 @@ public final class MediaParser {
        mParserNamesPool = parserNamesPool;
        mParserName = sniff ? PARSER_NAME_UNKNOWN : parserNamesPool[0];
        mPositionHolder = new PositionHolder();
        mDataSource = new InputReadingDataSource();
        mExoDataReader = new InputReadingDataReader();
        removePendingSeek();
        mScratchDataReaderAdapter = new DataReaderAdapter();
        mScratchParsableByteArrayAdapter = new ParsableByteArrayAdapter();
@@ -1181,38 +1186,54 @@ public final class MediaParser {

    // Private classes.

    private static final class InputReadingDataSource implements DataSource {
    private static final class InputReadingDataReader implements DataReader {

        public InputReader mInputReader;

        @Override
        public void addTransferListener(TransferListener transferListener) {
            // Do nothing.
        public int read(byte[] buffer, int offset, int readLength) throws IOException {
            return mInputReader.read(buffer, offset, readLength);
        }

        @Override
        public long open(DataSpec dataSpec) {
            throw new UnsupportedOperationException();
    }

        @Override
        public int read(byte[] buffer, int offset, int readLength) throws IOException {
            return mInputReader.read(buffer, offset, readLength);
    private static final class MediaParserDrmInitData extends DrmInitData {

        private final SchemeInitData[] mSchemeDatas;

        private MediaParserDrmInitData(com.google.android.exoplayer2.drm.DrmInitData exoDrmInitData)
                throws IllegalAccessException, InstantiationException, InvocationTargetException {
            mSchemeDatas = new SchemeInitData[exoDrmInitData.schemeDataCount];
            for (int i = 0; i < mSchemeDatas.length; i++) {
                mSchemeDatas[i] = toFrameworkSchemeInitData(exoDrmInitData.get(i));
            }
        }

        @Override
        public Uri getUri() {
        @Nullable
        public SchemeInitData get(UUID schemeUuid) {
            for (SchemeInitData schemeInitData : mSchemeDatas) {
                if (schemeInitData.uuid.equals(schemeUuid)) {
                    return schemeInitData;
                }
            }
            return null;
        }

        @Override
        public Map<String, List<String>> getResponseHeaders() {
            return null;
        public SchemeInitData getSchemeInitDataAt(int index) {
            return mSchemeDatas[index];
        }

        @Override
        public void close() {
            throw new UnsupportedOperationException();
        public int getSchemeInitDataCount() {
            return mSchemeDatas.length;
        }

        private static DrmInitData.SchemeInitData toFrameworkSchemeInitData(
                SchemeData exoSchemeData)
                throws IllegalAccessException, InvocationTargetException, InstantiationException {
            return SCHEME_INIT_DATA_CONSTRUCTOR.newInstance(
                    exoSchemeData.uuid, exoSchemeData.mimeType, exoSchemeData.data);
        }
    }

@@ -1402,6 +1423,8 @@ public final class MediaParser {
        setOptionalMediaFormatInt(result, MediaFormat.KEY_PCM_ENCODING, format.pcmEncoding);
        setOptionalMediaFormatInt(result, MediaFormat.KEY_ROTATION, format.rotationDegrees);
        setOptionalMediaFormatInt(result, MediaFormat.KEY_SAMPLE_RATE, format.sampleRate);
        setOptionalMediaFormatInt(
                result, MediaFormat.KEY_CAPTION_SERVICE_NUMBER, format.accessibilityChannel);

        int selectionFlags = format.selectionFlags;
        result.setInteger(
@@ -1427,15 +1450,16 @@ public final class MediaParser {
            result.setInteger(MediaFormat.KEY_PIXEL_ASPECT_RATIO_HEIGHT, parHeight);
            result.setFloat("pixel-width-height-ratio-float", format.pixelWidthHeightRatio);
        }

        if (format.drmInitData != null) {
            // The crypto mode is propagated along with sample metadata. We also include it in the
            // format for convenient use from ExoPlayer.
            result.setString("crypto-mode-fourcc", format.drmInitData.schemeType);
        }
        // LACK OF SUPPORT FOR:
        //    format.accessibilityChannel;
        //    format.containerMimeType;
        //    format.id;
        //    format.metadata;
        //    format.roleFlags;
        //    format.stereoMode;
        //    format.subsampleOffsetUs;
        return result;
    }

@@ -1452,11 +1476,20 @@ public final class MediaParser {
        }
    }

    private static DrmInitData toFrameworkDrmInitData(
            com.google.android.exoplayer2.drm.DrmInitData drmInitData) {
        // TODO: Implement.
    private DrmInitData toFrameworkDrmInitData(
            com.google.android.exoplayer2.drm.DrmInitData exoDrmInitData) {
        try {
            return exoDrmInitData != null && SCHEME_INIT_DATA_CONSTRUCTOR != null
                    ? new MediaParserDrmInitData(exoDrmInitData)
                    : null;
        } catch (Throwable e) {
            if (!mLoggedSchemeInitDataCreationException) {
                mLoggedSchemeInitDataCreationException = true;
                Log.e(TAG, "Unable to create SchemeInitData instance.");
            }
            return null;
        }
    }

    private static CryptoInfo toCryptoInfo(TrackOutput.CryptoData encryptionData) {
        // TODO: Implement.
@@ -1525,5 +1558,17 @@ public final class MediaParser {
        expectedTypeByParameterName.put(PARAMETER_TS_DETECT_ACCESS_UNITS, Boolean.class);
        expectedTypeByParameterName.put(PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS, Boolean.class);
        EXPECTED_TYPE_BY_PARAMETER_NAME = Collections.unmodifiableMap(expectedTypeByParameterName);

        // TODO: Use constructor statically when available.
        Constructor<DrmInitData.SchemeInitData> constructor;
        try {
            constructor =
                    DrmInitData.SchemeInitData.class.getConstructor(
                            UUID.class, String.class, byte[].class);
        } catch (Throwable e) {
            Log.e(TAG, "Unable to get SchemeInitData constructor.");
            constructor = null;
        }
        SCHEME_INIT_DATA_CONSTRUCTOR = constructor;
    }
}
+13 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ package android.app {
  }

  public class ActivityOptions {
    method @NonNull public static android.app.ActivityOptions makeCustomAnimation(@NonNull android.content.Context, int, int, @Nullable android.os.Handler, @Nullable android.app.ActivityOptions.OnAnimationStartedListener, @Nullable android.app.ActivityOptions.OnAnimationFinishedListener);
    method public static void setExitTransitionTimeout(long);
    method public void setLaunchActivityType(int);
    method public void setLaunchTaskId(int);
@@ -115,6 +116,14 @@ package android.app {
    method public void setTaskOverlay(boolean, boolean);
  }

  public static interface ActivityOptions.OnAnimationFinishedListener {
    method public void onAnimationFinished();
  }

  public static interface ActivityOptions.OnAnimationStartedListener {
    method public void onAnimationStarted();
  }

  public class ActivityTaskManager {
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public void clearLaunchParamsForPackages(java.util.List<java.lang.String>);
    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public String listAllStacks();
@@ -2263,7 +2272,11 @@ package android.os {

  public class Environment {
    method public static java.io.File buildPath(java.io.File, java.lang.String...);
    method @NonNull public static java.io.File getOdmDirectory();
    method @NonNull public static java.io.File getOemDirectory();
    method @NonNull public static java.io.File getProductDirectory();
    method @NonNull public static java.io.File getSystemExtDirectory();
    method @NonNull public static java.io.File getVendorDirectory();
  }

  public final class FileUtils {
+1 −2
Original line number Diff line number Diff line
@@ -139,8 +139,7 @@ void StatsLogProcessor::onPeriodicAlarmFired(
}

void StatsLogProcessor::mapIsolatedUidToHostUidIfNecessaryLocked(LogEvent* event) const {
    if (android::util::AtomsInfo::kAtomsWithAttributionChain.find(event->GetTagId()) !=
        android::util::AtomsInfo::kAtomsWithAttributionChain.end()) {
    if (event->getAttributionChainIndex() != -1) {
        for (auto& value : *(event->getMutableValues())) {
            if (value.mField.getPosAtDepth(0) > kAttributionField) {
                break;
+4 −7
Original line number Diff line number Diff line
@@ -49,11 +49,9 @@ using namespace std;
 */
void mapAndMergeIsolatedUidsToHostUid(vector<shared_ptr<LogEvent>>& data, const sp<UidMap>& uidMap,
                                      int tagId, const vector<int>& additiveFieldsVec) {
    bool hasAttributionChain = (android::util::AtomsInfo::kAtomsWithAttributionChain.find(tagId) !=
                                android::util::AtomsInfo::kAtomsWithAttributionChain.end());
    // To check if any LogEvent has a uid field, we can just check the first
    // LogEvent because all atoms with this tagId should have the uid
    // annotation.
    // Check the first LogEvent for attribution chain or a uid field as either all atoms with this
    // tagId have them or none of them do.
    const bool hasAttributionChain = data[0]->getAttributionChainIndex() != -1;
    bool hasUidField = (data[0]->getUidFieldIndex() != -1);

    if (!hasAttributionChain && !hasUidField) {
@@ -67,8 +65,7 @@ void mapAndMergeIsolatedUidsToHostUid(vector<shared_ptr<LogEvent>>& data, const
            ALOGE("Wrong atom. Expecting %d, got %d", tagId, event->GetTagId());
            return;
        }
        if (android::util::AtomsInfo::kAtomsWithAttributionChain.find(tagId) !=
            android::util::AtomsInfo::kAtomsWithAttributionChain.end()) {
        if (event->getAttributionChainIndex() != -1) {
            for (auto& value : *(event->getMutableValues())) {
                if (value.mField.getPosAtDepth(0) > kAttributionField) {
                    break;
Loading