Skip to content
This repository was archived by the owner on Oct 13, 2022. It is now read-only.

Commit 09bdebf

Browse files
committed
Merge pull request #75 from yazeed44/add-video-support
Add video support
2 parents d6a11b2 + 411b0df commit 09bdebf

21 files changed

Lines changed: 357 additions & 136 deletions

File tree

app/app.iml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@
100100
<orderEntry type="library" exported="" name="support-v4-23.0.0" level="project" />
101101
<orderEntry type="library" exported="" name="glide-3.6.1" level="project" />
102102
<orderEntry type="library" exported="" name="material-dialogs-0.7.9.1" level="project" />
103-
<orderEntry type="library" exported="" name="commons-io-1.3.2" level="project" />
104103
<orderEntry type="library" exported="" name="robospice-cache-1.4.14" level="project" />
105-
<orderEntry type="library" exported="" name="robospice-1.4.14" level="project" />
104+
<orderEntry type="library" exported="" name="commons-io-1.3.2" level="project" />
106105
<orderEntry type="library" exported="" name="support-annotations-23.0.0" level="project" />
106+
<orderEntry type="library" exported="" name="robospice-1.4.14" level="project" />
107107
<orderEntry type="module" module-name="imagepicker" exported="" />
108108
</component>
109109
</module>

app/src/main/java/net/yazeed44/multiimagepicker/MainActivity.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,15 @@ public void onPickImageMultipleInfinite(View view) {
7979

8080
}
8181

82+
public void onClickPickImageWithVideos(View view) {
83+
new Picker.Builder(this, this, R.style.MIP_theme)
84+
.setPickMode(Picker.PickMode.MULTIPLE_IMAGES)
85+
.setVideosEnabled(true)
86+
.build()
87+
.startActivity();
88+
89+
}
90+
8291

