Skip to content

Commit 5f3975d

Browse files
authored
Merge pull request #81 from Siddounet/file-multiple-mime-types
File picker multiple mime types management
2 parents 4bfec3e + 2485a95 commit 5f3975d

7 files changed

Lines changed: 120 additions & 7 deletions

File tree

app/src/main/java/com/miguelbcr/ui/rx_paparazzo2/sample/activities/SampleActivity.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.miguelbcr.ui.rx_paparazzo2.entities.size.SmallSize;
1919
import com.miguelbcr.ui.rx_paparazzo2.sample.R;
2020
import com.miguelbcr.ui.rx_paparazzo2.sample.adapters.ImagesAdapter;
21+
import com.miguelbcr.ui.rx_paparazzo2.sample.fragments.SampleFragment;
2122
import com.yalantis.ucrop.UCrop;
2223
import io.reactivex.Observable;
2324
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -83,6 +84,10 @@ private void initViews() {
8384
findViewById(R.id.fab_pickup_images).setOnClickListener(v -> pickupImages());
8485
findViewById(R.id.fab_pickup_file).setOnClickListener(v -> pickupFile());
8586
findViewById(R.id.fab_pickup_files).setOnClickListener(v -> pickupFiles());
87+
findViewById(R.id.fab_pickup_multiple_types_file)
88+
.setOnClickListener(v -> pickupMultipleTypesFile());
89+
findViewById(R.id.fab_pickup_multiple_types_files)
90+
.setOnClickListener(v -> pickupMultipleTypesFiles());
8691

8792
loadImages();
8893
}
@@ -146,6 +151,28 @@ private void pickupFiles() {
146151
processMultiple(pickMultiple);
147152
}
148153

