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

Commit a69876e

Browse files
committed
Merge pull request #61 from yazeed44/implementing_#33
Implementing #33
2 parents 69c5a78 + 368992c commit a69876e

File tree

9 files changed

+128
-37
lines changed

9 files changed

+128
-37
lines changed

app/app.iml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,11 @@
9797
<orderEntry type="library" exported="" name="support-v4-22.2.1" level="project" />
9898
<orderEntry type="library" exported="" name="recyclerview-v7-22.2.1" level="project" />
9999
<orderEntry type="library" exported="" name="material-dialogs-0.7.6.0" level="project" />
100-
<orderEntry type="library" exported="" name="commons-lang3-3.3.2" level="project" />
101100
<orderEntry type="library" exported="" name="support-annotations-22.2.1" level="project" />
102-
<orderEntry type="library" exported="" name="robospice-1.4.14" level="project" />
101+
<orderEntry type="library" exported="" name="commons-lang3-3.3.2" level="project" />
103102
<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" />
104+
<orderEntry type="library" exported="" name="robospice-1.4.14" level="project" />
105105
<orderEntry type="library" exported="" name="glide-3.6.0" level="project" />
106106
<orderEntry type="library" exported="" name="appcompat-v7-22.2.1" level="project" />
107107
<orderEntry type="module" module-name="imagepicker" exported="" />

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public AlbumEntry(int albumId, String albumName, ImageEntry coverImage) {
1818
this.coverImage = coverImage;
1919
}
2020

