From 24fc7a924a096673228c9166fe5bbf397e8d26f3 Mon Sep 17 00:00:00 2001 From: cuichao <915965998@qq.com> Date: Thu, 16 Jul 2020 16:27:09 +0800 Subject: [PATCH 1/9] fix mPathList nullpointexception bug --- .../java/com/yanzhenjie/album/app/gallery/GalleryActivity.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/album/src/main/java/com/yanzhenjie/album/app/gallery/GalleryActivity.java b/album/src/main/java/com/yanzhenjie/album/app/gallery/GalleryActivity.java index d0296c7..65de4a8 100644 --- a/album/src/main/java/com/yanzhenjie/album/app/gallery/GalleryActivity.java +++ b/album/src/main/java/com/yanzhenjie/album/app/gallery/GalleryActivity.java @@ -60,6 +60,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { assert argument != null; mWidget = argument.getParcelable(Album.KEY_INPUT_WIDGET); mPathList = argument.getStringArrayList(Album.KEY_INPUT_CHECKED_LIST); + if (mPathList == null) { + mPathList = new ArrayList<>(); + } mCurrentPosition = argument.getInt(Album.KEY_INPUT_CURRENT_POSITION); mCheckable = argument.getBoolean(Album.KEY_INPUT_GALLERY_CHECKABLE); From 5110b74275ed5f79fda856aa519e81b4d1ccce86 Mon Sep 17 00:00:00 2001 From: cuichao <915965998@qq.com> Date: Thu, 16 Jul 2020 16:43:11 +0800 Subject: [PATCH 2/9] temporary solution adaptation android 10 --- album/src/main/AndroidManifest.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/album/src/main/AndroidManifest.xml b/album/src/main/AndroidManifest.xml index a59a969..8ddc2ff 100644 --- a/album/src/main/AndroidManifest.xml +++ b/album/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - - - @@ -25,7 +25,7 @@ android:layout_alignParentBottom="true" android:background="@color/albumSheetBottom"> - - - - diff --git a/album/src/main/res/layout/album_item_content_video.xml b/album/src/main/res/layout/album_item_content_video.xml index 27b4de2..c1ca22a 100644 --- a/album/src/main/res/layout/album_item_content_video.xml +++ b/album/src/main/res/layout/album_item_content_video.xml @@ -30,7 +30,7 @@ android:layout_alignParentEnd="true" android:layout_alignParentRight="true"> - diff --git a/album/src/main/res/layout/album_item_dialog_folder.xml b/album/src/main/res/layout/album_item_dialog_folder.xml index 88da0ab..2ddf7e4 100644 --- a/album/src/main/res/layout/album_item_dialog_folder.xml +++ b/album/src/main/res/layout/album_item_dialog_folder.xml @@ -29,7 +29,7 @@ android:contentDescription="@string/album_title" android:scaleType="centerCrop"/> - - - - \ No newline at end of file + \ No newline at end of file diff --git a/album/src/main/res/layout/album_toolbar_light.xml b/album/src/main/res/layout/album_toolbar_light.xml index 43b7a6c..15de099 100644 --- a/album/src/main/res/layout/album_toolbar_light.xml +++ b/album/src/main/res/layout/album_toolbar_light.xml @@ -14,12 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. --> - - - \ No newline at end of file + \ No newline at end of file diff --git a/config.gradle b/config.gradle index 19a4349..53ac197 100644 --- a/config.gradle +++ b/config.gradle @@ -8,11 +8,11 @@ ext { android = [ applicationId : "com.yanzhenjie.album.sample", - compileSdkVersion: 28, - buildToolsVersion: "28.0.3", + compileSdkVersion: 29, + buildToolsVersion: "29.0.3", minSdkVersion : 14, - targetSdkVersion : 28, + targetSdkVersion : 29, versionCode : 27, versionName : "2.1.3", @@ -46,10 +46,10 @@ ext { dependencies = [ mediaScanner: 'com.yanzhenjie:mediascanner:1.0.3', - design : 'com.android.support:design:28.0.0', - appCompat : 'com.android.support:appcompat-v7:28.0.0', - recyclerView: 'com.android.support:recyclerview-v7:28.0.0', - cardView : 'com.android.support:cardview-v7:28.0.0', + design : 'com.google.android.material:material:1.0.0', + appCompat : 'androidx.appcompat:appcompat:1.0.0', + recyclerView: 'androidx.recyclerview:recyclerview:1.0.0', + cardView : 'androidx.cardview:cardview:1.0.0', album : 'com.yanzhenjie:album:2.1.3', glide : 'com.github.bumptech.glide:glide:3.8.0' diff --git a/gradle.properties b/gradle.properties index 01e0ac2..a964ca0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,5 @@ +android.enableJetifier=true +android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m #systemProp.http.proxyHost=127.0.0.1 #systemProp.http.proxyPort=12333 diff --git a/sample/build.gradle b/sample/build.gradle index 3da51bd..0f533df 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -11,15 +11,20 @@ android { versionCode rootProject.ext.android.versionCode versionName rootProject.ext.android.versionName } + + //解决 More than one file was found with OS independent path 'META-INF/DEPENDENCIES' + packagingOptions { + exclude 'META-INF/proguard/androidx-annotations.pro' + } } dependencies { implementation project(":album") // implementation rootProject.ext.dependencies.album - implementation 'com.facebook.fresco:fresco:1.11.0' - implementation "com.github.piasy:BigImageViewer:1.5.6" - implementation "com.github.piasy:FrescoImageLoader:1.5.6" - implementation 'com.github.piasy:FrescoImageViewFactory:1.5.6' + implementation 'com.facebook.fresco:fresco:2.1.0' + implementation "com.github.piasy:BigImageViewer:1.6.2" + implementation "com.github.piasy:FrescoImageLoader:1.6.2" + implementation 'com.github.piasy:FrescoImageViewFactory:1.6.2' implementation rootProject.ext.dependencies.appCompat implementation rootProject.ext.dependencies.design diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java b/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java index a7e495b..f7a01c6 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java @@ -19,7 +19,9 @@ import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; -import android.support.annotation.NonNull; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -46,13 +48,13 @@ public class FrescoLoader implements AlbumLoader { @Override public void load(ImageView imageView, AlbumFile albumFile) { - load(imageView, "file://" + albumFile.getPath()); + load(imageView, albumFile.getUri()); } @Override - public void load(ImageView imageView, String url) { + public void load(ImageView imageView, Uri uri) { if (imageView instanceof SimpleDraweeView) { - ((SimpleDraweeView) imageView).setImageURI(url); + ((SimpleDraweeView)imageView).setImageURI(uri); } } @@ -63,7 +65,7 @@ public View getPreviewView(Context context, AlbumFile albumFile, final View.OnCl final AttacherImageView view = new AttacherImageView(context); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); DataSource> dataSource = Fresco.getImagePipeline() - .fetchDecodedImage(ImageRequest.fromUri("file://" + albumFile.getPath()), context); + .fetchDecodedImage(ImageRequest.fromUri(albumFile.getUri()), context); dataSource.subscribe(new BaseBitmapDataSubscriber() { @Override protected void onNewResultImpl(Bitmap bitmap) { @@ -95,25 +97,28 @@ public boolean onLongClick(View v) { view.setAttacher(attacher); return view; } else { - return getPreviewView(context, "file://" + albumFile.getPath(), onClickListener, longClickListener); + return getPreviewView(context, albumFile.getUri(), onClickListener, longClickListener); } } @NonNull @Override - public View getPreviewView(Context context, String url, View.OnClickListener onClickListener, final View.OnClickListener longClickListener) { + public View getPreviewView(Context context, Uri uri, @Nullable View.OnClickListener onClickListener, final @Nullable View.OnClickListener longClickListener) { final BigImageView view = new BigImageView(context); view.setImageViewFactory(new FrescoImageViewFactory()); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - view.showImage(Uri.parse(url)); + view.showImage(uri); view.setOnClickListener(onClickListener); view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - longClickListener.onClick(view); + if (longClickListener != null) { + longClickListener.onClick(view); + } return true; } }); return view; } + } \ No newline at end of file diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/MainActivity.java b/sample/src/main/java/com/yanzhenjie/album/sample/MainActivity.java index e99e465..3ff9f05 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/MainActivity.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/MainActivity.java @@ -17,9 +17,9 @@ import android.content.Intent; import android.os.Bundle; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import android.view.View; import com.yanzhenjie.album.sample.app.AlbumActivity; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/MediaLoader.java b/sample/src/main/java/com/yanzhenjie/album/sample/MediaLoader.java index efd47d9..10938ce 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/MediaLoader.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/MediaLoader.java @@ -16,7 +16,9 @@ package com.yanzhenjie.album.sample; import android.content.Context; -import android.support.annotation.NonNull; +import android.net.Uri; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -34,13 +36,13 @@ public class MediaLoader implements AlbumLoader { @Override public void load(ImageView imageView, AlbumFile albumFile) { - load(imageView, albumFile.getPath()); + load(imageView, albumFile.getUri()); } @Override - public void load(ImageView imageView, String url) { + public void load(ImageView imageView, Uri uri) { Glide.with(imageView.getContext()) - .load(url) + .load(uri) .error(R.drawable.placeholder) .placeholder(R.drawable.placeholder) .crossFade() @@ -50,15 +52,15 @@ public void load(ImageView imageView, String url) { @NonNull @Override public View getPreviewView(Context context, AlbumFile albumFile, final View.OnClickListener onClickListener, final View.OnClickListener longClickListener) { - return getPreviewView(context, albumFile.getPath(), onClickListener, longClickListener); + return getPreviewView(context, albumFile.getUri(), onClickListener, longClickListener); } @NonNull @Override - public View getPreviewView(Context context, String url, final View.OnClickListener onClickListener, final View.OnClickListener longClickListener) { + public View getPreviewView(Context context, Uri uri, @Nullable final View.OnClickListener onClickListener, @Nullable final View.OnClickListener longClickListener) { final AttacherImageView view = new AttacherImageView(context); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - load(view, url); + load(view, uri); PhotoViewAttacher attacher = new PhotoViewAttacher(view); if (onClickListener != null) { attacher.setOnViewTapListener(new PhotoViewAttacher.OnViewTapListener() { @@ -80,4 +82,5 @@ public boolean onLongClick(View v) { view.setAttacher(attacher); return view; } + } \ No newline at end of file diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/app/Adapter.java b/sample/src/main/java/com/yanzhenjie/album/sample/app/Adapter.java index 8ac9ae7..76c2c90 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/app/Adapter.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/app/Adapter.java @@ -16,8 +16,8 @@ package com.yanzhenjie.album.sample.app; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/app/AlbumActivity.java b/sample/src/main/java/com/yanzhenjie/album/sample/app/AlbumActivity.java index 4145100..71638ef 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/app/AlbumActivity.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/app/AlbumActivity.java @@ -17,12 +17,12 @@ import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/app/AlbumFilterActivity.java b/sample/src/main/java/com/yanzhenjie/album/sample/app/AlbumFilterActivity.java index 0a02914..0adca4b 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/app/AlbumFilterActivity.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/app/AlbumFilterActivity.java @@ -18,13 +18,13 @@ import android.content.DialogInterface; import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/app/CameraActivity.java b/sample/src/main/java/com/yanzhenjie/album/sample/app/CameraActivity.java index 54c0850..cfeb797 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/app/CameraActivity.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/app/CameraActivity.java @@ -15,12 +15,13 @@ */ package com.yanzhenjie.album.sample.app; +import android.net.Uri; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.widget.ImageView; @@ -29,16 +30,17 @@ import com.yanzhenjie.album.Action; import com.yanzhenjie.album.Album; +import com.yanzhenjie.album.app.album.data.MediaReader; import com.yanzhenjie.album.sample.R; /** * Created by YanZhenjie on 2017/8/17. */ public class CameraActivity extends AppCompatActivity { - + TextView mTextView; private ImageView mImageView; - + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -48,66 +50,65 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { ActionBar actionBar = getSupportActionBar(); assert actionBar != null; actionBar.setDisplayHomeAsUpEnabled(true); - + mTextView = findViewById(R.id.tv_message); mImageView = findViewById(R.id.image_view); } - + private void takePicture() { Album.camera(this) - .image() -// .filePath() - .onResult(new Action() { - @Override - public void onAction(@NonNull String result) { - mTextView.setText(result); - - Album.getAlbumConfig() - .getAlbumLoader() - .load(mImageView, result); - } - }) - .onCancel(new Action() { - @Override - public void onAction(@NonNull String result) { - Toast.makeText(CameraActivity.this, R.string.canceled, Toast.LENGTH_LONG).show(); - } - }) - .start(); + .image() + // .filePath() + .onResult(new Action() { + @Override + public void onAction(@NonNull String result) { + mTextView.setText(result); + Album.getAlbumConfig() + .getAlbumLoader() + .load(mImageView,Uri.parse(result) ); + } + }) + .onCancel(new Action() { + @Override + public void onAction(@NonNull String result) { + Toast.makeText(CameraActivity.this, R.string.canceled, Toast.LENGTH_LONG).show(); + } + }) + .start(); } - + private void recordVideo() { Album.camera(this) - .video() -// .filePath() - .quality(1) - .limitDuration(Integer.MAX_VALUE) - .limitBytes(Integer.MAX_VALUE) - .onResult(new Action() { - @Override - public void onAction(@NonNull String result) { - mTextView.setText(result); - - Album.getAlbumConfig() - .getAlbumLoader() - .load(mImageView, result); - } - }) - .onCancel(new Action() { - @Override - public void onAction(@NonNull String result) { - Toast.makeText(CameraActivity.this, R.string.canceled, Toast.LENGTH_LONG).show(); - } - }) - .start(); + .video() + // .filePath() + .quality(1) + .limitDuration(Integer.MAX_VALUE) + .limitBytes(Integer.MAX_VALUE) + .onResult(new Action() { + @Override + public void onAction(@NonNull String result) { + mTextView.setText(result); + + Album.getAlbumConfig() + .getAlbumLoader() + .load(mImageView,Uri.parse(result) ); + } + }) + .onCancel(new Action() { + @Override + public void onAction(@NonNull String result) { + Toast.makeText(CameraActivity.this, R.string.canceled, Toast.LENGTH_LONG).show(); + } + }) + .start(); } - + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_album_camera, menu); return true; } - + @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/app/DefineStyleActivity.java b/sample/src/main/java/com/yanzhenjie/album/sample/app/DefineStyleActivity.java index bdd0886..40bd1d4 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/app/DefineStyleActivity.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/app/DefineStyleActivity.java @@ -17,12 +17,12 @@ import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/app/GalleryActivity.java b/sample/src/main/java/com/yanzhenjie/album/sample/app/GalleryActivity.java index 63496d9..8e7f5d1 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/app/GalleryActivity.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/app/GalleryActivity.java @@ -16,10 +16,10 @@ package com.yanzhenjie.album.sample.app; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import android.view.MenuItem; import android.view.View; import android.widget.CheckBox; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/app/ImageActivity.java b/sample/src/main/java/com/yanzhenjie/album/sample/app/ImageActivity.java index a08c964..f985915 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/app/ImageActivity.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/app/ImageActivity.java @@ -17,12 +17,12 @@ import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/app/VideoActivity.java b/sample/src/main/java/com/yanzhenjie/album/sample/app/VideoActivity.java index d1894c1..9aaac05 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/app/VideoActivity.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/app/VideoActivity.java @@ -17,12 +17,12 @@ import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/photoview/AttacherImageView.java b/sample/src/main/java/com/yanzhenjie/album/sample/photoview/AttacherImageView.java index 107532f..582a76e 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/photoview/AttacherImageView.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/photoview/AttacherImageView.java @@ -2,14 +2,14 @@ import android.content.Context; import android.graphics.drawable.Drawable; -import android.support.annotation.Nullable; +import androidx.annotation.Nullable; import android.util.AttributeSet; /** * Created by Yan Zhenjie on 2017/3/31. */ -public class AttacherImageView extends android.support.v7.widget.AppCompatImageView { +public class AttacherImageView extends androidx.appcompat.widget.AppCompatImageView { private PhotoViewAttacher mAttacher; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/photoview/PhotoViewAttacher.java b/sample/src/main/java/com/yanzhenjie/album/sample/photoview/PhotoViewAttacher.java index 8b15d71..72d8608 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/photoview/PhotoViewAttacher.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/photoview/PhotoViewAttacher.java @@ -22,8 +22,8 @@ import android.graphics.Matrix.ScaleToFit; import android.graphics.RectF; import android.graphics.drawable.Drawable; -import android.support.annotation.Nullable; -import android.support.v4.view.MotionEventCompat; +import androidx.annotation.Nullable; +import androidx.core.view.MotionEventCompat; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; diff --git a/sample/src/main/res/layout/activity_album.xml b/sample/src/main/res/layout/activity_album.xml index 030c2ea..79ae7eb 100644 --- a/sample/src/main/res/layout/activity_album.xml +++ b/sample/src/main/res/layout/activity_album.xml @@ -14,11 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. --> - - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_album_filter.xml b/sample/src/main/res/layout/activity_album_filter.xml index c914c76..23a7c11 100644 --- a/sample/src/main/res/layout/activity_album_filter.xml +++ b/sample/src/main/res/layout/activity_album_filter.xml @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - @@ -32,11 +32,11 @@ android:text="@string/hint_image_preview_click" android:visibility="gone" /> - - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_album_ui.xml b/sample/src/main/res/layout/activity_album_ui.xml index 061233b..aa9b0ba 100644 --- a/sample/src/main/res/layout/activity_album_ui.xml +++ b/sample/src/main/res/layout/activity_album_ui.xml @@ -13,10 +13,10 @@ See the License for the specific language governing permissions and limitations under the License. --> - + - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_camera.xml b/sample/src/main/res/layout/activity_camera.xml index 3e63d51..33d813d 100644 --- a/sample/src/main/res/layout/activity_camera.xml +++ b/sample/src/main/res/layout/activity_camera.xml @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - @@ -38,4 +38,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_gallery.xml b/sample/src/main/res/layout/activity_gallery.xml index dde472a..2500b6a 100644 --- a/sample/src/main/res/layout/activity_gallery.xml +++ b/sample/src/main/res/layout/activity_gallery.xml @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. --> - @@ -26,12 +26,12 @@ android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior"> - - - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_list_content.xml b/sample/src/main/res/layout/activity_list_content.xml index 44b594e..3a4b12d 100644 --- a/sample/src/main/res/layout/activity_list_content.xml +++ b/sample/src/main/res/layout/activity_list_content.xml @@ -31,7 +31,7 @@ android:id="@+id/image_view" style="@style/Album.WrapContent" /> - diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 992c0c2..db123c0 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -14,13 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. --> - - @@ -28,7 +28,7 @@ style="@style/Album.WrapContent.WidthMatchParent" android:orientation="vertical"> - @@ -37,39 +37,39 @@ style="@style/Album.WrapContent.WidthMatchParent" android:orientation="horizontal"> - - - - - - - + - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/album_item_content_image.xml b/sample/src/main/res/layout/album_item_content_image.xml index 483ad62..2e7df31 100644 --- a/sample/src/main/res/layout/album_item_content_image.xml +++ b/sample/src/main/res/layout/album_item_content_image.xml @@ -30,7 +30,7 @@ android:layout_alignParentEnd="true" android:layout_alignParentRight="true"> - diff --git a/sample/src/main/res/layout/album_item_content_video.xml b/sample/src/main/res/layout/album_item_content_video.xml index 98ade1f..3c0ec35 100644 --- a/sample/src/main/res/layout/album_item_content_video.xml +++ b/sample/src/main/res/layout/album_item_content_video.xml @@ -29,7 +29,7 @@ android:layout_alignParentEnd="true" android:layout_alignParentRight="true"> - diff --git a/sample/src/main/res/layout/album_item_dialog_folder.xml b/sample/src/main/res/layout/album_item_dialog_folder.xml index 5e2e34e..24b03d4 100644 --- a/sample/src/main/res/layout/album_item_dialog_folder.xml +++ b/sample/src/main/res/layout/album_item_dialog_folder.xml @@ -27,7 +27,7 @@ android:contentDescription="@string/album_title" android:scaleType="centerCrop" /> - - - - \ No newline at end of file + \ No newline at end of file diff --git a/sample/src/main/res/layout/toolbar_scroll.xml b/sample/src/main/res/layout/toolbar_scroll.xml index 6b8a9f3..1b19495 100644 --- a/sample/src/main/res/layout/toolbar_scroll.xml +++ b/sample/src/main/res/layout/toolbar_scroll.xml @@ -14,14 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. --> - - - \ No newline at end of file + \ No newline at end of file From ce3d294bf29ca0a496499503497648949b42c215 Mon Sep 17 00:00:00 2001 From: cuichao <915965998@qq.com> Date: Tue, 21 Jul 2020 10:56:27 +0800 Subject: [PATCH 6/9] add geturi method --- .../album/api/BasicCameraWrapper.java | 18 +++++------ .../album/app/album/data/PathConversion.java | 7 +++-- .../com/yanzhenjie/album/util/AlbumUtils.java | 30 +++++++++++++------ 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/album/src/main/java/com/yanzhenjie/album/api/BasicCameraWrapper.java b/album/src/main/java/com/yanzhenjie/album/api/BasicCameraWrapper.java index 91fdc88..fdbe7b0 100644 --- a/album/src/main/java/com/yanzhenjie/album/api/BasicCameraWrapper.java +++ b/album/src/main/java/com/yanzhenjie/album/api/BasicCameraWrapper.java @@ -17,24 +17,24 @@ import android.content.Context; -import androidx.annotation.Nullable; - import com.yanzhenjie.album.Action; +import androidx.annotation.Nullable; + /** * Created by YanZhenjie on 2017/8/18. */ public abstract class BasicCameraWrapper { - + Context mContext; Action mResult; Action mCancel; String mFilePath; - + public BasicCameraWrapper(Context context) { this.mContext = context; } - + /** * Set the action when result. * @@ -44,7 +44,7 @@ public final Returner onResult(Action result) { this.mResult = result; return (Returner) this; } - + /** * Set the action when canceling. * @@ -54,7 +54,7 @@ public final Returner onCancel(Action cancel) { this.mCancel = cancel; return (Returner) this; } - + /** * Set the image storage path. * @@ -64,10 +64,10 @@ public Returner filePath(@Nullable String filePath) { this.mFilePath = filePath; return (Returner) this; } - + /** * Start up. */ public abstract void start(); - + } \ No newline at end of file diff --git a/album/src/main/java/com/yanzhenjie/album/app/album/data/PathConversion.java b/album/src/main/java/com/yanzhenjie/album/app/album/data/PathConversion.java index 04d7812..a82ec35 100644 --- a/album/src/main/java/com/yanzhenjie/album/app/album/data/PathConversion.java +++ b/album/src/main/java/com/yanzhenjie/album/app/album/data/PathConversion.java @@ -17,8 +17,6 @@ import android.content.Context; import android.media.MediaPlayer; -import androidx.annotation.NonNull; -import androidx.annotation.WorkerThread; import android.text.TextUtils; import com.yanzhenjie.album.AlbumFile; @@ -27,6 +25,9 @@ import java.io.File; +import androidx.annotation.NonNull; +import androidx.annotation.WorkerThread; + /** * Created by YanZhenjie on 2017/10/18. */ @@ -48,7 +49,7 @@ public AlbumFile convert(Context context, String filePath) { File file = new File(filePath); AlbumFile albumFile = new AlbumFile(); - albumFile.setUri(AlbumUtils.getUri(context, new File(filePath))); + albumFile.setUri(AlbumUtils.getUri(context, filePath)); File parentFile = file.getParentFile(); albumFile.setBucketName(parentFile.getName()); diff --git a/album/src/main/java/com/yanzhenjie/album/util/AlbumUtils.java b/album/src/main/java/com/yanzhenjie/album/util/AlbumUtils.java index bebc908..10eb61b 100644 --- a/album/src/main/java/com/yanzhenjie/album/util/AlbumUtils.java +++ b/album/src/main/java/com/yanzhenjie/album/util/AlbumUtils.java @@ -21,19 +21,12 @@ import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Environment; -import android.os.ParcelFileDescriptor; import android.provider.MediaStore; -import androidx.annotation.ColorInt; -import androidx.annotation.IntRange; -import androidx.annotation.NonNull; -import androidx.core.graphics.drawable.DrawableCompat; import android.text.Spannable; import android.text.SpannableString; import android.text.TextUtils; @@ -46,14 +39,17 @@ import com.yanzhenjie.album.widget.divider.Divider; import java.io.File; -import java.io.FileDescriptor; -import java.io.IOException; import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.UUID; +import androidx.annotation.ColorInt; +import androidx.annotation.IntRange; +import androidx.annotation.NonNull; +import androidx.core.graphics.drawable.DrawableCompat; + /** *

Helper for album.

* Created by Yan Zhenjie on 2016/10/30. @@ -169,8 +165,24 @@ public static Uri getUri(@NonNull Context context, @NonNull File outPath) { return uri; } + /** + * Generates an externally accessed URI based on path. + * + * @param context context. + * @param outPath file path. + * @return the uri address of the file. + */ + @NonNull + public static Uri getUri(@NonNull Context context, String outPath) { + if (outPath == null) { + outPath = ""; + } + return getUri(context, new File(outPath)); + } + /** * Generates a random jpg file path in the specified directory. + * * @return file path. */ @NonNull From 02af8e2b3c806428c70a26c19b0a852f49a0506a Mon Sep 17 00:00:00 2001 From: cuichao <915965998@qq.com> Date: Tue, 21 Jul 2020 14:44:53 +0800 Subject: [PATCH 7/9] fix Thumbnail build failed bug return Thumbnail result change to uri --- .../java/com/yanzhenjie/album/AlbumFile.java | 52 +++++++++---------- .../app/album/data/ThumbnailBuilder.java | 21 ++++---- 2 files changed, 36 insertions(+), 37 deletions(-) diff --git a/album/src/main/java/com/yanzhenjie/album/AlbumFile.java b/album/src/main/java/com/yanzhenjie/album/AlbumFile.java index 0da15c4..351be81 100644 --- a/album/src/main/java/com/yanzhenjie/album/AlbumFile.java +++ b/album/src/main/java/com/yanzhenjie/album/AlbumFile.java @@ -68,9 +68,9 @@ public class AlbumFile implements Parcelable, Comparable { */ private long mDuration; /** - * Thumb path. + * Thumb path uri. */ - private String mThumbPath; + private Uri mThumbUri; /** * MediaType. */ @@ -178,12 +178,12 @@ public void setDuration(long duration) { mDuration = duration; } - public String getThumbPath() { - return mThumbPath; + public Uri getThumbUri() { + return mThumbUri; } - public void setThumbPath(String thumbPath) { - mThumbPath = thumbPath; + public void setThumbPath(Uri thumbUri) { + mThumbUri = thumbUri; } @MediaType @@ -211,6 +211,24 @@ public void setDisable(boolean disable) { this.isDisable = disable; } + @Override + public String toString() { + return "AlbumFile{" + + "uri=" + uri + + ", mBucketName='" + mBucketName + '\'' + + ", mMimeType='" + mMimeType + '\'' + + ", mAddDate=" + mAddDate + + ", mLatitude=" + mLatitude + + ", mLongitude=" + mLongitude + + ", mSize=" + mSize + + ", mDuration=" + mDuration + + ", mThumbUri='" + mThumbUri + '\'' + + ", mMediaType=" + mMediaType + + ", isChecked=" + isChecked + + ", isDisable=" + isDisable + + '}'; + } + @Override public int describeContents() { return 0; @@ -226,7 +244,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeFloat(this.mLongitude); dest.writeLong(this.mSize); dest.writeLong(this.mDuration); - dest.writeString(this.mThumbPath); + dest.writeParcelable(this.mThumbUri, flags); dest.writeInt(this.mMediaType); dest.writeByte(this.isChecked ? (byte) 1 : (byte) 0); dest.writeByte(this.isDisable ? (byte) 1 : (byte) 0); @@ -241,7 +259,7 @@ protected AlbumFile(Parcel in) { this.mLongitude = in.readFloat(); this.mSize = in.readLong(); this.mDuration = in.readLong(); - this.mThumbPath = in.readString(); + this.mThumbUri = in.readParcelable(Uri.class.getClassLoader()); this.mMediaType = in.readInt(); this.isChecked = in.readByte() != 0; this.isDisable = in.readByte() != 0; @@ -258,22 +276,4 @@ public AlbumFile[] newArray(int size) { return new AlbumFile[size]; } }; - - @Override - public String toString() { - return "AlbumFile{" + - "uri=" + uri + - ", mBucketName='" + mBucketName + '\'' + - ", mMimeType='" + mMimeType + '\'' + - ", mAddDate=" + mAddDate + - ", mLatitude=" + mLatitude + - ", mLongitude=" + mLongitude + - ", mSize=" + mSize + - ", mDuration=" + mDuration + - ", mThumbPath='" + mThumbPath + '\'' + - ", mMediaType=" + mMediaType + - ", isChecked=" + isChecked + - ", isDisable=" + isDisable + - '}'; - } } \ No newline at end of file diff --git a/album/src/main/java/com/yanzhenjie/album/app/album/data/ThumbnailBuilder.java b/album/src/main/java/com/yanzhenjie/album/app/album/data/ThumbnailBuilder.java index b45db0d..e9606b5 100644 --- a/album/src/main/java/com/yanzhenjie/album/app/album/data/ThumbnailBuilder.java +++ b/album/src/main/java/com/yanzhenjie/album/app/album/data/ThumbnailBuilder.java @@ -23,8 +23,6 @@ import android.media.MediaMetadataRetriever; import android.net.Uri; import android.os.ParcelFileDescriptor; -import androidx.annotation.Nullable; -import androidx.annotation.WorkerThread; import android.text.TextUtils; import android.webkit.URLUtil; @@ -36,6 +34,9 @@ import java.io.FileOutputStream; import java.util.HashMap; +import androidx.annotation.Nullable; +import androidx.annotation.WorkerThread; + /** * Created by YanZhenjie on 2017/10/15. */ @@ -64,7 +65,7 @@ public ThumbnailBuilder(Context context) { */ @WorkerThread @Nullable - public String createThumbnailForImage(Context context, Uri imageUri, String mimeType) { + public Uri createThumbnailForImage(Context context, Uri imageUri, String mimeType) { if (imageUri == null || TextUtils.isEmpty(imageUri.toString())) { return null; } @@ -76,7 +77,7 @@ public String createThumbnailForImage(Context context, Uri imageUri, String mime File thumbnailFile = randomPath(imageUri.toString()); if (thumbnailFile.exists()) { - return thumbnailFile.getAbsolutePath(); + return AlbumUtils.getUri(context, thumbnailFile.getAbsolutePath()); } Bitmap inBitmap = readImageFromPath(context, imageUri, THUMBNAIL_SIZE, THUMBNAIL_SIZE, mimeType); @@ -94,7 +95,7 @@ public String createThumbnailForImage(Context context, Uri imageUri, String mime writeStream.write(compressStream.toByteArray()); writeStream.flush(); writeStream.close(); - return thumbnailFile.getAbsolutePath(); + return AlbumUtils.getUri(context, thumbnailFile.getAbsolutePath()); } catch (Exception ignored) { return null; } @@ -108,14 +109,14 @@ public String createThumbnailForImage(Context context, Uri imageUri, String mime */ @WorkerThread @Nullable - public String createThumbnailForVideo(Context context, Uri videoUri) { + public Uri createThumbnailForVideo(Context context, Uri videoUri) { if (videoUri == null || TextUtils.isEmpty(videoUri.toString())) { return null; } File thumbnailFile = randomPath(videoUri.toString()); if (thumbnailFile.exists()) { - return thumbnailFile.getAbsolutePath(); + return AlbumUtils.getUri(context, thumbnailFile.getAbsolutePath()); } try { @@ -130,7 +131,7 @@ public String createThumbnailForVideo(Context context, Uri videoUri) { Bitmap bitmap = retriever.getFrameAtTime(); thumbnailFile.createNewFile(); bitmap.compress(Bitmap.CompressFormat.JPEG, THUMBNAIL_QUALITY, new FileOutputStream(thumbnailFile)); - return thumbnailFile.getAbsolutePath(); + return AlbumUtils.getUri(context, thumbnailFile.getAbsolutePath()); } catch (Exception ignored) { return null; } @@ -160,13 +161,11 @@ public static Bitmap readImageFromPath(Context context, Uri imageUri, int width, options.inSampleSize = computeSampleSize(options, width, height); Bitmap sampledBitmap = null; boolean attemptSuccess = false; - int attempt = 0; - while (!attemptSuccess && attempt < 3) { + while (!attemptSuccess ) { try { sampledBitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor, null, options); attemptSuccess = true; } catch (Exception e) { - ++attempt; options.inSampleSize *= 2; } } From e3f134a67812066835f2e9cad9c0e363c80ddbba Mon Sep 17 00:00:00 2001 From: cuichao <915965998@qq.com> Date: Wed, 22 Jul 2020 18:59:57 +0800 Subject: [PATCH 8/9] modify the parameters returned by recording video and taking photos optimize fresco image loader --- .../com/yanzhenjie/album/AlbumCameraFile.java | 103 ++++++++++++++++++ .../album/api/BasicCameraWrapper.java | 5 +- .../album/app/album/AlbumActivity.java | 22 ++-- .../album/app/album/NullActivity.java | 9 +- .../album/app/camera/CameraActivity.java | 5 +- .../yanzhenjie/album/sample/FrescoLoader.java | 21 +++- .../yanzhenjie/album/sample/FrescoUtils.java | 81 ++++++++++++++ .../album/sample/app/CameraActivity.java | 29 ++--- 8 files changed, 239 insertions(+), 36 deletions(-) create mode 100644 album/src/main/java/com/yanzhenjie/album/AlbumCameraFile.java create mode 100644 sample/src/main/java/com/yanzhenjie/album/sample/FrescoUtils.java diff --git a/album/src/main/java/com/yanzhenjie/album/AlbumCameraFile.java b/album/src/main/java/com/yanzhenjie/album/AlbumCameraFile.java new file mode 100644 index 0000000..78ba04e --- /dev/null +++ b/album/src/main/java/com/yanzhenjie/album/AlbumCameraFile.java @@ -0,0 +1,103 @@ +/* + * Copyright 2017 Yan Zhenjie. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.yanzhenjie.album; + +import android.content.Context; +import android.net.Uri; +import android.os.Parcel; +import android.os.Parcelable; + +import com.yanzhenjie.album.util.AlbumUtils; + +/** + * Created by cc on 2020/7/22. + */ +public class AlbumCameraFile implements Parcelable { + + public AlbumCameraFile(Uri uri, String path) { + this.uri = uri; + this.path = path; + } + + public static AlbumCameraFile getAlbumCameraFile(Context context, String filePath) { + return new AlbumCameraFile(AlbumUtils.getUri(context, filePath), filePath); + } + + /** + * File uri. + */ + private Uri uri; + /** + * File uri. + */ + private String path; + + public Uri getUri() { + return uri; + } + + public void setUri(Uri uri) { + this.uri = uri; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeParcelable(this.uri, flags); + dest.writeString(this.path); + } + + public AlbumCameraFile() { + } + + protected AlbumCameraFile(Parcel in) { + this.uri = in.readParcelable(Uri.class.getClassLoader()); + this.path = in.readString(); + } + + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public AlbumCameraFile createFromParcel(Parcel source) { + return new AlbumCameraFile(source); + } + + @Override + public AlbumCameraFile[] newArray(int size) { + return new AlbumCameraFile[size]; + } + }; + + @Override + public String toString() { + return "AlbumCameraFile{" + + "uri=" + uri + + ", path='" + path + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/album/src/main/java/com/yanzhenjie/album/api/BasicCameraWrapper.java b/album/src/main/java/com/yanzhenjie/album/api/BasicCameraWrapper.java index fdbe7b0..40a52eb 100644 --- a/album/src/main/java/com/yanzhenjie/album/api/BasicCameraWrapper.java +++ b/album/src/main/java/com/yanzhenjie/album/api/BasicCameraWrapper.java @@ -18,6 +18,7 @@ import android.content.Context; import com.yanzhenjie.album.Action; +import com.yanzhenjie.album.AlbumCameraFile; import androidx.annotation.Nullable; @@ -27,7 +28,7 @@ public abstract class BasicCameraWrapper { Context mContext; - Action mResult; + Action mResult; Action mCancel; String mFilePath; @@ -40,7 +41,7 @@ public BasicCameraWrapper(Context context) { * * @param result action when producing result. */ - public final Returner onResult(Action result) { + public final Returner onResult(Action result) { this.mResult = result; return (Returner) this; } diff --git a/album/src/main/java/com/yanzhenjie/album/app/album/AlbumActivity.java b/album/src/main/java/com/yanzhenjie/album/app/album/AlbumActivity.java index 181fdb9..f2c7b6e 100644 --- a/album/src/main/java/com/yanzhenjie/album/app/album/AlbumActivity.java +++ b/album/src/main/java/com/yanzhenjie/album/app/album/AlbumActivity.java @@ -19,9 +19,6 @@ import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.widget.PopupMenu; import android.text.TextUtils; import android.view.MenuItem; import android.view.View; @@ -29,6 +26,7 @@ import com.yanzhenjie.album.Action; import com.yanzhenjie.album.Album; +import com.yanzhenjie.album.AlbumCameraFile; import com.yanzhenjie.album.AlbumFile; import com.yanzhenjie.album.AlbumFolder; import com.yanzhenjie.album.Filter; @@ -49,6 +47,10 @@ import java.util.ArrayList; import java.util.List; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.PopupMenu; + /** *

Responsible for controlling the album data and the overall logic.

* Created by Yan Zhenjie on 2016/10/17. @@ -214,10 +216,10 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case CODE_ACTIVITY_NULL: { if (resultCode == RESULT_OK) { - String imagePath = NullActivity.parsePath(data); - String mimeType = AlbumUtils.getMimeType(imagePath); + AlbumCameraFile albumCameraFile = NullActivity.parseAlbumCameraFile(data); + String mimeType = AlbumUtils.getMimeType(albumCameraFile.getPath()); if (!TextUtils.isEmpty(mimeType)) { - mCameraAction.onAction(imagePath); + mCameraAction.onAction(albumCameraFile); } } else { callbackCancel(); @@ -347,16 +349,16 @@ private void takeVideo() { .start(); } - private Action mCameraAction = new Action() { + private Action mCameraAction = new Action() { @Override - public void onAction(@NonNull String result) { + public void onAction(@NonNull AlbumCameraFile result) { if (mMediaScanner == null) { mMediaScanner = new MediaScanner(AlbumActivity.this); } - mMediaScanner.scan(result); + mMediaScanner.scan(result.getPath()); PathConversion conversion = new PathConversion(sSizeFilter, sMimeFilter, sDurationFilter); PathConvertTask task = new PathConvertTask(AlbumActivity.this, conversion, AlbumActivity.this); - task.execute(result); + task.execute(result.getPath()); } }; diff --git a/album/src/main/java/com/yanzhenjie/album/app/album/NullActivity.java b/album/src/main/java/com/yanzhenjie/album/app/album/NullActivity.java index 5592934..12f29ed 100644 --- a/album/src/main/java/com/yanzhenjie/album/app/album/NullActivity.java +++ b/album/src/main/java/com/yanzhenjie/album/app/album/NullActivity.java @@ -22,6 +22,7 @@ import com.yanzhenjie.album.Action; import com.yanzhenjie.album.Album; +import com.yanzhenjie.album.AlbumCameraFile; import com.yanzhenjie.album.R; import com.yanzhenjie.album.api.widget.Widget; import com.yanzhenjie.album.app.Contract; @@ -34,8 +35,8 @@ public class NullActivity extends BaseActivity implements Contract.NullPresenter private static final String KEY_OUTPUT_IMAGE_PATH = "KEY_OUTPUT_IMAGE_PATH"; - public static String parsePath(Intent intent) { - return intent.getStringExtra(KEY_OUTPUT_IMAGE_PATH); + public static AlbumCameraFile parseAlbumCameraFile(Intent intent) { + return intent.getParcelableExtra(KEY_OUTPUT_IMAGE_PATH); } private Widget mWidget; @@ -109,9 +110,9 @@ public void takeVideo() { .start(); } - private Action mCameraAction = new Action() { + private Action mCameraAction = new Action() { @Override - public void onAction(@NonNull String result) { + public void onAction(@NonNull AlbumCameraFile result) { Intent intent = new Intent(); intent.putExtra(KEY_OUTPUT_IMAGE_PATH, result); setResult(RESULT_OK, intent); diff --git a/album/src/main/java/com/yanzhenjie/album/app/camera/CameraActivity.java b/album/src/main/java/com/yanzhenjie/album/app/camera/CameraActivity.java index 7a1eac7..64a6c5c 100644 --- a/album/src/main/java/com/yanzhenjie/album/app/camera/CameraActivity.java +++ b/album/src/main/java/com/yanzhenjie/album/app/camera/CameraActivity.java @@ -23,6 +23,7 @@ import com.yanzhenjie.album.Action; import com.yanzhenjie.album.Album; +import com.yanzhenjie.album.AlbumCameraFile; import com.yanzhenjie.album.R; import com.yanzhenjie.album.mvp.BaseActivity; import com.yanzhenjie.album.util.AlbumUtils; @@ -50,7 +51,7 @@ public class CameraActivity extends BaseActivity { private static final int CODE_ACTIVITY_TAKE_IMAGE = 1; private static final int CODE_ACTIVITY_TAKE_VIDEO = 2; - public static Action sResult; + public static Action sResult; public static Action sCancel; private int mFunction; @@ -187,7 +188,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { private void callbackResult() { if (sResult != null) { - sResult.onAction(mCameraFilePath); + sResult.onAction(AlbumCameraFile.getAlbumCameraFile(this.getApplicationContext(), mCameraFilePath)); } sResult = null; sCancel = null; diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java b/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java index f7a01c6..a0e19eb 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java @@ -19,9 +19,6 @@ import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -41,6 +38,9 @@ import com.yanzhenjie.album.sample.photoview.AttacherImageView; import com.yanzhenjie.album.sample.photoview.PhotoViewAttacher; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + /** * Created by Yan Zhenjie on 2017/3/31. */ @@ -54,7 +54,20 @@ public void load(ImageView imageView, AlbumFile albumFile) { @Override public void load(ImageView imageView, Uri uri) { if (imageView instanceof SimpleDraweeView) { - ((SimpleDraweeView)imageView).setImageURI(uri); + ((SimpleDraweeView) imageView).setImageURI(uri); + } else { + try { + SimpleDraweeView simpleDraweeView = FrescoUtils.getDraweeView(imageView, imageView.getClass()); + if (simpleDraweeView != null) { + simpleDraweeView.getHierarchy().setPlaceholderImage(R.drawable.placeholder); + simpleDraweeView.getHierarchy().setFailureImage(R.drawable.placeholder); + simpleDraweeView.setImageURI(uri); + } else { + imageView.setImageURI(uri); + } + } catch (Exception ex) { + ex.printStackTrace(); + } } } diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/FrescoUtils.java b/sample/src/main/java/com/yanzhenjie/album/sample/FrescoUtils.java new file mode 100644 index 0000000..6b36490 --- /dev/null +++ b/sample/src/main/java/com/yanzhenjie/album/sample/FrescoUtils.java @@ -0,0 +1,81 @@ +package com.yanzhenjie.album.sample; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import com.facebook.drawee.view.SimpleDraweeView; + +/** + * 项目名称:DSAlbum + * 类描述: + * 创建人:cuichao + * 创建时间:2020/7/21 16:03 + * 修改人:cuichao + * 修改时间:2020/7/21 16:03 + * 修改备注: + */ +public class FrescoUtils { + // 紧挨着ImageView添加SimpleDraweeView到原来的ImageView的位置 + private static SimpleDraweeView exchangeChilde( + ViewGroup parent, + View oldImageView, + ViewGroup.LayoutParams layoutParams + ) { + SimpleDraweeView draweeview = null; + for (int i = 0; i < parent.getChildCount(); i++) { + if (oldImageView == parent.getChildAt(i)) { + if (oldImageView instanceof ImageView) { + ImageView img = (ImageView) oldImageView; + img.setBackgroundDrawable(null); + img.setImageDrawable(null); + img.setVisibility(View.INVISIBLE); + } + if (i + 1 < parent.getChildCount()) { + View child = parent.getChildAt(i + 1); + // 此处理应做更加仔细的判断 + if (child instanceof SimpleDraweeView) { + return (SimpleDraweeView) child; + } + } + draweeview = new SimpleDraweeView(oldImageView.getContext()); + draweeview.setLayoutParams(layoutParams); + parent.addView(draweeview, i + 1); + return draweeview; + } + } + return draweeview; + } + + // 传入加载图片的ImageView,返回一个相同位置,相同大小的SimpleDraweeView + public static SimpleDraweeView getDraweeView( + View viewContainer, + Class classType + ) { + if (viewContainer instanceof SimpleDraweeView) { + return (SimpleDraweeView) viewContainer; + } + SimpleDraweeView mDraweeView = null; + if (classType.isInstance(viewContainer)) { + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) viewContainer.getLayoutParams(); + mDraweeView = exchangeChilde((ViewGroup) viewContainer.getParent(), viewContainer, params); + } + return mDraweeView; + } + + // 该方将ImageView从原来的Parent种移除,并添加到一个FrameLayout中去 + private void addToViewGroup( + ViewGroup parent, + View viewOld, + View viewNew + ) { + for (int i = 0; i < parent.getChildCount(); i++) { + if (parent.getChildAt(i) == viewOld) { + parent.removeView(viewOld); + parent.addView(viewNew, i); + return; + } + } + } + +} diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/app/CameraActivity.java b/sample/src/main/java/com/yanzhenjie/album/sample/app/CameraActivity.java index cfeb797..fcbc5a2 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/app/CameraActivity.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/app/CameraActivity.java @@ -17,11 +17,6 @@ import android.net.Uri; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.widget.ImageView; @@ -30,9 +25,15 @@ import com.yanzhenjie.album.Action; import com.yanzhenjie.album.Album; -import com.yanzhenjie.album.app.album.data.MediaReader; +import com.yanzhenjie.album.AlbumCameraFile; import com.yanzhenjie.album.sample.R; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + /** * Created by YanZhenjie on 2017/8/17. */ @@ -59,13 +60,13 @@ private void takePicture() { Album.camera(this) .image() // .filePath() - .onResult(new Action() { + .onResult(new Action() { @Override - public void onAction(@NonNull String result) { - mTextView.setText(result); + public void onAction(@NonNull AlbumCameraFile result) { + mTextView.setText(result.toString()); Album.getAlbumConfig() .getAlbumLoader() - .load(mImageView,Uri.parse(result) ); + .load(mImageView, result.getUri()); } }) .onCancel(new Action() { @@ -84,14 +85,14 @@ private void recordVideo() { .quality(1) .limitDuration(Integer.MAX_VALUE) .limitBytes(Integer.MAX_VALUE) - .onResult(new Action() { + .onResult(new Action() { @Override - public void onAction(@NonNull String result) { - mTextView.setText(result); + public void onAction(@NonNull AlbumCameraFile result) { + mTextView.setText(result.toString()); Album.getAlbumConfig() .getAlbumLoader() - .load(mImageView,Uri.parse(result) ); + .load(mImageView, result.getUri()); } }) .onCancel(new Action() { From 84bb8d06b156937c5a86748b531d8dbdea32c97b Mon Sep 17 00:00:00 2001 From: cuichao <915965998@qq.com> Date: Thu, 23 Jul 2020 16:00:26 +0800 Subject: [PATCH 9/9] remove useless code modify irregular code --- .../com/yanzhenjie/album/AlbumCameraFile.java | 2 +- .../com/yanzhenjie/album/util/AlbumUtils.java | 13 ++- .../yanzhenjie/album/sample/FrescoLoader.java | 13 --- .../yanzhenjie/album/sample/FrescoUtils.java | 81 ------------------- 4 files changed, 6 insertions(+), 103 deletions(-) delete mode 100644 sample/src/main/java/com/yanzhenjie/album/sample/FrescoUtils.java diff --git a/album/src/main/java/com/yanzhenjie/album/AlbumCameraFile.java b/album/src/main/java/com/yanzhenjie/album/AlbumCameraFile.java index 78ba04e..592bc74 100644 --- a/album/src/main/java/com/yanzhenjie/album/AlbumCameraFile.java +++ b/album/src/main/java/com/yanzhenjie/album/AlbumCameraFile.java @@ -41,7 +41,7 @@ public static AlbumCameraFile getAlbumCameraFile(Context context, String filePat */ private Uri uri; /** - * File uri. + * File path. */ private String path; diff --git a/album/src/main/java/com/yanzhenjie/album/util/AlbumUtils.java b/album/src/main/java/com/yanzhenjie/album/util/AlbumUtils.java index 10eb61b..7d4fdbb 100644 --- a/album/src/main/java/com/yanzhenjie/album/util/AlbumUtils.java +++ b/album/src/main/java/com/yanzhenjie/album/util/AlbumUtils.java @@ -173,10 +173,7 @@ public static Uri getUri(@NonNull Context context, @NonNull File outPath) { * @return the uri address of the file. */ @NonNull - public static Uri getUri(@NonNull Context context, String outPath) { - if (outPath == null) { - outPath = ""; - } + public static Uri getUri(@NonNull Context context, @NonNull String outPath) { return getUri(context, new File(outPath)); } @@ -186,7 +183,7 @@ public static Uri getUri(@NonNull Context context, String outPath) { * @return file path. */ @NonNull - public static String randomJPGPath(Context context) { + public static String randomJPGPath(@NonNull Context context) { return randomJPGPath(getAlbumRootPath(context)); } @@ -197,7 +194,7 @@ public static String randomJPGPath(Context context) { * @return file path. */ @NonNull - public static String randomJPGPath(File bucket) { + public static String randomJPGPath(@NonNull File bucket) { String outFileName = AlbumUtils.getNowDateTime("yyyyMMdd_HHmmssSSS") + "_" + getMD5ForString(UUID.randomUUID().toString()) + ".jpg"; if (bucket.exists() && bucket.isFile()) { bucket.delete(); @@ -216,7 +213,7 @@ public static String randomJPGPath(File bucket) { * @return file path. */ @NonNull - public static String randomMP4Path(Context context) { + public static String randomMP4Path(@NonNull Context context) { return randomMP4Path(getAlbumRootPath(context)); } @@ -226,7 +223,7 @@ public static String randomMP4Path(Context context) { * @return file path. */ @NonNull - public static String randomMP4Path(File bucket) { + public static String randomMP4Path(@NonNull File bucket) { String outFileName = AlbumUtils.getNowDateTime("yyyyMMdd_HHmmssSSS") + "_" + getMD5ForString(UUID.randomUUID().toString()) + ".mp4"; if (bucket.exists() && bucket.isFile()) { bucket.delete(); diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java b/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java index a0e19eb..6acd484 100644 --- a/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java +++ b/sample/src/main/java/com/yanzhenjie/album/sample/FrescoLoader.java @@ -55,19 +55,6 @@ public void load(ImageView imageView, AlbumFile albumFile) { public void load(ImageView imageView, Uri uri) { if (imageView instanceof SimpleDraweeView) { ((SimpleDraweeView) imageView).setImageURI(uri); - } else { - try { - SimpleDraweeView simpleDraweeView = FrescoUtils.getDraweeView(imageView, imageView.getClass()); - if (simpleDraweeView != null) { - simpleDraweeView.getHierarchy().setPlaceholderImage(R.drawable.placeholder); - simpleDraweeView.getHierarchy().setFailureImage(R.drawable.placeholder); - simpleDraweeView.setImageURI(uri); - } else { - imageView.setImageURI(uri); - } - } catch (Exception ex) { - ex.printStackTrace(); - } } } diff --git a/sample/src/main/java/com/yanzhenjie/album/sample/FrescoUtils.java b/sample/src/main/java/com/yanzhenjie/album/sample/FrescoUtils.java deleted file mode 100644 index 6b36490..0000000 --- a/sample/src/main/java/com/yanzhenjie/album/sample/FrescoUtils.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.yanzhenjie.album.sample; - -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - -import com.facebook.drawee.view.SimpleDraweeView; - -/** - * 项目名称:DSAlbum - * 类描述: - * 创建人:cuichao - * 创建时间:2020/7/21 16:03 - * 修改人:cuichao - * 修改时间:2020/7/21 16:03 - * 修改备注: - */ -public class FrescoUtils { - // 紧挨着ImageView添加SimpleDraweeView到原来的ImageView的位置 - private static SimpleDraweeView exchangeChilde( - ViewGroup parent, - View oldImageView, - ViewGroup.LayoutParams layoutParams - ) { - SimpleDraweeView draweeview = null; - for (int i = 0; i < parent.getChildCount(); i++) { - if (oldImageView == parent.getChildAt(i)) { - if (oldImageView instanceof ImageView) { - ImageView img = (ImageView) oldImageView; - img.setBackgroundDrawable(null); - img.setImageDrawable(null); - img.setVisibility(View.INVISIBLE); - } - if (i + 1 < parent.getChildCount()) { - View child = parent.getChildAt(i + 1); - // 此处理应做更加仔细的判断 - if (child instanceof SimpleDraweeView) { - return (SimpleDraweeView) child; - } - } - draweeview = new SimpleDraweeView(oldImageView.getContext()); - draweeview.setLayoutParams(layoutParams); - parent.addView(draweeview, i + 1); - return draweeview; - } - } - return draweeview; - } - - // 传入加载图片的ImageView,返回一个相同位置,相同大小的SimpleDraweeView - public static SimpleDraweeView getDraweeView( - View viewContainer, - Class classType - ) { - if (viewContainer instanceof SimpleDraweeView) { - return (SimpleDraweeView) viewContainer; - } - SimpleDraweeView mDraweeView = null; - if (classType.isInstance(viewContainer)) { - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) viewContainer.getLayoutParams(); - mDraweeView = exchangeChilde((ViewGroup) viewContainer.getParent(), viewContainer, params); - } - return mDraweeView; - } - - // 该方将ImageView从原来的Parent种移除,并添加到一个FrameLayout中去 - private void addToViewGroup( - ViewGroup parent, - View viewOld, - View viewNew - ) { - for (int i = 0; i < parent.getChildCount(); i++) { - if (parent.getChildAt(i) == viewOld) { - parent.removeView(viewOld); - parent.addView(viewNew, i); - return; - } - } - } - -}