Skip to content

Commit

Permalink
Merge branch 'feature/duplicate-control-pad'
Browse files Browse the repository at this point in the history
  • Loading branch information
umer0586 committed Jan 20, 2025
2 parents 72f3b48 + d5daf31 commit f6855f8
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.rememberScrollState
Expand All @@ -49,6 +50,7 @@ import androidx.compose.material.icons.filled.Menu
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material.icons.filled.Share
import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card
import androidx.compose.material3.DrawerValue
Expand Down Expand Up @@ -81,11 +83,13 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.github.umer0586.droidpad.R
import com.github.umer0586.droidpad.data.database.entities.ConnectionType
import com.github.umer0586.droidpad.data.database.entities.ControlPad
import com.github.umer0586.droidpad.data.database.entities.Orientation
Expand Down Expand Up @@ -320,6 +324,9 @@ fun ControlPadsScreenContent(
},
onBuildClick = {
onUiEvent(ControlPadsScreenEvent.OnBuildClick(it))
},
onDuplicateClick = {
onUiEvent(ControlPadsScreenEvent.OnDuplicateClick(it))
}

)
Expand All @@ -340,7 +347,8 @@ private fun ItemCard(
onDeleteClick: ((ControlPad) -> Unit)? = null,
onPlayClick: ((ControlPad) -> Unit)? = null,
onSettingClick: ((ControlPad) -> Unit)? = null,
onBuildClick: ((ControlPad) -> Unit)? = null
onBuildClick: ((ControlPad) -> Unit)? = null,
onDuplicateClick: ((ControlPad) -> Unit)? = null,

){
Card(
Expand Down Expand Up @@ -443,6 +451,19 @@ private fun ItemCard(
}
)

IconButton(
onClick = {
onDuplicateClick?.invoke(controlPad)
},
content = {
Icon(
modifier = Modifier.size(25.dp),
painter = painterResource(R.drawable.ic_copy),
contentDescription = "DuplicateIcon"
)
}
)



}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.github.umer0586.droidpad.data.database.entities.ConnectionType
import com.github.umer0586.droidpad.data.database.entities.ControlPad
import com.github.umer0586.droidpad.data.database.entities.ControlPadItem
import com.github.umer0586.droidpad.data.repositories.ConnectionConfigRepository
import com.github.umer0586.droidpad.data.repositories.ControlPadItemRepository
import com.github.umer0586.droidpad.data.repositories.ControlPadRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -50,6 +52,7 @@ sealed interface ControlPadsScreenEvent {
data class OnEditClick(val controlPad: ControlPad) : ControlPadsScreenEvent
data class OnBuildClick(val controlPad: ControlPad) : ControlPadsScreenEvent
data class OnSettingClick(val controlPad: ControlPad) : ControlPadsScreenEvent
data class OnDuplicateClick(val controlPad: ControlPad) : ControlPadsScreenEvent
// Indicates that user clicked the "+" floating action button
data object OnCreateClick : ControlPadsScreenEvent
data object OnExitClick : ControlPadsScreenEvent
Expand All @@ -62,7 +65,8 @@ sealed interface ControlPadsScreenEvent {
@HiltViewModel
class ControlPadsScreenViewModel @Inject constructor(
private val controlPadsRepository: ControlPadRepository,
private val connectionConfigRepository: ConnectionConfigRepository
private val connectionConfigRepository: ConnectionConfigRepository,
private val controlPadItemRepository: ControlPadItemRepository
) : ViewModel(){

private val _uiState = MutableStateFlow(ControlPadsScreenState())
Expand Down Expand Up @@ -116,9 +120,48 @@ class ControlPadsScreenViewModel @Inject constructor(
it.copy(itemToBeEdited = event.controlPad)
}
}
is ControlPadsScreenEvent.OnDuplicateClick -> {
viewModelScope.launch {
createAndSaveDuplicate(event.controlPad)
}
}
else -> {

}
}
}

private suspend fun createAndSaveDuplicate(controlPad: ControlPad){

val duplicateControlPad = ControlPad(
name = controlPad.name,
orientation = controlPad.orientation,
)

controlPadsRepository.saveControlPad(duplicateControlPad)
.also { duplicateControlPadId ->

controlPadsRepository.getControlPadItemsOf(controlPad)
.forEach { controlPadItem ->
val duplicateControlPadItem = controlPadItem.copy(
id = 0, // // its not zero, it will be auto-generated (unique) when save in DB
controlPadId = duplicateControlPadId
)
controlPadItemRepository.save(duplicateControlPadItem)
}

connectionConfigRepository.getConfigForControlPad(controlPad.id)
?.also { connectionConfig ->
connectionConfigRepository.save(
connectionConfig.copy(
id = 0, // its not zero, it will be auto-generated (unique) when save in DB
controlPadId = duplicateControlPadId
)
)
_uiState.value.controlPadConnectionTypeMap[duplicateControlPadId] = connectionConfig.connectionType
}


}
}
}
12 changes: 12 additions & 0 deletions app/src/main/res/drawable/ic_copy.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="177dp"
android:height="177dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M15.24,2H11.346C9.582,2 8.184,2 7.091,2.148C5.965,2.3 5.054,2.62 4.336,3.341C3.617,4.062 3.298,4.977 3.147,6.107C3,7.205 3,8.608 3,10.379V16.217C3,17.725 3.92,19.017 5.227,19.559C5.16,18.65 5.16,17.374 5.16,16.312L5.16,11.398L5.16,11.302C5.16,10.021 5.16,8.916 5.278,8.032C5.405,7.084 5.691,6.176 6.425,5.439C7.159,4.702 8.064,4.415 9.008,4.287C9.889,4.169 10.989,4.169 12.265,4.169L12.36,4.169H15.24L15.335,4.169C16.611,4.169 17.709,4.169 18.59,4.287C18.063,2.948 16.762,2 15.24,2Z"
android:fillColor="#1C274C"/>
<path
android:pathData="M6.6,11.397C6.6,8.671 6.6,7.308 7.444,6.461C8.287,5.614 9.645,5.614 12.36,5.614H15.24C17.955,5.614 19.313,5.614 20.157,6.461C21,7.308 21,8.671 21,11.397V16.217C21,18.943 21,20.306 20.157,21.153C19.313,22 17.955,22 15.24,22H12.36C9.645,22 8.287,22 7.444,21.153C6.6,20.306 6.6,18.943 6.6,16.217V11.397Z"
android:fillColor="#1C274C"/>
</vector>

0 comments on commit f6855f8

Please sign in to comment.