diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 9e9dcd5..574d161 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -5,4 +5,4 @@
-
\ No newline at end of file
+
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 7470bb7..986cea2 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -19,4 +19,4 @@
-
\ No newline at end of file
+
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..797acea
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/src/main/java/io/realworld/api/models/entities/ArticleData.kt b/api/src/main/java/io/realworld/api/models/entities/ArticleData.kt
index 2669839..467baf6 100644
--- a/api/src/main/java/io/realworld/api/models/entities/ArticleData.kt
+++ b/api/src/main/java/io/realworld/api/models/entities/ArticleData.kt
@@ -7,11 +7,11 @@ import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class ArticleData(
@Json(name = "body")
- val body: String,
+ val body: String?=null,
@Json(name = "description")
- val description: String,
+ val description: String?=null,
@Json(name = "tagList")
- val tagList: List,
+ val tagList: List?=null,
@Json(name = "title")
- val title: String
+ val title: String?=null
)
\ No newline at end of file
diff --git a/api/src/main/java/io/realworld/api/models/requests/UpsertArticleRequest.kt b/api/src/main/java/io/realworld/api/models/requests/UpsertArticleRequest.kt
new file mode 100644
index 0000000..fd745fd
--- /dev/null
+++ b/api/src/main/java/io/realworld/api/models/requests/UpsertArticleRequest.kt
@@ -0,0 +1,13 @@
+package io.realworld.api.models.requests
+
+import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
+import io.realworld.api.models.entities.Article
+import io.realworld.api.models.entities.ArticleData
+
+
+@JsonClass(generateAdapter = true)
+data class UpsertArticleRequest(
+ @Json(name ="article")
+ val article : ArticleData
+)
\ No newline at end of file
diff --git a/api/src/main/java/io/realworld/api/services/ConduitAuthAPI.kt b/api/src/main/java/io/realworld/api/services/ConduitAuthAPI.kt
index 4cff90d..e38d398 100644
--- a/api/src/main/java/io/realworld/api/services/ConduitAuthAPI.kt
+++ b/api/src/main/java/io/realworld/api/services/ConduitAuthAPI.kt
@@ -1,5 +1,6 @@
package io.realworld.api.services
+import io.realworld.api.models.requests.UpsertArticleRequest
import io.realworld.api.models.requests.UserUpdateRequest
import io.realworld.api.models.responses.ArticleResponse
import io.realworld.api.models.responses.ArticlesResponse
@@ -45,4 +46,9 @@ interface ConduitAuthAPI {
suspend fun unfavoriteArticle(
@Path("slug") slug: String
): Response
+
+ @POST("articles")
+ suspend fun createArticle(
+ @Body article: UpsertArticleRequest
+ ) :Response
}
\ No newline at end of file
diff --git a/app/src/main/java/io/realworld/android/data/ArticlesRepo.kt b/app/src/main/java/io/realworld/android/data/ArticlesRepo.kt
index d7b59e9..510dee4 100644
--- a/app/src/main/java/io/realworld/android/data/ArticlesRepo.kt
+++ b/app/src/main/java/io/realworld/android/data/ArticlesRepo.kt
@@ -1,6 +1,9 @@
package io.realworld.android.data
import io.realworld.api.ConduitClient
+import io.realworld.api.models.entities.Article
+import io.realworld.api.models.entities.ArticleData
+import io.realworld.api.models.requests.UpsertArticleRequest
object ArticlesRepo {
val api = ConduitClient.publicApi
@@ -8,4 +11,24 @@ object ArticlesRepo {
suspend fun getGlobalFeed() = api.getArticles().body()?.articles
suspend fun getMyFeed() = authApi.getFeedArticles().body()?.articles
+
+ suspend fun createArticle(
+ title:String?,
+ description:String?,
+ body:String?,
+ tagList:List?=null
+ ) : Article? {
+ val response =authApi.createArticle(
+ UpsertArticleRequest(
+ ArticleData(
+ title=title,
+ description = description,
+ body = body,
+ tagList = tagList
+ )
+ )
+ )
+
+ return response.body()?.article
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/io/realworld/android/ui/article/ArticleViewModel.kt b/app/src/main/java/io/realworld/android/ui/article/ArticleViewModel.kt
index 39f7d5e..4d1e5aa 100644
--- a/app/src/main/java/io/realworld/android/ui/article/ArticleViewModel.kt
+++ b/app/src/main/java/io/realworld/android/ui/article/ArticleViewModel.kt
@@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import io.realworld.android.data.ArticlesRepo
import io.realworld.api.ConduitClient
import io.realworld.api.models.entities.Article
import kotlinx.coroutines.launch
@@ -20,4 +21,21 @@ class ArticleViewModel : ViewModel() {
response.body()?.article.let { _article.postValue(it) }
}
+
+
+ fun createArticle(
+ title:String?,
+ description:String?,
+ body:String?,
+ tagList:List?=null
+ ) =viewModelScope.launch {
+ val article = ArticlesRepo.createArticle(
+ title=title,
+ description = description,
+ body=body,
+ tagList = tagList
+ )
+ }
+
+
}
\ No newline at end of file
diff --git a/app/src/main/java/io/realworld/android/ui/article/CreateArticleFragment.kt b/app/src/main/java/io/realworld/android/ui/article/CreateArticleFragment.kt
new file mode 100644
index 0000000..7b1f447
--- /dev/null
+++ b/app/src/main/java/io/realworld/android/ui/article/CreateArticleFragment.kt
@@ -0,0 +1,46 @@
+package io.realworld.android.ui.article
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Toast
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import io.realworld.android.databinding.FragmentCreateArticleBinding
+
+class CreateArticleFragment: Fragment() {
+
+
+ private var _binding:FragmentCreateArticleBinding?= null
+ private lateinit var articleViewModel:ArticleViewModel
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ _binding= FragmentCreateArticleBinding.inflate(layoutInflater,container,false)
+ articleViewModel= ViewModelProvider(this).get(ArticleViewModel::class.java)
+
+
+ return _binding?.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ _binding?.apply {
+ submitButton.setOnClickListener{
+ articleViewModel.createArticle(
+ title=articleTitleTv.text.toString().takeIf { it.isNotBlank() },
+ description = articleDesciptionTv.text.toString().takeIf { it.isNotBlank() },
+ body = articleBodyTv.text.toString().takeIf{it.isNotBlank()},
+ tagList = articleTagTv.text.toString().split("\\s".toRegex())
+ )
+ Toast.makeText(requireContext(),"Article Published",Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_create_article.xml b/app/src/main/res/drawable/ic_create_article.xml
new file mode 100644
index 0000000..9718be6
--- /dev/null
+++ b/app/src/main/res/drawable/ic_create_article.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_create_article.xml b/app/src/main/res/layout/fragment_create_article.xml
new file mode 100644
index 0000000..e4a50e9
--- /dev/null
+++ b/app/src/main/res/layout/fragment_create_article.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_main_user.xml b/app/src/main/res/menu/menu_main_user.xml
index 62b8480..061c14d 100644
--- a/app/src/main/res/menu/menu_main_user.xml
+++ b/app/src/main/res/menu/menu_main_user.xml
@@ -12,10 +12,14 @@
android:id="@+id/nav_my_feed"
android:icon="@drawable/ic_my_feed"
android:title="@string/menu_my_feed" />
+
-
\ No newline at end of file
+
diff --git a/app/src/main/res/navigation/navigation_main.xml b/app/src/main/res/navigation/navigation_main.xml
index cb7ed33..dc43b76 100644
--- a/app/src/main/res/navigation/navigation_main.xml
+++ b/app/src/main/res/navigation/navigation_main.xml
@@ -51,4 +51,9 @@
android:id="@+id/nav_article"
android:name="io.realworld.android.ui.article.ArticleFragment"
tools:layout="@layout/fragment_article" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0dd8ec3..fe0f3d5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -11,8 +11,9 @@
My Feed
Login / Signup
Settings
+ New Article
ARTICLE_ID
-
\ No newline at end of file
+
diff --git a/build.gradle b/build.gradle
index ff25929..b9809b8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -28,4 +28,4 @@ allprojects {
task clean(type: Delete) {
delete rootProject.buildDir
-}
\ No newline at end of file
+}