154+
private void pickupMultipleTypesFile() {
155+
Observable<Response<SampleActivity, FileData>> pickUsingFiles =
156+
pickSingle(null, new SmallSize())
157+
.setMultipleMimeType("image/jpeg", "image/jpg", "image/png", "application/pdf")
158+
.useInternalStorage()
159+
.useDocumentPicker()
160+
.usingFiles();
161+
162+
processSingle(pickUsingFiles);
163+
}
164+
165+
private void pickupMultipleTypesFiles() {
166+
Observable<Response<SampleActivity, List<FileData>>> pickMultiple =
167+
pickMultiple(new SmallSize())
168+
.setMultipleMimeType("image/jpeg", "image/jpg", "image/png", "application/pdf")
169+
.useInternalStorage()
170+
.useDocumentPicker()
171+
.usingFiles();
172+
173+
processMultiple(pickMultiple);
174+
}
175+
149176
private void processSingle(Observable<Response<SampleActivity, FileData>> pickUsingGallery) {
150177
pickUsingGallery
151178
.subscribeOn(Schedulers.io())

app/src/main/java/com/miguelbcr/ui/rx_paparazzo2/sample/fragments/SampleFragment.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
import android.view.LayoutInflater;
99
import android.view.View;
1010
import android.view.ViewGroup;
11-
import android.widget.ImageView;
12-
import android.widget.TextView;
1311
import android.widget.Toast;
1412

1513
import com.miguelbcr.ui.rx_paparazzo2.RxPaparazzo;
@@ -23,7 +21,6 @@
2321
import com.miguelbcr.ui.rx_paparazzo2.sample.activities.PickerUtil;
2422
import com.miguelbcr.ui.rx_paparazzo2.sample.activities.Testable;
2523
import com.miguelbcr.ui.rx_paparazzo2.sample.adapters.ImagesAdapter;
26-
import com.squareup.picasso.Picasso;
2724
import com.yalantis.ucrop.UCrop;
2825

2926
import java.util.ArrayList;
@@ -85,6 +82,10 @@ private void initViews() {
8582
view.findViewById(R.id.fab_pickup_images).setOnClickListener(v -> pickupImages());
8683
view.findViewById(R.id.fab_pickup_file).setOnClickListener(v -> pickupFile());
8784
view.findViewById(R.id.fab_pickup_files).setOnClickListener(v -> pickupFiles());
85+
view.findViewById(R.id.fab_pickup_multiple_types_file)
86+
.setOnClickListener(v -> pickupMultipleTypesFile());
87+
view.findViewById(R.id.fab_pickup_multiple_types_files)
88+
.setOnClickListener(v -> pickupMultipleTypesFiles());
8889

8990
loadImages();
9091
}
@@ -150,6 +151,28 @@ private void pickupFiles() {
150151
processMultiple(pickMultiple);
151152
}
152153

154+
private void pickupMultipleTypesFile() {
155+
Observable<Response<SampleFragment, FileData>> pickUsingFiles =
156+
pickSingle(null, new SmallSize())
157+
.setMultipleMimeType("image/jpeg", "image/jpg", "image/png", "application/pdf")
158+
.useInternalStorage()
159+
.useDocumentPicker()
160+
.usingFiles();
161+
162+
processSingle(pickUsingFiles);
163+
}
164+
165+
private void pickupMultipleTypesFiles() {
166+
Observable<Response<SampleFragment, List<FileData>>> pickMultiple =
167+
pickMultiple(new SmallSize())
168+
.setMultipleMimeType("image/jpeg", "image/jpg", "image/png", "application/pdf")
169+
.useInternalStorage()
170+
.useDocumentPicker()
171+
.usingFiles();
172+
173+
processMultiple(pickMultiple);
174+
}
175+
153176
private void processSingle(Observable<Response<SampleFragment, FileData>> pickUsingGallery) {
154177
pickUsingGallery
155178
.subscribeOn(Schedulers.io())

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,39 @@
126126

127127
</LinearLayout>
128128

129+
<LinearLayout
130+
android:layout_width="match_parent"
131+
android:layout_height="wrap_content"
132+
android:orientation="horizontal"
133+
>
134+
135+
<TextView
136+
android:id="@+id/fab_pickup_multiple_types_file"
137+
android:layout_width="0dp"
138+
android:layout_height="wrap_content"
139+
android:background="@color/colorAccent"
140+
android:layout_marginTop="10dp"
141+
android:drawableLeft="@drawable/ic_image_black_24dp"
142+
android:drawablePadding="5dp"
143+
android:padding="5dp"
144+
android:text="Pdf and images file"
145+
android:textColor="@android:color/white"
146+
android:layout_weight="1"/>
147+
148+
<TextView
149+
android:id="@+id/fab_pickup_multiple_types_files"
150+
android:layout_width="0dp"
151+
android:layout_height="wrap_content"
152+
android:background="@color/colorAccent"
153+
android:layout_marginTop="10dp"
154+
android:drawableLeft="@drawable/ic_collections_black_24dp"
155+
android:drawablePadding="5dp"
156+
android:padding="5dp"
157+
android:text="Pdf and images files"
158+
android:textColor="@android:color/white"
159+
android:layout_weight="1"/>
160+
</LinearLayout>
161+
129162
</LinearLayout>
130163

131164
<android.support.v7.widget.RecyclerView

rx_paparazzo/src/main/java/com/miguelbcr/ui/rx_paparazzo2/RxPaparazzo.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,14 @@ public B setMimeType(String mimeType) {
154154
return self;
155155
}
156156

157+
/**
158+
* Sets the mime types of the picker.
159+
*/
160+
public B setMultipleMimeType(String... mimeType) {
161+
this.config.setPickMultipleMimeTypes(mimeType);
162+
return self;
163+
}
164+
157165
/**
158166
* Enables cropping of images.
159167
*/

rx_paparazzo/src/main/java/com/miguelbcr/ui/rx_paparazzo2/entities/Config.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class Config {
3737
private boolean useInternalStorage;
3838

3939
private String pickMimeType;
40+
private String[] pickMultipleMimeTypes;
4041
private boolean pickOpenableOnly;
4142
private boolean useDocumentPicker;
4243
private boolean sendToMediaScanner;
@@ -51,6 +52,7 @@ public Config() {
5152
this.useDocumentPicker = false;
5253
this.pickOpenableOnly = false;
5354
this.pickMimeType = null;
55+
this.pickMultipleMimeTypes = null;
5456
this.sendToMediaScanner = false;
5557
this.failCropIfNotImage = false;
5658
this.fileProviderAuthority = null;
@@ -116,6 +118,18 @@ public String getMimeType(String defaultMimeType) {
116118
return pickMimeType;
117119
}
118120

121+
public void setPickMultipleMimeTypes(String... pickMultipleMimeTypes) {
122+
this.pickMultipleMimeTypes = pickMultipleMimeTypes;
123+
}
124+
125+
public String[] getMultipleMimeTypes() {
126+
if (this.pickMultipleMimeTypes == null) {
127+
return null;
128+
}
129+
130+
return pickMultipleMimeTypes;
131+
}
132+
119133
public void setPickOpenableOnly(boolean pickOpenableOnly) {
120134
this.pickOpenableOnly = pickOpenableOnly;
121135
}

rx_paparazzo/src/main/java/com/miguelbcr/ui/rx_paparazzo2/interactors/PickFile.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,13 @@ public Observable<Uri> react() {
5959
}
6060

6161
private Intent getFileChooserIntent() {
62-
String mimeType = config.getMimeType(getDefaultMimeType());
6362
Intent intent = new Intent();
64-
intent.setType(mimeType);
63+
if (config.getMultipleMimeTypes() == null) {
64+
intent.setType(config.getMimeType(getDefaultMimeType()));
65+
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
66+
intent.setType(DEFAULT_MIME_TYPE);
67+
intent.putExtra(Intent.EXTRA_MIME_TYPES, config.getMultipleMimeTypes());
68+
}
6569

6670
if (config.isUseDocumentPicker() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
6771
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);

rx_paparazzo/src/main/java/com/miguelbcr/ui/rx_paparazzo2/interactors/PickFiles.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,13 @@ private List<Uri> getUris(Intent intent) {
8989
}
9090

9191
private Intent getFileChooserIntent() {
92-
String mimeType = config.getMimeType(getDefaultMimeType());
9392
Intent intent = new Intent();
94-
intent.setType(mimeType);
93+
if (config.getMultipleMimeTypes() == null) {
94+
intent.setType(config.getMimeType(getDefaultMimeType()));
95+
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
96+
intent.setType(DEFAULT_MIME_TYPE);
97+
intent.putExtra(Intent.EXTRA_MIME_TYPES, config.getMultipleMimeTypes());
98+
}
9599

96100
if (config.isUseDocumentPicker() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
97101
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);

0 commit comments

Comments
 (0)