Merge branch 'edit_fix' into 'master'
Fix edit button, add test Closes #276 See merge request pixeldroid/PixelDroid!329
This commit is contained in:
commit
b9d11aa153
@ -70,7 +70,9 @@ class EditPhotoTest {
|
|||||||
file.writeBitmap(image)
|
file.writeBitmap(image)
|
||||||
uri = file.toUri()
|
uri = file.toUri()
|
||||||
}
|
}
|
||||||
val intent = Intent(context, PhotoEditActivity::class.java).putExtra("picture_uri", uri)
|
val intent = Intent(context, PhotoEditActivity::class.java)
|
||||||
|
.putExtra(PhotoEditActivity.PICTURE_URI, uri)
|
||||||
|
.putExtra(PhotoEditActivity.PICTURE_POSITION, 0)
|
||||||
|
|
||||||
activityScenario = ActivityScenario.launch<PhotoEditActivity>(intent).onActivity{a -> activity = a}
|
activityScenario = ActivityScenario.launch<PhotoEditActivity>(intent).onActivity{a -> activity = a}
|
||||||
|
|
||||||
|
@ -7,26 +7,21 @@ import android.content.Intent
|
|||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.util.Log
|
|
||||||
import android.view.View.VISIBLE
|
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.core.os.bundleOf
|
|
||||||
import androidx.test.core.app.ActivityScenario
|
import androidx.test.core.app.ActivityScenario
|
||||||
import androidx.test.espresso.Espresso.onView
|
import androidx.test.espresso.Espresso.onView
|
||||||
import androidx.test.espresso.action.ViewActions.click
|
import androidx.test.espresso.action.ViewActions.click
|
||||||
|
import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
|
||||||
import androidx.test.espresso.assertion.ViewAssertions.matches
|
import androidx.test.espresso.assertion.ViewAssertions.matches
|
||||||
import androidx.test.espresso.contrib.RecyclerViewActions
|
|
||||||
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
|
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
|
||||||
import androidx.test.espresso.matcher.ViewMatchers.withId
|
import androidx.test.espresso.matcher.ViewMatchers.withId
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import androidx.test.platform.app.InstrumentationRegistry
|
import androidx.test.platform.app.InstrumentationRegistry
|
||||||
import androidx.test.rule.GrantPermissionRule
|
import androidx.test.rule.GrantPermissionRule
|
||||||
import com.h.pixeldroid.postCreation.PostCreationActivity
|
import com.h.pixeldroid.postCreation.PostCreationActivity
|
||||||
import com.h.pixeldroid.postCreation.photoEdit.ThumbnailAdapter
|
|
||||||
import com.h.pixeldroid.settings.AboutActivity
|
import com.h.pixeldroid.settings.AboutActivity
|
||||||
import com.h.pixeldroid.testUtility.*
|
import com.h.pixeldroid.testUtility.*
|
||||||
import com.h.pixeldroid.utils.db.AppDatabase
|
import com.h.pixeldroid.utils.db.AppDatabase
|
||||||
import org.hamcrest.CoreMatchers.not
|
|
||||||
import org.junit.*
|
import org.junit.*
|
||||||
import org.junit.rules.Timeout
|
import org.junit.rules.Timeout
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
@ -44,7 +39,8 @@ class PostCreationActivityTest {
|
|||||||
val globalTimeout: Timeout = Timeout.seconds(30)
|
val globalTimeout: Timeout = Timeout.seconds(30)
|
||||||
|
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val mRuntimePermissionRule: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
val mRuntimePermissionRule: GrantPermissionRule =
|
||||||
|
GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
|
|
||||||
private fun File.writeBitmap(bitmap: Bitmap) {
|
private fun File.writeBitmap(bitmap: Bitmap) {
|
||||||
outputStream().use { out ->
|
outputStream().use { out ->
|
||||||
@ -112,32 +108,65 @@ class PostCreationActivityTest {
|
|||||||
// should send on main activity
|
// should send on main activity
|
||||||
onView(withId(R.id.retry_upload_button)).check(matches(not(isDisplayed())))
|
onView(withId(R.id.retry_upload_button)).check(matches(not(isDisplayed())))
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes sure the [com.h.pixeldroid.postCreation.photoEdit.PhotoEditActivity] is launched
|
||||||
|
* when the edit button is pressed
|
||||||
|
*/
|
||||||
@Test
|
@Test
|
||||||
fun editImage() {
|
fun editImage() {
|
||||||
Thread.sleep(1000)
|
waitForView(R.id.postTextInputLayout)
|
||||||
|
|
||||||
onView(withId(R.id.image_grid)).perform(
|
onView(withId(R.id.editPhotoButton)).perform(click())
|
||||||
RecyclerViewActions.actionOnItemAtPosition<PostCreationActivity.PostCreationAdapter.ViewHolder>(
|
|
||||||
0,
|
|
||||||
CustomMatchers.clickChildViewWithId(R.id.galleryImage)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Thread.sleep(1000)
|
|
||||||
|
|
||||||
onView(withId(R.id.recycler_view))
|
waitForView(R.id.cropImageButton)
|
||||||
.perform(
|
|
||||||
RecyclerViewActions.actionOnItemAtPosition<ThumbnailAdapter.MyViewHolder>(
|
|
||||||
2,
|
|
||||||
CustomMatchers.clickChildViewWithId(R.id.thumbnail)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Thread.sleep(1000)
|
|
||||||
onView(withId(R.id.action_save)).perform(click())
|
|
||||||
Thread.sleep(1000)
|
|
||||||
onView(withId(R.id.carousel)).check(matches(isDisplayed()))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Switch from carousel to grid and back
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
fun carouselSwitch() {
|
||||||
|
waitForView(R.id.postTextInputLayout)
|
||||||
|
|
||||||
|
onView(withId(R.id.switchToGridButton)).perform(click())
|
||||||
|
|
||||||
|
waitForView(R.id.galleryImage)
|
||||||
|
|
||||||
|
onView(withId(R.id.switchToCarouselButton)).perform(click())
|
||||||
|
|
||||||
|
waitForView(R.id.btn_previous)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete images and check if it worked
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
fun deleteImages() {
|
||||||
|
waitForView(R.id.postTextInputLayout)
|
||||||
|
|
||||||
|
onView(withId(R.id.removePhotoButton)).perform(click()).perform(click())
|
||||||
|
|
||||||
|
onView(withId(R.id.switchToGridButton)).perform(click())
|
||||||
|
|
||||||
|
onView(withId(R.id.galleryImage)).check(doesNotExist())
|
||||||
|
onView(withId(R.id.addPhotoSquare)).check(matches(isDisplayed()))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes sure the [com.h.pixeldroid.postCreation.camera.CameraActivity] is launched
|
||||||
|
* when the add image button is pressed
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
fun addImage() {
|
||||||
|
waitForView(R.id.postTextInputLayout)
|
||||||
|
|
||||||
|
onView(withId(R.id.addPhotoButton)).perform(click())
|
||||||
|
|
||||||
|
waitForView(R.id.camera_activity_fragment)
|
||||||
|
}
|
||||||
|
/*
|
||||||
@Test
|
@Test
|
||||||
fun cancelEdit() {
|
fun cancelEdit() {
|
||||||
onView(withId(R.id.image_grid)).perform(
|
onView(withId(R.id.image_grid)).perform(
|
||||||
|
@ -16,6 +16,7 @@ import android.view.View.INVISIBLE
|
|||||||
import android.view.View.VISIBLE
|
import android.view.View.VISIBLE
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.result.ActivityResult
|
import androidx.activity.result.ActivityResult
|
||||||
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.core.net.toFile
|
import androidx.core.net.toFile
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
@ -412,18 +413,18 @@ class PostCreationActivity : BaseActivity() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun editResultContract(position: Int) = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
|
private val editResultContract: ActivityResultLauncher<Intent> = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
|
||||||
result: ActivityResult? ->
|
result: ActivityResult? ->
|
||||||
if (result?.resultCode == Activity.RESULT_OK && result.data != null) {
|
if (result?.resultCode == Activity.RESULT_OK && result.data != null) {
|
||||||
photoData[position].apply {
|
val position: Int = result.data!!.getIntExtra(PhotoEditActivity.PICTURE_POSITION, 0)
|
||||||
imageUri = result.data!!.getStringExtra("result")!!.toUri()
|
photoData.getOrNull(position)?.apply {
|
||||||
|
imageUri = result.data!!.getStringExtra(PhotoEditActivity.PICTURE_URI)!!.toUri()
|
||||||
size = imageUri.getSize()
|
size = imageUri.getSize()
|
||||||
}
|
progress = null
|
||||||
|
uploadId = null
|
||||||
|
} ?: Toast.makeText(applicationContext, "Error while editing", Toast.LENGTH_SHORT).show()
|
||||||
|
|
||||||
binding.carousel.addData(photoData.map { CarouselItem(it.imageUri, it.imageDescription) })
|
binding.carousel.addData(photoData.map { CarouselItem(it.imageUri, it.imageDescription) })
|
||||||
|
|
||||||
photoData[position].progress = null
|
|
||||||
photoData[position].uploadId = null
|
|
||||||
} else if(result?.resultCode != Activity.RESULT_CANCELED){
|
} else if(result?.resultCode != Activity.RESULT_CANCELED){
|
||||||
Toast.makeText(applicationContext, "Error while editing", Toast.LENGTH_SHORT).show()
|
Toast.makeText(applicationContext, "Error while editing", Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
@ -431,8 +432,8 @@ class PostCreationActivity : BaseActivity() {
|
|||||||
|
|
||||||
private fun edit(position: Int) {
|
private fun edit(position: Int) {
|
||||||
val intent = Intent(this, PhotoEditActivity::class.java)
|
val intent = Intent(this, PhotoEditActivity::class.java)
|
||||||
.putExtra("picture_uri", photoData[position].imageUri)
|
.putExtra(PhotoEditActivity.PICTURE_URI, photoData[position].imageUri)
|
||||||
.putExtra("no upload", false)
|
.putExtra(PhotoEditActivity.PICTURE_POSITION, position)
|
||||||
editResultContract(position).launch(intent)
|
editResultContract.launch(intent)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -65,6 +65,8 @@ class PhotoEditActivity : BaseActivity() {
|
|||||||
private lateinit var filterListFragment: FilterListFragment
|
private lateinit var filterListFragment: FilterListFragment
|
||||||
private lateinit var editImageFragment: EditImageFragment
|
private lateinit var editImageFragment: EditImageFragment
|
||||||
|
|
||||||
|
private var picturePosition: Int? = null
|
||||||
|
|
||||||
private var brightnessFinal = BRIGHTNESS_START
|
private var brightnessFinal = BRIGHTNESS_START
|
||||||
private var saturationFinal = SATURATION_START
|
private var saturationFinal = SATURATION_START
|
||||||
private var contrastFinal = CONTRAST_START
|
private var contrastFinal = CONTRAST_START
|
||||||
@ -74,6 +76,9 @@ class PhotoEditActivity : BaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object{
|
companion object{
|
||||||
|
internal const val PICTURE_URI = "picture_uri"
|
||||||
|
internal const val PICTURE_POSITION = "picture_position"
|
||||||
|
|
||||||
private var executor: ExecutorService = newSingleThreadExecutor()
|
private var executor: ExecutorService = newSingleThreadExecutor()
|
||||||
private var future: Future<*>? = null
|
private var future: Future<*>? = null
|
||||||
|
|
||||||
@ -97,7 +102,8 @@ class PhotoEditActivity : BaseActivity() {
|
|||||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
supportActionBar?.setHomeButtonEnabled(true)
|
supportActionBar?.setHomeButtonEnabled(true)
|
||||||
|
|
||||||
initialUri = intent.getParcelableExtra("picture_uri")
|
initialUri = intent.getParcelableExtra(PICTURE_URI)
|
||||||
|
picturePosition = intent.getIntExtra(PICTURE_POSITION, 0)
|
||||||
imageUri = initialUri
|
imageUri = initialUri
|
||||||
|
|
||||||
// Crop button on-click listener
|
// Crop button on-click listener
|
||||||
@ -342,7 +348,8 @@ class PhotoEditActivity : BaseActivity() {
|
|||||||
private fun sendBackImage(file: String) {
|
private fun sendBackImage(file: String) {
|
||||||
val intent = Intent(this, PostCreationActivity::class.java)
|
val intent = Intent(this, PostCreationActivity::class.java)
|
||||||
.apply {
|
.apply {
|
||||||
putExtra("result", file)
|
putExtra(PICTURE_URI, file)
|
||||||
|
putExtra(PICTURE_POSITION, picturePosition)
|
||||||
addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
|
addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,9 +16,6 @@ class DatabaseModule(private val context: Context) {
|
|||||||
return Room.databaseBuilder(
|
return Room.databaseBuilder(
|
||||||
context,
|
context,
|
||||||
AppDatabase::class.java, "pixeldroid"
|
AppDatabase::class.java, "pixeldroid"
|
||||||
).allowMainThreadQueries()
|
).allowMainThreadQueries().build()
|
||||||
//TODO remove this for 1.0 release
|
|
||||||
.fallbackToDestructiveMigration()
|
|
||||||
.build()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user