Skip to content

Commit

Permalink
Add file type selection feature.
Browse files Browse the repository at this point in the history
  • Loading branch information
qingmei2 committed Jan 14, 2019
1 parent c77dc98 commit 6a2b087
Show file tree
Hide file tree
Showing 14 changed files with 35 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import com.qingmei2.rximagepicker.entity.ConfigProvider
import com.qingmei2.rximagepicker.ui.ActivityPickerViewController
import com.qingmei2.rximagepicker.ui.ICustomPickerConfiguration

class ImagePickerDisplayer(private val configProvider: ConfigProvider) {
class ImagePickerController(private val configProvider: ConfigProvider) {

fun display() {
configProvider.config?.onDisplay()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class ProxyProviders : InvocationHandler {
return Observable.defer(Callable<ObservableSource<*>> {
val configProvider = proxyTranslator.processMethod(method, args)

ImagePickerDisplayer(configProvider).display()
ImagePickerController(configProvider).display()

val observable = rxImagePickerProcessor.process(configProvider)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package com.qingmei2.rximagepicker.core

import com.qingmei2.rximagepicker.ui.SystemImagePicker
import com.qingmei2.rximagepicker.ui.BasicImagePicker
import java.lang.reflect.Proxy

object RxImagePicker {

fun create(): SystemImagePicker {
return create(SystemImagePicker::class.java)
@JvmStatic
fun create(): BasicImagePicker {
return create(BasicImagePicker::class.java)
}

@JvmStatic
@Suppress("UNCHECKED_CAST")
fun <T> create(classProviders: Class<T>): T {
val proxyProviders = ProxyProviders()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.qingmei2.rximagepicker.ui.ICustomPickerView
import kotlin.reflect.KClass

/**
* Entity class for user's configration.
* Entity class for user's configuration.
*/
data class ConfigProvider(val componentClazz: KClass<*>,
val asFragment: Boolean,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.qingmei2.rximagepicker.entity.sources

import androidx.annotation.IdRes
import com.qingmei2.rximagepicker.ui.camera.SystemCameraFragment
import com.qingmei2.rximagepicker.ui.camera.BasicCameraFragment
import kotlin.reflect.KClass

/**
Expand All @@ -18,7 +18,7 @@ annotation class Camera(
/**
* the UI component that will be displayed.
*/
val componentClazz: KClass<*> = SystemCameraFragment::class,
val componentClazz: KClass<*> = BasicCameraFragment::class,

/**
* the UI component type, as [Fragment] or [Activity].
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.qingmei2.rximagepicker.entity.sources

import androidx.annotation.IdRes
import com.qingmei2.rximagepicker.ui.gallery.SystemGalleryFragment
import com.qingmei2.rximagepicker.ui.gallery.BasicGalleryFragment
import kotlin.reflect.KClass

/**
Expand All @@ -18,7 +18,7 @@ annotation class Gallery(
/**
* the UI component that will be displayed.
*/
val componentClazz: KClass<*> = SystemGalleryFragment::class,
val componentClazz: KClass<*> = BasicGalleryFragment::class,

/**
* the UI component type, as [Fragment] or [Activity].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ import kotlin.jvm.JvmName

fun parseResultNoExtraData(uri: Uri): Result {
return Result.Builder(uri).build()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import com.qingmei2.rximagepicker.entity.sources.Camera
import com.qingmei2.rximagepicker.entity.sources.Gallery
import io.reactivex.Observable

interface SystemImagePicker {
interface BasicImagePicker {

@Gallery
fun openGallery(context: Context): Observable<Result>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import io.reactivex.subjects.PublishSubject
import java.text.SimpleDateFormat
import java.util.*

class SystemCameraFragment : BaseSystemPickerFragment(), ICameraCustomPickerView {
class BasicCameraFragment : BaseSystemPickerFragment(), ICameraCustomPickerView {

private var cameraPictureUrl: Uri? = null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,5 +74,12 @@ sealed class DefaultGalleryMimes {
fun imageOnly(): BaseMimesType = Image

fun audioOnly(): BaseMimesType = Audio

// Call this function if you want to select multiple types at the same time.
// For example: "video/*;image/*"
fun customTypes(types: String): BaseMimesType = object : BaseMimesType() {

override fun getMimesType(): String = types
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import com.qingmei2.rximagepicker.ui.ICustomPickerConfiguration
import io.reactivex.Observable
import io.reactivex.subjects.PublishSubject

class SystemGalleryFragment : BaseSystemPickerFragment(), IGalleryCustomPickerView {
class BasicGalleryFragment : BaseSystemPickerFragment(), IGalleryCustomPickerView {

private var mDefaultSystemGalleryConfig: DefaultSystemGalleryConfig? = null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class RxImagePickerTest {
// private val mockActivity: FragmentActivity = mock()
// private val mockFragmentManager: FragmentManager = mock()
//
// private val mockPicker: SystemImagePicker = mock()
// private val mockPicker: BasicImagePicker = mock()
//
// @Before
// fun setUp() {
Expand Down Expand Up @@ -46,13 +46,13 @@ class RxImagePickerTest {
// fun createTestWithNoParamSuccess() {
// val spy = instanceWithActivityBuilder()
// .let { spy(it) }
// doReturn(mockPicker).whenever(spy).create(SystemImagePicker::class.java)
// doReturn(mockPicker).whenever(spy).create(BasicImagePicker::class.java)
//
// val defaultImagePicker = spy.create()
//
// argumentCaptor<Class<Any>>().apply {
// verify(spy, Times(1)).create(capture())
// assertEquals(firstValue, SystemImagePicker::class.java)
// assertEquals(firstValue, BasicImagePicker::class.java)
// }
// assertEquals(defaultImagePicker, mockPicker)
// }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import kotlinx.android.synthetic.main.activity_system.*
@SuppressLint("CheckResult")
class SystemActivity : AppCompatActivity() {

private lateinit var defaultImagePicker: BasicImagePicker
private lateinit var defaultImagePicker: SystemImagePicker

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -26,15 +26,18 @@ class SystemActivity : AppCompatActivity() {
}

private fun initRxImagePicker() {
defaultImagePicker = RxImagePicker.create(BasicImagePicker::class.java)
defaultImagePicker = RxImagePicker.create(SystemImagePicker::class.java)
}

private fun pickGallery() {
defaultImagePicker
.openGallery(
this,
DefaultSystemGalleryConfig.instance(
mimesType = DefaultGalleryMimes.videoOnly()
// mimesType = DefaultGalleryMimes.videoOnly() // only video files
// mimesType = DefaultGalleryMimes.imageOnly() // only image files, default options.
// mimesType = DefaultGalleryMimes.audioOnly() // only audio files
mimesType = DefaultGalleryMimes.customTypes("video/*;image/*") // multiType
)
)
.subscribe { result -> onPickUriSuccess(result.uri) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ import com.qingmei2.rximagepicker.entity.sources.Gallery
import com.qingmei2.rximagepicker.ui.ICustomPickerConfiguration
import io.reactivex.Observable

interface BasicImagePicker {
interface SystemImagePicker {

@Gallery
fun openGallery(context: Context, config: ICustomPickerConfiguration): Observable<Result>
fun openGallery(context: Context,
config: ICustomPickerConfiguration?): Observable<Result>

@Camera
fun openCamera(context: Context): Observable<Result>
Expand Down

0 comments on commit 6a2b087

Please sign in to comment.