8392
@Override
8493
public boolean onCreateOptionsMenu(Menu menu) {

app/src/main/res/layout/activity_main.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
android:onClick="onClickPickImageSingle"
2525
android:text="@string/btn_pick_single_image" />
2626

27+
<Button
28+
android:layout_width="match_parent"
29+
android:layout_height="wrap_content"
30+
android:onClick="onClickPickImageWithVideos"
31+
android:text="@string/btn_pick_with_videos" />
32+
2733
<android.support.v7.widget.RecyclerView
2834
android:id="@+id/images_sample"
2935

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@
1919
<string name="btn_pick_multiple_images_with_limit">Pick Multiple images (6 is the limit)</string>
2020
<string name="btn_pick_single_image">Pick single image</string>
2121
<string name="btn_pick_multiple_image_infinite">Pick multiple images (No limit)</string>
22+
<string name="btn_pick_with_videos">Pick multiple images (with video)</string>
2223

2324
</resources>

imagepicker/imagepicker.iml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
6666
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
6767
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
68+
<excludeFolder url="file://$MODULE_DIR$/build/docs" />
6869
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
6970
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
7071
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
@@ -84,7 +85,9 @@
8485
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
8586
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
8687
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
88+
<excludeFolder url="file://$MODULE_DIR$/build/libs" />
8789
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
90+
<excludeFolder url="file://$MODULE_DIR$/build/poms" />
8891
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
8992
</content>
9093
<orderEntry type="jdk" jdkName="Android API 23 Platform (1)" jdkType="Android SDK" />
@@ -93,9 +96,9 @@
9396
<orderEntry type="library" exported="" name="eventbus-2.4.0" level="project" />
9497
<orderEntry type="library" exported="" name="design-23.0.0" level="project" />
9598
<orderEntry type="library" exported="" name="floatingactionbutton-1.3.0" level="project" />
96-
<orderEntry type="library" exported="" name="robospice-1.4.14" level="project" />
9799
<orderEntry type="library" exported="" name="commons-io-1.3.2" level="project" />
98100
<orderEntry type="library" exported="" name="robospice-cache-1.4.14" level="project" />
101+
<orderEntry type="library" exported="" name="robospice-1.4.14" level="project" />
99102
<orderEntry type="library" exported="" name="appcompat-v7-23.0.0" level="project" />
100103
<orderEntry type="library" exported="" name="recyclerview-v7-23.0.0" level="project" />
101104
<orderEntry type="library" exported="" name="library-1.2.3" level="project" />

imagepicker/src/main/java/net/yazeed44/imagepicker/model/AlbumEntry.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,35 @@
22

33
import java.io.Serializable;
44
import java.util.ArrayList;
5+
import java.util.Collections;
6+
import java.util.Comparator;
57

68
/**
79
* Created by yazeed44 on 6/14/15.
810
*/
911
public class AlbumEntry implements Serializable {
1012
public final int id;
1113
public final String name;
12-
public final ImageEntry coverImage;
1314
public final ArrayList<ImageEntry> imageList = new ArrayList<>();
15+
public ImageEntry coverImage;
1416

15-
public AlbumEntry(int albumId, String albumName, ImageEntry coverImage) {
17+
18+
public AlbumEntry(int albumId, String albumName) {
1619
this.id = albumId;
1720
this.name = albumName;
18-
this.coverImage = coverImage;
1921
}
2022

2123
public void addPhoto(ImageEntry imageEntry) {
2224
imageList.add(imageEntry);
2325
}
26+
public void sortImagesByTimeDesc() {
27+
Collections.sort(imageList, new Comparator<ImageEntry>() {
28+
@Override
29+
public int compare(ImageEntry lhs, ImageEntry rhs) {
30+
return (int) (rhs.dateAdded - lhs.dateAdded);
31+
}
32+
});
33+
34+
coverImage = imageList.get(0);
35+
}
2436
}

imagepicker/src/main/java/net/yazeed44/imagepicker/model/ImageEntry.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212
public class ImageEntry implements Serializable {
1313
public final int imageId;
1414
public final String path;
15+
public final long dateAdded;
1516
public boolean isPicked = false;
17+
public boolean isVideo = false;
1618

1719
public ImageEntry(final Builder builder) {
1820
this.path = builder.mPath;
1921
this.imageId = builder.mImageId;
22+
this.dateAdded = builder.mDateAdded;
2023
}
2124

2225
public static ImageEntry from(final Cursor cursor) {
@@ -29,7 +32,7 @@ public static ImageEntry from(final Uri uri) {
2932

3033
@Override
3134
public boolean equals(Object o) {
32-
return o instanceof ImageEntry && imageId == ((ImageEntry) o).imageId;
35+
return o instanceof ImageEntry && ((ImageEntry) o).path.equals(path);
3336
}
3437

3538
@Override
@@ -44,6 +47,7 @@ public static class Builder {
4447
public static int count = -1;
4548
private final String mPath;
4649
private int mImageId;
50+
private long mDateAdded;
4751

4852
public Builder(final String path) {
4953
this.mPath = path;
@@ -60,12 +64,15 @@ public static Builder from(final Uri uri) {
6064
public static Builder from(final Cursor cursor) {
6165
final int dataColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
6266
final int imageIdColumn = cursor.getColumnIndex(MediaStore.Images.Media._ID);
67+
final int dateAddedColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED);
6368

6469
final int imageId = cursor.getInt(imageIdColumn);
6570
final String path = cursor.getString(dataColumn);
71+
final long dateAdded = cursor.getLong(dateAddedColumn);
6672

6773
return new ImageEntry.Builder(path)
6874
.imageId(imageId)
75+
.dateAdded(dateAdded)
6976
;
7077

7178
}
@@ -76,6 +83,11 @@ public Builder imageId(int imageId) {
7683
return this;
7784
}
7885

86+
public Builder dateAdded(long timestamp) {
87+
this.mDateAdded = timestamp;
88+
return this;
89+
}
90+
7991

8092
public ImageEntry build() {
8193
return new ImageEntry(this);

imagepicker/src/main/java/net/yazeed44/imagepicker/ui/AlbumsFragment.java

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import net.yazeed44.imagepicker.util.LoadingAlbumsRequest;
2121
import net.yazeed44.imagepicker.util.OfflineSpiceService;
2222
import net.yazeed44.imagepicker.util.Picker;
23+
import net.yazeed44.imagepicker.util.Util;
2324

2425
import java.util.ArrayList;
2526

@@ -54,17 +55,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
5455
if (albumLoadedEvent != null) {
5556
mAlbumList = albumLoadedEvent.albumList;
5657
}
57-
58-
59-
6058
}
6159

62-
6360
setupAdapter();
64-
65-
6661
setupRecycler();
67-
setupAdapter();
6862

6963
return mAlbumsRecycler;
7064
}
@@ -122,12 +116,8 @@ public void run() {
122116

123117
}
124118
}, 100);
125-
126-
127-
128119
}
129120

130-
131121
}
132122

133123
protected void setupRecycler() {
@@ -143,15 +133,13 @@ protected void setupRecycler() {
143133

144134
public void setupAdapter() {
145135
if (mAlbumList == null) {
146-
final LoadingAlbumsRequest loadingRequest = new LoadingAlbumsRequest(getActivity());
136+
final LoadingAlbumsRequest loadingRequest = new LoadingAlbumsRequest(getActivity(), mPickOptions);
147137

148138
mSpiceManager.execute(loadingRequest, this);
149139
} else {
150140

151141
mAlbumsRecycler.setAdapter(new AlbumsAdapter(this, mAlbumList, mAlbumsRecycler));
152142
}
153-
154-
155143
}
156144

157145
private boolean hasLoadedSuccessfully(final ArrayList albumList) {
@@ -167,14 +155,10 @@ public void onEvent(final Events.OnReloadAlbumsEvent reloadAlbums) {
167155
}
168156

169157
private void pickLatestCapturedImage() {
170-
171-
172-
173158
for (final AlbumEntry albumEntry : mAlbumList) {
174159
if (albumEntry.name.equals(PickerActivity.CAPTURED_IMAGES_ALBUM_NAME)) {
160+
EventBus.getDefault().postSticky(new Events.OnPickImageEvent(Util.getAllPhotosAlbum(mAlbumList).imageList.get(0)));
175161
mAlbumsRecycler.getChildAt(mAlbumList.indexOf(albumEntry)).performClick();
176-
EventBus.getDefault().postSticky(new Events.OnPickImageEvent(albumEntry.imageList.get(0)));
177-
178162
}
179163
}
180164

imagepicker/src/main/java/net/yazeed44/imagepicker/ui/ImagesThumbnailAdapter.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.yazeed44.imagepicker.ui;
22

33
import android.graphics.Color;
4+
import android.graphics.PorterDuff;
45
import android.graphics.drawable.Drawable;
56
import android.support.v4.app.Fragment;
67
import android.support.v4.content.ContextCompat;
@@ -34,6 +35,7 @@ public class ImagesThumbnailAdapter extends RecyclerView.Adapter<ImagesThumbnail
3435
protected final Picker mPickOptions;
3536

3637
protected final Drawable mCheckIcon;
38+
protected final Drawable mVideoIcon;
3739
protected final Fragment mFragment;
3840

3941

@@ -44,6 +46,7 @@ public ImagesThumbnailAdapter(final Fragment fragment, final AlbumEntry album, f
4446
mPickOptions = pickOptions;
4547

4648
mCheckIcon = createCheckIcon();
49+
mVideoIcon = createVideoIcon();
4750
}
4851

4952
private Drawable createCheckIcon() {
@@ -53,6 +56,16 @@ private Drawable createCheckIcon() {
5356
return checkIcon;
5457
}
5558

59+
private Drawable createVideoIcon() {
60+
if (!mPickOptions.videosEnabled) {
61+
return null;
62+
}
63+
Drawable videoIcon = ContextCompat.getDrawable(mRecyclerView.getContext(), R.drawable.ic_play_arrow);
64+
videoIcon = DrawableCompat.wrap(videoIcon);
65+
DrawableCompat.setTint(videoIcon, mPickOptions.videoIconTintColor);
66+
return videoIcon;
67+
}
68+
5669
@Override
5770
public ImageViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
5871
final View imageLayout = LayoutInflater.from(mRecyclerView.getContext()).inflate(R.layout.element_image, viewGroup, false);
@@ -106,7 +119,7 @@ public void drawGrid(final ImageViewHolder holder, final ImageEntry imageEntry)
106119

107120

108121
holder.check.setImageDrawable(mCheckIcon);
109-
122+
holder.videoIcon.setVisibility(View.GONE);
110123

111124
if (imageEntry.isPicked) {
112125
holder.itemView.setBackgroundColor(mPickOptions.imageBackgroundColorWhenChecked);
@@ -127,6 +140,13 @@ public void drawGrid(final ImageViewHolder holder, final ImageEntry imageEntry)
127140
if (mPickOptions.pickMode == Picker.PickMode.SINGLE_IMAGE) {
128141
holder.check.setVisibility(View.GONE);
129142
}
143+
144+
if (imageEntry.isVideo) {
145+
holder.thumbnail.setColorFilter(mPickOptions.videoThumbnailOverlayColor, PorterDuff.Mode.MULTIPLY);
146+
holder.videoIcon.setImageDrawable(mVideoIcon);
147+
holder.videoIcon.setVisibility(View.VISIBLE);
148+
}
149+
130150
}
131151

132152

@@ -153,12 +173,14 @@ public void pickImage(final ImageViewHolder holder, final ImageEntry imageEntry)
153173
public static class ImageViewHolder extends RecyclerView.ViewHolder {
154174
private final ImageView thumbnail;
155175
private final ImageView check;
176+
private final ImageView videoIcon;
156177

157178
public ImageViewHolder(final View itemView, final Util.OnClickImage listener) {
158179
super(itemView);
159180

160181
thumbnail = (ImageView) itemView.findViewById(R.id.image_thumbnail);
161182
check = (ImageView) itemView.findViewById(R.id.image_check);
183+
videoIcon = (ImageView) itemView.findViewById(R.id.image_video_icon);
162184

163185
itemView.setOnClickListener(new View.OnClickListener() {
164186
@Override

0 commit comments

Comments
 (0)