diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2019-10-25 19:31:56 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2019-10-25 19:31:56 -0700 |
commit | 5637670446b7ab552caa31683ded95508fc3281c (patch) | |
tree | 31d6bbb4770eb1de3b11564e107d343b59720d11 | |
parent | 2123ba2ae4156984c335cd898eefcffc8e7c1098 (diff) | |
parent | 5b59411dcd0cdae9036f84c76139bb300626d822 (diff) | |
download | android_packages_apps_Gallery2-5637670446b7ab552caa31683ded95508fc3281c.tar.gz android_packages_apps_Gallery2-5637670446b7ab552caa31683ded95508fc3281c.tar.bz2 android_packages_apps_Gallery2-5637670446b7ab552caa31683ded95508fc3281c.zip |
Merge 5b59411dcd0cdae9036f84c76139bb300626d822 on remote branch
Change-Id: I39503978332b10c2e2d0b694fec3b962d91f44e2
-rwxr-xr-x[-rw-r--r--] | gallerycommon/src/com/android/gallery3d/common/ApiHelper.java | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | gallerycommon/src/com/android/gallery3d/exif/ExifParser.java | 82 | ||||
-rwxr-xr-x | src/com/android/gallery3d/app/GestureControllerOverlay.java | 2 | ||||
-rwxr-xr-x | src/com/android/gallery3d/data/LocalImage.java | 3 | ||||
-rwxr-xr-x[-rw-r--r--] | src/com/android/gallery3d/data/MediaDetails.java | 7 | ||||
-rwxr-xr-x[-rw-r--r--] | src/com/android/gallery3d/data/MediaItem.java | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | src/org/codeaurora/gallery3d/video/SpeakerHooker.java | 25 |
8 files changed, 91 insertions, 33 deletions
diff --git a/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java b/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java index da36f9d4e..4b8d961d2 100644..100755 --- a/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java +++ b/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java @@ -370,6 +370,7 @@ public class ApiHelper { public static class AudioSystem { public static final int FORCE_NONE = 0; public static final int FORCE_SPEAKER = 1; + public static final int FORCE_NO_BT_A2DP = 10; public static final int FOR_MEDIA = 1; diff --git a/gallerycommon/src/com/android/gallery3d/exif/ExifParser.java b/gallerycommon/src/com/android/gallery3d/exif/ExifParser.java index 5621c2339..ec653e9aa 100644..100755 --- a/gallerycommon/src/com/android/gallery3d/exif/ExifParser.java +++ b/gallerycommon/src/com/android/gallery3d/exif/ExifParser.java @@ -143,6 +143,9 @@ class ExifParser { protected static final int DEFAULT_IFD0_OFFSET = 8; + //HEIC header + protected static final int HEIC_HEADER = 0x68656963; + private final CountedDataInputStream mTiffStream; private final int mOptions; private int mIfdStartOffset = 0; @@ -753,37 +756,66 @@ class ExifParser { private boolean seekTiffData(InputStream inputStream) throws IOException, ExifInvalidFormatException { CountedDataInputStream dataStream = new CountedDataInputStream(inputStream); - if (dataStream.readShort() != JpegHeader.SOI) { - throw new ExifInvalidFormatException("Invalid JPEG format"); - } - - short marker = dataStream.readShort(); - while (marker != JpegHeader.EOI - && !JpegHeader.isSofMarker(marker)) { - int length = dataStream.readUnsignedShort(); - // Some invalid formatted image contains multiple APP1, - // try to find the one with Exif data. - if (marker == JpegHeader.APP1) { - int header = 0; - short headerTail = 0; - if (length >= 8) { - header = dataStream.readInt(); - headerTail = dataStream.readShort(); - length -= 6; - if (header == EXIF_HEADER && headerTail == EXIF_HEADER_TAIL) { - mTiffStartPosition = dataStream.getReadByteCount(); - mApp1End = length; - mOffsetToApp1EndFromSOF = mTiffStartPosition + mApp1End; - return true; + if (dataStream.readShort() == JpegHeader.SOI) { + short marker = dataStream.readShort(); + while (marker != JpegHeader.EOI + && !JpegHeader.isSofMarker(marker)) { + int length = dataStream.readUnsignedShort(); + // Some invalid formatted image contains multiple APP1, + // try to find the one with Exif data. + if (marker == JpegHeader.APP1) { + int header = 0; + short headerTail = 0; + if (length >= 8) { + header = dataStream.readInt(); + headerTail = dataStream.readShort(); + length -= 6; + if (header == EXIF_HEADER && headerTail == EXIF_HEADER_TAIL) { + mTiffStartPosition = dataStream.getReadByteCount(); + mApp1End = length; + mOffsetToApp1EndFromSOF = mTiffStartPosition + mApp1End; + return true; + } } } + if (length < 2 || (length - 2) != dataStream.skip(length - 2)) { + Log.w(TAG, "Invalid JPEG format."); + return false; + } + marker = dataStream.readShort(); } - if (length < 2 || (length - 2) != dataStream.skip(length - 2)) { - Log.w(TAG, "Invalid JPEG format."); + + + } else{ + dataStream.skip(6); + if (dataStream.readInt() == HEIC_HEADER) { + while(true){ + try{ + short marker = dataStream.readShort(); + if (marker == JpegHeader.APP1) { + int header = 0; + short headerTail = 0; + int length = dataStream.readUnsignedShort(); + header = dataStream.readInt(); + headerTail = dataStream.readShort(); + if (header == EXIF_HEADER && headerTail == EXIF_HEADER_TAIL) { + mTiffStartPosition = dataStream.getReadByteCount(); + mApp1End = length; + mOffsetToApp1EndFromSOF = mTiffStartPosition + mApp1End; + return true; + } + } + }catch (Exception e){ + break; + } + } return false; + } else { + throw new ExifInvalidFormatException("Invalid JPEG format"); } - marker = dataStream.readShort(); + } + return false; } diff --git a/src/com/android/gallery3d/app/GestureControllerOverlay.java b/src/com/android/gallery3d/app/GestureControllerOverlay.java index efed3e9d3..9060490c4 100755 --- a/src/com/android/gallery3d/app/GestureControllerOverlay.java +++ b/src/com/android/gallery3d/app/GestureControllerOverlay.java @@ -220,7 +220,7 @@ public class GestureControllerOverlay extends FrameLayout implements } float targetBrightness = (float) (mStartBrightness + adjustPercent * 1.0f); if (targetBrightness <= 0.0f) { - targetBrightness = 0.0f; + targetBrightness = 0.004f; } else if (targetBrightness >= 1.0f) { targetBrightness = 1.0f; } diff --git a/src/com/android/gallery3d/data/LocalImage.java b/src/com/android/gallery3d/data/LocalImage.java index 2743a3e32..1b5c88b26 100755 --- a/src/com/android/gallery3d/data/LocalImage.java +++ b/src/com/android/gallery3d/data/LocalImage.java @@ -356,7 +356,8 @@ public class LocalImage extends LocalMediaItem { public MediaDetails getDetails() { MediaDetails details = super.getDetails(); details.addDetail(MediaDetails.INDEX_ORIENTATION, Integer.valueOf(rotation)); - if (MIME_TYPE_JPEG.equals(mimeType)) { + if (MIME_TYPE_JPEG.equals(mimeType) || MIME_TYPE_HEIF.equals(mimeType) || + MIME_TYPE_HEIC.equals(mimeType)) { // ExifInterface returns incorrect values for photos in other format. // For example, the width and height of an webp images is always '0'. MediaDetails.extractExifInfo(details, filePath); diff --git a/src/com/android/gallery3d/data/MediaDetails.java b/src/com/android/gallery3d/data/MediaDetails.java index 2a501c7c5..359eeebd4 100644..100755 --- a/src/com/android/gallery3d/data/MediaDetails.java +++ b/src/com/android/gallery3d/data/MediaDetails.java @@ -166,5 +166,12 @@ public class MediaDetails implements Iterable<Entry<Integer, Object>> { focalTag.getValueAsRational(0).toDouble()); details.setUnit(MediaDetails.INDEX_FOCAL_LENGTH, R.string.unit_mm); } + ExifTag latitudeTag = exif.getTag(ExifInterface.TAG_GPS_LATITUDE); + ExifTag longitudeTag = exif.getTag(ExifInterface.TAG_GPS_LONGITUDE); + if (latitudeTag != null && longitudeTag != null) { + double latitude = latitudeTag.getValueAsRational(0).toDouble(); + double longitude = longitudeTag.getValueAsRational(0).toDouble(); + details.addDetail(MediaDetails.INDEX_LOCATION, new double[] {latitude, longitude}); + } } } diff --git a/src/com/android/gallery3d/data/MediaItem.java b/src/com/android/gallery3d/data/MediaItem.java index c27667c7b..da5813613 100644..100755 --- a/src/com/android/gallery3d/data/MediaItem.java +++ b/src/com/android/gallery3d/data/MediaItem.java @@ -37,6 +37,8 @@ public abstract class MediaItem extends MediaObject { public static final int IMAGE_ERROR = -1; public static final String MIME_TYPE_JPEG = "image/jpeg"; + public static final String MIME_TYPE_HEIF = "image/heif"; + public static final String MIME_TYPE_HEIC = "image/heic"; public static final String MIME_TYPE_GIF = "image/gif"; private static final int BYTESBUFFE_POOL_SIZE = 4; diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java index 95f8fd258..9f6af5a9a 100644..100755 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterSharpen.java @@ -34,7 +34,7 @@ public class ImageFilterSharpen extends ImageFilterRS { } public FilterRepresentation getDefaultRepresentation() { - FilterRepresentation representation = new FilterBasicRepresentation("Sharpen", 0, 0, 100); + FilterRepresentation representation = new FilterBasicRepresentation("Sharpen", -100, 0, 100); representation.setSerializationName(SERIALIZATION_NAME); representation.setShowParameterValue(true); representation.setFilterClass(ImageFilterSharpen.class); diff --git a/src/org/codeaurora/gallery3d/video/SpeakerHooker.java b/src/org/codeaurora/gallery3d/video/SpeakerHooker.java index 912de96a5..3ba641ec7 100644..100755 --- a/src/org/codeaurora/gallery3d/video/SpeakerHooker.java +++ b/src/org/codeaurora/gallery3d/video/SpeakerHooker.java @@ -51,7 +51,7 @@ public class SpeakerHooker extends MovieHooker { private MenuItem mMenuSpeakerButton; - private boolean mIsHeadsetOn = false; + private static boolean mIsHeadsetOn = false; @Override public void onCreate(Bundle savedInstanceState) { @@ -154,7 +154,12 @@ public class SpeakerHooker extends MovieHooker { if (isSpeakerOn()) { turnSpeakerOff(); } else { - if (mIsHeadsetOn) { + if (mAudioManager == null) { + initAudioManager(); + } + boolean isBluetoothOn = mAudioManager.isBluetoothA2dpOn() || + mAudioManager.isBluetoothScoOn(); + if (mIsHeadsetOn || isBluetoothOn) { turnSpeakerOn(); } else { Toast.makeText(getContext(), getContext().getString(R.string.speaker_need_headset), @@ -168,8 +173,16 @@ public class SpeakerHooker extends MovieHooker { if (mAudioManager == null) { initAudioManager(); } - AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, - AudioSystem.FORCE_SPEAKER); + boolean isBluetoothOn = mAudioManager.isBluetoothA2dpOn() || + mAudioManager.isBluetoothScoOn(); + if (isBluetoothOn) { + AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, + AudioSystem.FORCE_NO_BT_A2DP); + } else { + AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, + AudioSystem.FORCE_SPEAKER); + + } } private void turnSpeakerOff() { @@ -199,7 +212,9 @@ public class SpeakerHooker extends MovieHooker { private boolean isSpeakerOn() { return (AudioSystem.FORCE_SPEAKER - == AudioSystem.getForceUse(AudioSystem.FOR_MEDIA)); + == AudioSystem.getForceUse(AudioSystem.FOR_MEDIA)) || + (AudioSystem.FORCE_NO_BT_A2DP + == AudioSystem.getForceUse(AudioSystem.FOR_MEDIA)); } } |