21-
public void addPhoto(ImageEntry photoEntry) {
22-
imageList.add(photoEntry);
21+
public void addPhoto(ImageEntry imageEntry) {
22+
imageList.add(imageEntry);
2323
}
2424
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ public class AlbumsAdapter extends RecyclerView.Adapter<AlbumsAdapter.AlbumViewH
3232
protected final Picker mPickOptions;
3333
private final Fragment mFragment;
3434

35-
public AlbumsAdapter(final Fragment fragment, final ArrayList<AlbumEntry> albums, final RecyclerView mRecycler) {
35+
public AlbumsAdapter(final Fragment fragment, final ArrayList<AlbumEntry> albums, final RecyclerView recyclerView) {
3636
mFragment = fragment;
3737
this.mAlbumList = albums;
38-
this.mRecycler = mRecycler;
38+
this.mRecycler = recyclerView;
3939
mPickOptions = EventBus.getDefault().getStickyEvent(Events.OnPublishPickOptionsEvent.class).options;
4040
}
4141

@@ -89,16 +89,16 @@ public void setupAlbum(final AlbumViewHolder holder, final AlbumEntry album) {
8989
holder.name.setText(album.name);
9090
holder.count.setText(album.imageList.size() + "");
9191

92+
holder.detailsLayout.setBackgroundColor(mPickOptions.albumBackgroundColor);
93+
9294
Glide.with(mFragment)
9395
.load(album.coverImage.path)
9496
.asBitmap()
9597
.centerCrop()
9698
.into(holder.thumbnail);
9799

98-
holder.detailsLayout.setBackgroundColor(mPickOptions.albumBackgroundColor);
99100
}
100101

101-
102102
static class AlbumViewHolder extends RecyclerView.ViewHolder {
103103
protected final ImageView thumbnail;
104104
protected final TextView count;

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

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class AlbumsFragment extends Fragment implements RequestListener<ArrayLis
3535
protected SpiceManager mSpiceManager = new SpiceManager(OfflineSpiceService.class);
3636
protected ArrayList<AlbumEntry> mAlbumList;
3737
protected Picker mPickOptions;
38+
protected boolean mShouldPerformClickOnCapturedAlbum = false;
3839

3940

4041
@Override
@@ -70,9 +71,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
7071

7172
@Override
7273
public void onStart() {
73-
if (mAlbumList == null) {
74-
mSpiceManager.start(getActivity());
75-
}
74+
mSpiceManager.start(getActivity());
75+
76+
EventBus.getDefault().register(this);
77+
7678
super.onStart();
7779
}
7880

@@ -81,6 +83,7 @@ public void onStop() {
8183
if (mSpiceManager.isStarted()) {
8284
mSpiceManager.shouldStop();
8385
}
86+
EventBus.getDefault().unregister(this);
8487
super.onStop();
8588
}
8689

@@ -91,16 +94,36 @@ public void onRequestFailure(SpiceException spiceException) {
9194
}
9295

9396
@Override
94-
public void onRequestSuccess(ArrayList albumEntries) {
97+
public void onRequestSuccess(final ArrayList albumEntries) {
9598

9699
if (hasLoadedSuccessfully(albumEntries)) {
97100
mAlbumList = albumEntries;
98101

99-
EventBus.getDefault().postSticky(new Events.OnAlbumsLoadedEvent(mAlbumList));
100-
101102
final AlbumsAdapter albumsAdapter = new AlbumsAdapter(this, albumEntries, mAlbumsRecycler);
102103
mAlbumsRecycler.setAdapter(albumsAdapter);
103104

105+
EventBus.getDefault().postSticky(new Events.OnAlbumsLoadedEvent(mAlbumList));
106+
107+
108+
if (!mShouldPerformClickOnCapturedAlbum) {
109+
return;
110+
}
111+
112+
mAlbumsRecycler.postDelayed(new Runnable() {
113+
@Override
114+
public void run() {
115+
116+
if (!mAlbumsRecycler.hasPendingAdapterUpdates()) {
117+
pickLatestCapturedImage();
118+
mShouldPerformClickOnCapturedAlbum = false;
119+
} else {
120+
mAlbumsRecycler.postDelayed(this, 100);
121+
}
122+
123+
}
124+
}, 100);
125+
126+
104127

105128
}
106129

@@ -135,4 +158,27 @@ private boolean hasLoadedSuccessfully(final ArrayList albumList) {
135158
return albumList != null && albumList.size() > 0;
136159
}
137160

161+
public void onEvent(final Events.OnReloadAlbumsEvent reloadAlbums) {
162+
mShouldPerformClickOnCapturedAlbum = true;
163+
164+
EventBus.getDefault().removeStickyEvent(Events.OnAlbumsLoadedEvent.class);
165+
mAlbumList = null;
166+
setupAdapter();
167+
}
168+
169+
private void pickLatestCapturedImage() {
170+
171+
172+
173+
for (final AlbumEntry albumEntry : mAlbumList) {
174+
if (albumEntry.name.equals(PickerActivity.CAPTURED_IMAGES_ALBUM_NAME)) {
175+
mAlbumsRecycler.getChildAt(mAlbumList.indexOf(albumEntry)).performClick();
176+
EventBus.getDefault().postSticky(new Events.OnPickImageEvent(albumEntry.imageList.get(0)));
177+
178+
}
179+
}
180+
181+
182+
}
183+
138184
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ public void onPageSelected(int position) {
112112

113113
updateDisplayedImage(position);
114114

115-
EventBus.getDefault().postSticky(new Events.OnPickImageEvent(mSelectedAlbum.imageList.get(position)));
116115
}
117116

118117
@Override

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
3838
}
3939

4040
@Override
41-
public void onResume() {
42-
super.onResume();
41+
public void onStart() {
4342
EventBus.getDefault().registerSticky(this);
43+
super.onStart();
4444
}
4545

4646
@Override
47-
public void onPause() {
48-
super.onPause();
47+
public void onStop() {
4948
EventBus.getDefault().unregister(this);
49+
super.onStop();
5050
}
5151

5252
protected void setupRecycler() {

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

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import android.content.Intent;
44
import android.graphics.drawable.Drawable;
5+
import android.media.MediaScannerConnection;
6+
import android.net.Uri;
57
import android.os.Bundle;
68
import android.os.Environment;
79
import android.support.design.widget.AppBarLayout;
@@ -42,12 +44,10 @@ public class PickerActivity extends AppCompatActivity {
4244

4345
public static final String KEY_ACTION_BAR_TITLE = "actionBarKey";
4446
public static final String KEY_SHOULD_SHOW_ACTIONBAR_UP = "shouldShowUpKey";
45-
47+
public static final String CAPTURED_IMAGES_ALBUM_NAME = "captured_images";
48+
public static final String CAPTURED_IMAGES_DIR = Environment.getExternalStoragePublicDirectory(CAPTURED_IMAGES_ALBUM_NAME).getAbsolutePath();
4649
private static final int REQUEST_PORTRAIT_RFC = 1337;
4750
private static final int REQUEST_PORTRAIT_FFC = REQUEST_PORTRAIT_RFC + 1;
48-
private static final int REQUEST_LANDSCAPE_RFC = REQUEST_PORTRAIT_RFC + 2;
49-
private static final int REQUEST_LANDSCAPE_FFC = REQUEST_PORTRAIT_RFC + 3;
50-
5151
public static ArrayList<ImageEntry> sCheckedImages = new ArrayList<>();
5252

5353
private boolean mShouldShowUp = false;
@@ -235,7 +235,8 @@ public void onCancel() {
235235

236236
public void capturePhoto() {
237237

238-
final File captureImageFile = new File(Environment.getExternalStorageDirectory() + "/capture" + System.currentTimeMillis() + ".png");
238+
239+
final File captureImageFile = new File(CAPTURED_IMAGES_DIR + "/tmp" + System.currentTimeMillis() + ".png");
239240

240241

241242
try {
@@ -263,15 +264,50 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
263264

264265
if (resultCode == RESULT_OK && requestCode == REQUEST_PORTRAIT_FFC) {
265266
//For capturing image from camera
266-
267-
sCheckedImages.add(ImageEntry.from(data.getData()));
268-
updateFab();
267+
refreshMediaScanner(data.getData().getPath());
269268

270269
} else {
271270
Log.i("onActivityResult", "User canceled the camera activity");
272271
}
273272
}
274273

274+
private void refreshMediaScanner(final String imagePath) {
275+
MediaScannerConnection.scanFile(this,
276+
new String[]{imagePath}, null,
277+
new MediaScannerConnection.OnScanCompletedListener() {
278+
@Override
279+
public void onScanCompleted(String path, Uri uri) {
280+
281+
PickerActivity.this.runOnUiThread(new Runnable() {
282+
@Override
283+
public void run() {
284+
reloadAlbums();
285+
}
286+
});
287+
288+
289+
Log.d("onActivityResult", "New image should appear in camera folder");
290+
}
291+
});
292+
}
293+
294+
private void reloadAlbums() {
295+
296+
297+
298+
299+
if (isImagesThumbnailShown()) {
300+
getSupportFragmentManager().popBackStackImmediate();
301+
} else {
302+
getSupportFragmentManager().popBackStackImmediate(ImagesThumbnailFragment.TAG, 0);
303+
getSupportFragmentManager().popBackStackImmediate();
304+
}
305+
306+
EventBus.getDefault().post(new Events.OnReloadAlbumsEvent());
307+
308+
309+
}
310+
275311
@Override
276312
public boolean onCreateOptionsMenu(Menu menu) {
277313
// Inflate the menu; this adds items to the action bar if it is present.
@@ -624,19 +660,13 @@ public void onEvent(final Events.OnChangingDisplayedImageEvent newImageEvent) {
624660

625661
public void onEvent(final Events.OnShowingToolbarEvent showingToolbarEvent) {
626662

627-
628-
//getSupportActionBar().show();
629-
630-
631663
handleToolbarVisibility(true);
632664

633665
}
634666

635667

636668
public void onEvent(final Events.OnHidingToolbarEvent hidingToolbarEvent) {
637669

638-
// getSupportActionBar().hide();
639-
640670
handleToolbarVisibility(false);
641671

642672
}

imagepicker/src/main/java/net/yazeed44/imagepicker/util/Events.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,7 @@ public OnChangingDisplayedImageEvent(ImageEntry currentImage) {
7474
}
7575
}
7676

77-
public static class OnUpdateImagesThumbnailEvent {
78-
77+
public final static class OnUpdateImagesThumbnailEvent {
7978

8079
public OnUpdateImagesThumbnailEvent() {
8180

@@ -87,4 +86,10 @@ public final static class OnShowingToolbarEvent {
8786

8887
public final static class OnHidingToolbarEvent {
8988
}
89+
90+
public final static class OnReloadAlbumsEvent {
91+
92+
}
93+
94+
9095
}

imagepicker/src/main/java/net/yazeed44/imagepicker/util/Util.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import net.yazeed44.imagepicker.library.R;
1515
import net.yazeed44.imagepicker.model.AlbumEntry;
1616
import net.yazeed44.imagepicker.model.ImageEntry;
17+
import net.yazeed44.imagepicker.ui.PickerActivity;
1718

1819
import java.util.ArrayList;
1920
import java.util.HashMap;
@@ -26,6 +27,7 @@ public final class Util {
2627

2728
public static final TypedValue TYPED_VALUE = new TypedValue();
2829

30+
2931
private Util() {
3032
throw new AssertionError();
3133
}
@@ -45,9 +47,9 @@ public static ArrayList<AlbumEntry> getAlbums(final Context context) {
4547

4648
final ArrayList<AlbumEntry> albumsSorted = new ArrayList<AlbumEntry>();
4749

48-
HashMap<Integer, AlbumEntry> albums = new HashMap<Integer, AlbumEntry>();
50+
final HashMap<Integer, AlbumEntry> albums = new HashMap<Integer, AlbumEntry>();
4951
AlbumEntry allPhotosAlbum = null;
50-
String cameraFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + "/" + "Camera/";
52+
final String cameraFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + "/" + "Camera/";
5153
Integer cameraAlbumId = null;
5254
Cursor cursor = null;
5355

@@ -71,6 +73,15 @@ public static ArrayList<AlbumEntry> getAlbums(final Context context) {
7173
continue;
7274
}
7375

76+
if (!PickerActivity.sCheckedImages.isEmpty()) {
77+
78+
for (final ImageEntry checkedImage : PickerActivity.sCheckedImages) {
79+
if (checkedImage.path.equals(imageEntry.path)) {
80+
imageEntry.isPicked = true;
81+
}
82+
}
83+
}
84+
7485

7586
if (allPhotosAlbum == null) {
7687
allPhotosAlbum = new AlbumEntry(0, context.getResources().getString(R.string.all_photos), imageEntry);

0 commit comments

Comments
 (0)