Fix edit button, add test

This commit is contained in:
Matthieu 2021-04-21 22:07:05 +00:00
parent 4d1efdfea4
commit cb3dd30de6
5 changed files with 79 additions and 43 deletions

View File

@ -70,7 +70,9 @@ class EditPhotoTest {
file.writeBitmap(image)
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}

View File

@ -7,26 +7,21 @@ import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Color
import android.net.Uri
import android.util.Log
import android.view.View.VISIBLE
import androidx.core.net.toUri
import androidx.core.os.bundleOf
import androidx.test.core.app.ActivityScenario
import androidx.test.espresso.Espresso.onView
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.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import com.h.pixeldroid.postCreation.PostCreationActivity
import com.h.pixeldroid.postCreation.photoEdit.ThumbnailAdapter
import com.h.pixeldroid.settings.AboutActivity
import com.h.pixeldroid.testUtility.*
import com.h.pixeldroid.utils.db.AppDatabase
import org.hamcrest.CoreMatchers.not
import org.junit.*
import org.junit.rules.Timeout
import org.junit.runner.RunWith
@ -44,7 +39,8 @@ class PostCreationActivityTest {
val globalTimeout: Timeout = Timeout.seconds(30)
@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) {
outputStream().use { out ->
@ -112,32 +108,65 @@ class PostCreationActivityTest {
// should send on main activity
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
fun editImage() {
Thread.sleep(1000)
waitForView(R.id.postTextInputLayout)
onView(withId(R.id.image_grid)).perform(
RecyclerViewActions.actionOnItemAtPosition<PostCreationActivity.PostCreationAdapter.ViewHolder>(
0,
CustomMatchers.clickChildViewWithId(R.id.galleryImage)
)
)
Thread.sleep(1000)
onView(withId(R.id.editPhotoButton)).perform(click())
onView(withId(R.id.recycler_view))
.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()))
waitForView(R.id.cropImageButton)
}
/**
* 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
fun cancelEdit() {
onView(withId(R.id.image_grid)).perform(

View File

@ -16,6 +16,7 @@ import android.view.View.INVISIBLE
import android.view.View.VISIBLE
import android.widget.Toast
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.net.toFile
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? ->
if (result?.resultCode == Activity.RESULT_OK && result.data != null) {
photoData[position].apply {
imageUri = result.data!!.getStringExtra("result")!!.toUri()
val position: Int = result.data!!.getIntExtra(PhotoEditActivity.PICTURE_POSITION, 0)
photoData.getOrNull(position)?.apply {
imageUri = result.data!!.getStringExtra(PhotoEditActivity.PICTURE_URI)!!.toUri()
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) })
photoData[position].progress = null
photoData[position].uploadId = null
} else if(result?.resultCode != Activity.RESULT_CANCELED){
Toast.makeText(applicationContext, "Error while editing", Toast.LENGTH_SHORT).show()
}
@ -431,8 +432,8 @@ class PostCreationActivity : BaseActivity() {
private fun edit(position: Int) {
val intent = Intent(this, PhotoEditActivity::class.java)
.putExtra("picture_uri", photoData[position].imageUri)
.putExtra("no upload", false)
editResultContract(position).launch(intent)
.putExtra(PhotoEditActivity.PICTURE_URI, photoData[position].imageUri)
.putExtra(PhotoEditActivity.PICTURE_POSITION, position)
editResultContract.launch(intent)
}
}

View File

@ -65,6 +65,8 @@ class PhotoEditActivity : BaseActivity() {
private lateinit var filterListFragment: FilterListFragment
private lateinit var editImageFragment: EditImageFragment
private var picturePosition: Int? = null
private var brightnessFinal = BRIGHTNESS_START
private var saturationFinal = SATURATION_START
private var contrastFinal = CONTRAST_START
@ -74,6 +76,9 @@ class PhotoEditActivity : BaseActivity() {
}
companion object{
internal const val PICTURE_URI = "picture_uri"
internal const val PICTURE_POSITION = "picture_position"
private var executor: ExecutorService = newSingleThreadExecutor()
private var future: Future<*>? = null
@ -97,7 +102,8 @@ class PhotoEditActivity : BaseActivity() {
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setHomeButtonEnabled(true)
initialUri = intent.getParcelableExtra("picture_uri")
initialUri = intent.getParcelableExtra(PICTURE_URI)
picturePosition = intent.getIntExtra(PICTURE_POSITION, 0)
imageUri = initialUri
// Crop button on-click listener
@ -342,7 +348,8 @@ class PhotoEditActivity : BaseActivity() {
private fun sendBackImage(file: String) {
val intent = Intent(this, PostCreationActivity::class.java)
.apply {
putExtra("result", file)
putExtra(PICTURE_URI, file)
putExtra(PICTURE_POSITION, picturePosition)
addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
}

View File

@ -16,9 +16,6 @@ class DatabaseModule(private val context: Context) {
return Room.databaseBuilder(
context,
AppDatabase::class.java, "pixeldroid"
).allowMainThreadQueries()
//TODO remove this for 1.0 release
.fallbackToDestructiveMigration()
.build()
).allowMainThreadQueries().build()
}
}