FAQ activity
FAq rv and adapter Woka support Activity for both kind of user Viewmodel architecture for activity Integration of woka support both apis
This commit is contained in:
12
.idea/deploymentTargetDropDown.xml
generated
12
.idea/deploymentTargetDropDown.xml
generated
@@ -4,6 +4,18 @@
|
||||
<value>
|
||||
<entry key="app">
|
||||
<State>
|
||||
<targetSelectedWithDropDown>
|
||||
<Target>
|
||||
<type value="QUICK_BOOT_TARGET" />
|
||||
<deviceKey>
|
||||
<Key>
|
||||
<type value="VIRTUAL_DEVICE_PATH" />
|
||||
<value value="$PROJECT_DIR$/../.android/avd/Pixel_7_Pro_API_33.avd" />
|
||||
</Key>
|
||||
</deviceKey>
|
||||
</Target>
|
||||
</targetSelectedWithDropDown>
|
||||
<timeTargetWasSelectedWithDropDown value="2024-06-05T11:43:41.893398Z" />
|
||||
<targetsSelectedWithDialog>
|
||||
<Target>
|
||||
<type value="QUICK_BOOT_TARGET" />
|
||||
|
||||
@@ -16,10 +16,15 @@
|
||||
android:theme="@style/Theme.Woka"
|
||||
tools:targetApi="31">
|
||||
<activity
|
||||
android:name=".home.sidebar.FaqActivity"
|
||||
android:exported="false" />
|
||||
android:name=".home.sidebar.support.SupportActivity"
|
||||
android:exported="false"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".home.sidebar.AboutActivity"
|
||||
android:name=".home.sidebar.faqs.FaqActivity"
|
||||
android:exported="false"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
android:name=".home.sidebar.aboutwoka.AboutActivity"
|
||||
android:exported="false"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity
|
||||
|
||||
@@ -16,18 +16,14 @@ import android.view.HapticFeedbackConstants
|
||||
import android.view.View.GONE
|
||||
import android.view.View.VISIBLE
|
||||
import android.view.WindowManager
|
||||
import android.view.animation.Animation
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.GravityCompat
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.bumptech.glide.Glide
|
||||
import com.google.android.exoplayer2.ExoPlayer
|
||||
import com.jwplayer.pub.api.license.LicenseUtil
|
||||
import com.woka.BuildConfig
|
||||
import com.woka.R
|
||||
@@ -39,7 +35,9 @@ import com.woka.home.BottomNavigation.Companion.MY_LIST
|
||||
import com.woka.home.fragments.Home1Fragment
|
||||
import com.woka.home.fragments.Home2Fragment
|
||||
import com.woka.home.fragments.MyListFragment
|
||||
import com.woka.home.sidebar.AboutActivity
|
||||
import com.woka.home.sidebar.aboutwoka.AboutActivity
|
||||
import com.woka.home.sidebar.faqs.FaqActivity
|
||||
import com.woka.home.sidebar.support.SupportActivity
|
||||
import com.woka.mvvm.userDataModels.UserDataResponse
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.onboard.OnboardActivity
|
||||
@@ -268,6 +266,16 @@ class HomeActivity : WokaBaseActivity(),
|
||||
startActivity(Intent(this@HomeActivity, AboutActivity::class.java),
|
||||
ActivityOptions.makeSceneTransitionAnimation(this@HomeActivity).toBundle())
|
||||
}
|
||||
|
||||
sbFaqCard.setOnClickListener {
|
||||
startActivity(Intent(this@HomeActivity, FaqActivity::class.java),
|
||||
ActivityOptions.makeSceneTransitionAnimation(this@HomeActivity).toBundle())
|
||||
}
|
||||
|
||||
sbWokaSupportCard.setOnClickListener {
|
||||
startActivity(Intent(this@HomeActivity, SupportActivity::class.java),
|
||||
ActivityOptions.makeSceneTransitionAnimation(this@HomeActivity).toBundle())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import com.woka.R
|
||||
import com.woka.databinding.ActivityMoreHomeBinding
|
||||
import com.woka.modules.blogs.BlogsAdapter
|
||||
import com.woka.modules.blogs.BlogsRepository
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.utils.WokaBaseActivity
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
package com.woka.home.sidebar
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import com.woka.R
|
||||
|
||||
class FaqActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
setContentView(R.layout.activity_faq)
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
|
||||
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
||||
insets
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.woka.home.sidebar
|
||||
package com.woka.home.sidebar.aboutwoka
|
||||
|
||||
import android.os.Bundle
|
||||
import android.transition.Slide
|
||||
80
app/src/main/java/com/woka/home/sidebar/faqs/FaqActivity.kt
Normal file
80
app/src/main/java/com/woka/home/sidebar/faqs/FaqActivity.kt
Normal file
@@ -0,0 +1,80 @@
|
||||
package com.woka.home.sidebar.faqs
|
||||
|
||||
import android.os.Bundle
|
||||
import android.transition.Slide
|
||||
import android.view.Gravity
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import com.woka.R
|
||||
import com.woka.databinding.ActivityFaqBinding
|
||||
import com.woka.modules.faqs.FAQsRepository
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.utils.ProgressView
|
||||
import com.woka.utils.toast
|
||||
|
||||
class FaqActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var binding: ActivityFaqBinding
|
||||
|
||||
private var adapter: FaqsAdapter? = null
|
||||
private lateinit var progressView: ProgressView
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
window.enterTransition = Slide().apply {
|
||||
slideEdge = Gravity.END
|
||||
}
|
||||
enableEdgeToEdge()
|
||||
binding = ActivityFaqBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
|
||||
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
||||
insets
|
||||
}
|
||||
|
||||
progressView = ProgressView(this, getString(R.string.please_wait))
|
||||
|
||||
initViews()
|
||||
|
||||
clickEvents()
|
||||
|
||||
setObservers()
|
||||
}
|
||||
|
||||
private fun setObservers() {
|
||||
FAQsRepository.faqLiveData.observe(this){
|
||||
when(it){
|
||||
is ApiResult.Error -> {
|
||||
toast(it.errorMessage)
|
||||
progressView.hide()
|
||||
}
|
||||
is ApiResult.Loading -> progressView.show()
|
||||
is ApiResult.Success -> {
|
||||
progressView.hide()
|
||||
it.data?.result?.let {faqs ->
|
||||
adapter?.submitList(faqs)
|
||||
}
|
||||
}
|
||||
null -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initViews() {
|
||||
binding.apply {
|
||||
adapter = FaqsAdapter()
|
||||
rvFaq.adapter = adapter
|
||||
}
|
||||
}
|
||||
|
||||
private fun clickEvents() {
|
||||
binding.apply {
|
||||
backBtn.setOnClickListener {
|
||||
onBackPressedDispatcher.onBackPressed()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
90
app/src/main/java/com/woka/home/sidebar/faqs/FaqsAdapter.kt
Normal file
90
app/src/main/java/com/woka/home/sidebar/faqs/FaqsAdapter.kt
Normal file
@@ -0,0 +1,90 @@
|
||||
package com.woka.home.sidebar.faqs
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.AsyncDifferConfig
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.ListAdapter
|
||||
import androidx.recyclerview.widget.RecyclerView.ViewHolder
|
||||
import com.woka.R
|
||||
import com.woka.databinding.FaqViewHolderBinding
|
||||
import com.woka.modules.faqs.models.Faq
|
||||
import com.woka.utils.hide
|
||||
import com.woka.utils.show
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
class FaqsAdapter(config: AsyncDifferConfig<Faq>) :
|
||||
ListAdapter<Faq, FaqsAdapter.FaqViewHolder>(config) {
|
||||
|
||||
inner class FaqViewHolder(val binding: FaqViewHolderBinding): ViewHolder(binding.root)
|
||||
|
||||
private var openedFaq = -1
|
||||
|
||||
companion object{
|
||||
private val DIFF_UTILS = object : DiffUtil.ItemCallback<Faq>(){
|
||||
override fun areItemsTheSame(oldItem: Faq, newItem: Faq): Boolean =
|
||||
oldItem.id == newItem.id
|
||||
|
||||
override fun areContentsTheSame(oldItem: Faq, newItem: Faq): Boolean =
|
||||
oldItem == newItem
|
||||
}
|
||||
|
||||
private val ASYNC_DIFF_CONFIG = AsyncDifferConfig.Builder(DIFF_UTILS)
|
||||
.setBackgroundThreadExecutor(Executors.newSingleThreadExecutor())
|
||||
.build()
|
||||
}
|
||||
|
||||
constructor(): this(ASYNC_DIFF_CONFIG)
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FaqViewHolder {
|
||||
return FaqViewHolder(FaqViewHolderBinding.inflate(LayoutInflater.from(parent.context), parent, false))
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: FaqViewHolder, position: Int) {
|
||||
val faq = getItem(position)
|
||||
|
||||
holder.binding.apply {
|
||||
title.text = faq.english_question
|
||||
description.text = faq.english_answer
|
||||
|
||||
val arrowUp = ResourcesCompat.getDrawable(card.context.resources, R.drawable.ic_half_arrow_up, null)
|
||||
val arrowRight = ResourcesCompat.getDrawable(card.context.resources, R.drawable.ic_half_arrow_right, null)
|
||||
|
||||
if (position == openedFaq){
|
||||
// showing
|
||||
descriptionView.show()
|
||||
title.setCompoundDrawablesWithIntrinsicBounds(null, null, arrowUp, null)
|
||||
}else{
|
||||
// not showing
|
||||
descriptionView.hide()
|
||||
title.setCompoundDrawablesWithIntrinsicBounds(null, null, arrowRight, null)
|
||||
}
|
||||
|
||||
card.setOnClickListener {
|
||||
|
||||
if (descriptionView.isVisible){
|
||||
// closing the faq
|
||||
descriptionView.hide()
|
||||
title.setCompoundDrawablesWithIntrinsicBounds(null, null, arrowRight, null)
|
||||
}else{
|
||||
// closing previous faq
|
||||
if (openedFaq != -1){
|
||||
try {
|
||||
notifyItemChanged(openedFaq)
|
||||
} catch (e: Exception) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
// opening the faq
|
||||
descriptionView.show()
|
||||
title.setCompoundDrawablesWithIntrinsicBounds(null, null, arrowUp, null)
|
||||
|
||||
openedFaq = position
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
package com.woka.home.sidebar.support
|
||||
|
||||
import android.os.Bundle
|
||||
import android.transition.Slide
|
||||
import android.util.Patterns
|
||||
import android.view.Gravity
|
||||
import android.widget.ArrayAdapter
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import com.woka.R
|
||||
import com.woka.WokaApp.Companion.userPrefs
|
||||
import com.woka.databinding.ActivitySupportBinding
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.utils.ProgressView
|
||||
import com.woka.utils.UserType
|
||||
import com.woka.utils.WokaBaseActivity
|
||||
import com.woka.utils.hide
|
||||
import com.woka.utils.toast
|
||||
|
||||
|
||||
class SupportActivity : WokaBaseActivity() {
|
||||
|
||||
private lateinit var binding: ActivitySupportBinding
|
||||
private lateinit var viewModel: SupportViewModel
|
||||
|
||||
private lateinit var progressView: ProgressView
|
||||
|
||||
private val subjects = arrayOf(
|
||||
"Select a subject", "Query",
|
||||
"Complaint", "Suggestion", "Other"
|
||||
)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
window.enterTransition = Slide().apply {
|
||||
slideEdge = Gravity.END
|
||||
}
|
||||
enableEdgeToEdge()
|
||||
binding = ActivitySupportBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
|
||||
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
||||
insets
|
||||
}
|
||||
|
||||
viewModel = ViewModelProvider(this)[SupportViewModel::class.java]
|
||||
progressView = ProgressView(this, getString(R.string.please_wait))
|
||||
|
||||
initViews()
|
||||
|
||||
clickEvents()
|
||||
|
||||
setObservers()
|
||||
}
|
||||
|
||||
private fun setObservers() {
|
||||
viewModel.supportLiveData.observe(this){
|
||||
when(it){
|
||||
is ApiResult.Error -> {
|
||||
progressView.hide()
|
||||
toast(it.errorMessage)
|
||||
}
|
||||
is ApiResult.Loading -> progressView.show()
|
||||
is ApiResult.Success -> {
|
||||
progressView.hide()
|
||||
toast(it.message)
|
||||
}
|
||||
null -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initViews() {
|
||||
binding.apply {
|
||||
|
||||
if (userPrefs?.userType != UserType.GUEST){
|
||||
// user is logged in
|
||||
nameView.hide()
|
||||
emailView.hide()
|
||||
}
|
||||
|
||||
val adapter: ArrayAdapter<*> = ArrayAdapter(
|
||||
this@SupportActivity,
|
||||
android.R.layout.simple_spinner_item,
|
||||
subjects.toList()
|
||||
)
|
||||
|
||||
adapter.setDropDownViewResource(
|
||||
android.R.layout.simple_spinner_dropdown_item
|
||||
)
|
||||
|
||||
subjectSpinner.setAdapter(adapter)
|
||||
}
|
||||
}
|
||||
|
||||
private fun clickEvents() {
|
||||
binding.apply {
|
||||
backBtn.setOnClickListener {
|
||||
onBackPressedDispatcher.onBackPressed()
|
||||
}
|
||||
|
||||
submit.setOnClickListener {
|
||||
if (allOkay()){
|
||||
binding.apply {
|
||||
if (userPrefs?.userType == UserType.GUEST){
|
||||
viewModel.supportForGuest(
|
||||
email.text.toString(),
|
||||
name.text.toString(),
|
||||
subjectSpinner.selectedItem.toString(),
|
||||
message.text.toString()
|
||||
)
|
||||
}else{
|
||||
viewModel.supportForUser(
|
||||
userPrefs?.userData?.id.toString(),
|
||||
subjectSpinner.selectedItem.toString(),
|
||||
message.text.toString()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun allOkay(): Boolean {
|
||||
var allOkay = true
|
||||
|
||||
binding.apply {
|
||||
|
||||
name.error = null
|
||||
email.error = null
|
||||
message.error = null
|
||||
|
||||
if (userPrefs?.userType == UserType.GUEST){
|
||||
if (name.text.isEmpty()){
|
||||
name.error = getString(R.string.required)
|
||||
allOkay = false
|
||||
}
|
||||
|
||||
if (!Patterns.EMAIL_ADDRESS.matcher(email.text).matches()){
|
||||
email.error = getString(R.string.invalid_email)
|
||||
allOkay = false
|
||||
}
|
||||
}
|
||||
|
||||
if (subjectSpinner.selectedItemId == 0L){
|
||||
toast("Please select a subject")
|
||||
allOkay = false
|
||||
}
|
||||
|
||||
if (message.text.isEmpty()){
|
||||
message.error = getString(R.string.required)
|
||||
allOkay = false
|
||||
}
|
||||
}
|
||||
|
||||
return allOkay
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.woka.home.sidebar.support
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.woka.modules.ModuleRepository
|
||||
import com.woka.networking.ApiResult
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class SupportViewModel: ViewModel() {
|
||||
|
||||
private val _supportLiveData = MutableLiveData<ApiResult<Any>?>()
|
||||
val supportLiveData: LiveData<ApiResult<Any>?>
|
||||
get() = _supportLiveData
|
||||
|
||||
fun supportForGuest(email: String, name: String, subject: String, message: String) {
|
||||
viewModelScope.launch {
|
||||
_supportLiveData.postValue(ApiResult.Loading())
|
||||
_supportLiveData.postValue(ModuleRepository.supportForGuest(
|
||||
email,
|
||||
name,
|
||||
subject,
|
||||
message
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
fun supportForUser(userId: String, subject: String, message: String) {
|
||||
viewModelScope.launch {
|
||||
_supportLiveData.postValue(ApiResult.Loading())
|
||||
_supportLiveData.postValue(ModuleRepository.supportForUser(
|
||||
userId,
|
||||
subject,
|
||||
message
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,7 +3,9 @@ package com.woka.modules
|
||||
import com.woka.modules.blogs.models.BlogsResponse
|
||||
import com.woka.modules.faqs.models.FaqResponse
|
||||
import com.woka.networking.ApiResponse
|
||||
import okhttp3.FormBody
|
||||
import retrofit2.Response
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.POST
|
||||
|
||||
@@ -13,5 +15,11 @@ interface ModuleApiService {
|
||||
suspend fun getBlogs(): Response<ApiResponse<BlogsResponse>>
|
||||
|
||||
@POST("faq_listing")
|
||||
suspend fun getFaqs(): Response<ApiResponse<FaqResponse>>
|
||||
suspend fun getFaqs(@Body formBody: FormBody): Response<ApiResponse<FaqResponse>>
|
||||
|
||||
@POST("guest_queries_store")
|
||||
suspend fun supportForGuest(@Body body: FormBody): Response<ApiResponse<Any>>
|
||||
|
||||
@POST("guest_queries_store")
|
||||
suspend fun supportForUser(@Body body: FormBody): Response<ApiResponse<Any>>
|
||||
}
|
||||
36
app/src/main/java/com/woka/modules/ModuleRepository.kt
Normal file
36
app/src/main/java/com/woka/modules/ModuleRepository.kt
Normal file
@@ -0,0 +1,36 @@
|
||||
package com.woka.modules
|
||||
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.networking.RetrofitHelper
|
||||
import okhttp3.FormBody
|
||||
|
||||
object ModuleRepository {
|
||||
|
||||
private val moduleApiService = RetrofitHelper.getRetrofit().create(ModuleApiService::class.java)
|
||||
|
||||
suspend fun supportForGuest(email: String, name: String, subject: String, message: String): ApiResult<Any> {
|
||||
return RetrofitHelper.handleApiCall {
|
||||
moduleApiService.supportForGuest(
|
||||
FormBody.Builder()
|
||||
.add("name", name)
|
||||
.add("email_id", email)
|
||||
.add("subject", subject)
|
||||
.add("message", message)
|
||||
.build()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun supportForUser(userId: String, subject: String, message: String): ApiResult<Any> {
|
||||
return RetrofitHelper.handleApiCall {
|
||||
moduleApiService.supportForGuest(
|
||||
FormBody.Builder()
|
||||
.add("user_id", userId)
|
||||
.add("subject", subject)
|
||||
.add("message", message)
|
||||
.build()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.woka.home
|
||||
package com.woka.modules.blogs
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
@@ -9,6 +9,7 @@ import com.woka.networking.RetrofitHelper
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import okhttp3.FormBody
|
||||
|
||||
object FAQsRepository {
|
||||
|
||||
@@ -24,7 +25,11 @@ object FAQsRepository {
|
||||
|
||||
private suspend fun getBlogs(): ApiResult<FaqResponse> {
|
||||
return RetrofitHelper.handleApiCall {
|
||||
apiService.getFaqs()
|
||||
apiService.getFaqs(
|
||||
FormBody.Builder()
|
||||
.add("faq_category_key", "watch")
|
||||
.build()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.woka.modules.faqs.models
|
||||
|
||||
data class Result(
|
||||
data class Faq(
|
||||
val category_master_id: Int?,
|
||||
val english_answer: String?,
|
||||
val english_question: String?,
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.woka.modules.faqs.models
|
||||
|
||||
data class FaqResponse(
|
||||
val result: List<Result?>?,
|
||||
val result: List<Faq?>?,
|
||||
val total_records: Int?
|
||||
)
|
||||
@@ -37,6 +37,8 @@ class UserPreference(context: Context) {
|
||||
@SuppressLint("HardwareIds")
|
||||
val deviceId: String = Secure.getString(context.contentResolver, Secure.ANDROID_ID)
|
||||
|
||||
var userData: UserData? = null
|
||||
|
||||
var appLanguage: String
|
||||
get() = userPrefs.getString(APP_LANGUAGE, "en") ?: "en"
|
||||
set(value) = userPrefs.edit().putString(APP_LANGUAGE, value).apply()
|
||||
@@ -66,7 +68,15 @@ class UserPreference(context: Context) {
|
||||
fun loadUserData() {
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
_userLiveData.postValue(ApiResult.Loading())
|
||||
_userLiveData.postValue(userRepository.getUserData())
|
||||
val result = userRepository.getUserData()
|
||||
|
||||
when (result){
|
||||
is ApiResult.Error -> {}
|
||||
is ApiResult.Loading -> {}
|
||||
is ApiResult.Success -> userData = result.data?.result
|
||||
}
|
||||
|
||||
_userLiveData.postValue(result)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BIN
app/src/main/res/drawable-hdpi/img_support.png
Normal file
BIN
app/src/main/res/drawable-hdpi/img_support.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
BIN
app/src/main/res/drawable-ldpi/img_support.png
Normal file
BIN
app/src/main/res/drawable-ldpi/img_support.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
BIN
app/src/main/res/drawable-mdpi/img_support.png
Normal file
BIN
app/src/main/res/drawable-mdpi/img_support.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
BIN
app/src/main/res/drawable-xhdpi/img_support.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/img_support.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 86 KiB |
BIN
app/src/main/res/drawable-xxhdpi/img_support.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/img_support.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 265 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/img_support.png
Normal file
BIN
app/src/main/res/drawable-xxxhdpi/img_support.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 415 KiB |
9
app/src/main/res/drawable/ic_half_arrow_right.xml
Normal file
9
app/src/main/res/drawable/ic_half_arrow_right.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="16"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M4.533,15.8L3.6,14.867L10.467,8L3.6,1.133L4.533,0.2L12.333,8L4.533,15.8Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
9
app/src/main/res/drawable/ic_half_arrow_up.xml
Normal file
9
app/src/main/res/drawable/ic_half_arrow_up.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="10dp"
|
||||
android:viewportWidth="16"
|
||||
android:viewportHeight="10">
|
||||
<path
|
||||
android:pathData="M15.799,8.469L14.866,9.402L8.001,2.533L1.132,9.398L0.199,8.465L8.001,0.667L15.799,8.469Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
8
app/src/main/res/drawable/support_bg.xml
Normal file
8
app/src/main/res/drawable/support_bg.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<gradient android:startColor="#BAC061"
|
||||
android:endColor="#2F370B"
|
||||
android:angle="270"/>
|
||||
|
||||
</shape>
|
||||
@@ -6,7 +6,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/about_bg"
|
||||
tools:context=".home.sidebar.AboutActivity">
|
||||
tools:context=".home.sidebar.aboutwoka.AboutActivity">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/back_btn"
|
||||
|
||||
@@ -6,6 +6,76 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/faq_bg"
|
||||
tools:context=".home.sidebar.FaqActivity">
|
||||
tools:context=".home.sidebar.faqs.FaqActivity">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/back_btn"
|
||||
android:layout_width="@dimen/_27sdp"
|
||||
android:layout_height="@dimen/_25sdp"
|
||||
android:contentDescription="@string/back_btn"
|
||||
android:src="@drawable/ic_arrow_back_full"
|
||||
android:scaleType="fitXY"
|
||||
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
|
||||
android:translationZ="1dp"
|
||||
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_marginTop="20dp"
|
||||
|
||||
app:tint="@color/white" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:translationZ="1dp"
|
||||
|
||||
android:text="@string/faqs"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_13ssp"
|
||||
|
||||
android:layout_marginStart="10dp"
|
||||
|
||||
app:layout_constraintStart_toEndOf="@id/back_btn"
|
||||
app:layout_constraintTop_toTopOf="@id/back_btn"
|
||||
app:layout_constraintBottom_toBottomOf="@id/back_btn"
|
||||
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/faq_full_txt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:translationZ="1dp"
|
||||
|
||||
android:text="@string/frequently_asked_questions"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_13ssp"
|
||||
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_marginTop="15dp"
|
||||
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/back_btn"
|
||||
|
||||
/>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rv_faq"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/faq_full_txt"
|
||||
|
||||
android:layout_marginTop="15dp"
|
||||
|
||||
tools:listitem="@layout/faq_view_holder"
|
||||
/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -408,43 +408,49 @@
|
||||
|
||||
</com.woka.utils.PressableCard>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sb_faq"
|
||||
<com.woka.utils.PressableCard
|
||||
android:id="@+id/sb_faq_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:pressType="fade">
|
||||
|
||||
android:text="@string/faqs"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_14ssp"
|
||||
<TextView
|
||||
android:id="@+id/sb_faq"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:paddingVertical="5dp"
|
||||
android:paddingHorizontal="5dp"
|
||||
android:text="@string/faqs"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_14ssp"
|
||||
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:paddingVertical="5dp"
|
||||
android:paddingHorizontal="5dp"
|
||||
/>
|
||||
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
/>
|
||||
</com.woka.utils.PressableCard>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sb_woka_support"
|
||||
<com.woka.utils.PressableCard
|
||||
android:id="@+id/sb_woka_support_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:pressType="fade">
|
||||
|
||||
android:text="@string/woka_support"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_14ssp"
|
||||
<TextView
|
||||
android:id="@+id/sb_woka_support"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:paddingVertical="5dp"
|
||||
android:paddingHorizontal="5dp"
|
||||
android:text="@string/woka_support"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_14ssp"
|
||||
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:paddingVertical="5dp"
|
||||
android:paddingHorizontal="5dp"
|
||||
/>
|
||||
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
/>
|
||||
</com.woka.utils.PressableCard>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sb_my_profile"
|
||||
|
||||
255
app/src/main/res/layout/activity_support.xml
Normal file
255
app/src/main/res/layout/activity_support.xml
Normal file
@@ -0,0 +1,255 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/support_bg"
|
||||
tools:context=".home.sidebar.support.SupportActivity">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/back_btn"
|
||||
android:layout_width="@dimen/_25sdp"
|
||||
android:layout_height="@dimen/_25sdp"
|
||||
android:contentDescription="@string/back_btn"
|
||||
android:src="@drawable/ic_arrow_back_full"
|
||||
android:scaleType="fitXY"
|
||||
|
||||
android:translationZ="1dp"
|
||||
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_marginTop="15dp"
|
||||
|
||||
app:tint="@color/white" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:translationZ="1dp"
|
||||
|
||||
android:text="@string/woka_support"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_12ssp"
|
||||
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginTop="20dp"
|
||||
|
||||
android:layout_toEndOf="@id/back_btn"
|
||||
|
||||
/>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scrollbars="none"
|
||||
android:layout_marginTop="10dp"
|
||||
|
||||
android:layout_below="@id/back_btn"
|
||||
>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="@dimen/_140sdp"
|
||||
android:layout_height="@dimen/_30sdp"
|
||||
android:contentDescription="@string/image"
|
||||
android:src="@drawable/woka_logo_full"
|
||||
android:scaleType="fitXY"
|
||||
/>
|
||||
|
||||
<ImageView
|
||||
android:layout_width="@dimen/_100sdp"
|
||||
android:layout_height="@dimen/_100sdp"
|
||||
android:contentDescription="@string/woka_support"
|
||||
android:src="@drawable/img_support"
|
||||
|
||||
android:layout_marginTop="15dp"
|
||||
android:layout_marginBottom="25dp"
|
||||
/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/email_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:text="@string/email"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_12ssp"
|
||||
|
||||
/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/email"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/_37sdp"
|
||||
|
||||
android:background="@drawable/round_25"
|
||||
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:paddingHorizontal="15dp"
|
||||
|
||||
android:inputType="textEmailAddress"
|
||||
|
||||
android:hint="@string/enter_your_email"
|
||||
android:textColorHint="@android:color/darker_gray"
|
||||
|
||||
android:textColor="@color/black"
|
||||
android:fontFamily="@font/exo_2"
|
||||
android:textSize="@dimen/_13ssp"
|
||||
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/name_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_marginTop="15dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:text="@string/name"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_12ssp"
|
||||
|
||||
/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/_37sdp"
|
||||
|
||||
android:background="@drawable/round_25"
|
||||
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:paddingHorizontal="15dp"
|
||||
|
||||
android:inputType="textPersonName|textCapWords"
|
||||
|
||||
android:hint="@string/enter_your_name"
|
||||
android:textColorHint="@android:color/darker_gray"
|
||||
|
||||
android:textColor="@color/black"
|
||||
android:fontFamily="@font/exo_2"
|
||||
android:textSize="@dimen/_13ssp"
|
||||
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:text="@string/subject"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_12ssp"
|
||||
|
||||
android:layout_marginTop="15dp"
|
||||
|
||||
/>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginTop="10dp"
|
||||
|
||||
app:cardCornerRadius="25dp"
|
||||
>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/subject_spinner"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/_37sdp"
|
||||
|
||||
android:layout_marginStart="5dp"
|
||||
|
||||
android:popupBackground="@drawable/round_25"
|
||||
/>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:text="@string/message"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_12ssp"
|
||||
|
||||
android:layout_marginTop="15dp"
|
||||
|
||||
/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/message"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/_150sdp"
|
||||
|
||||
android:background="@drawable/round_25"
|
||||
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginTop="10dp"
|
||||
|
||||
android:paddingVertical="15dp"
|
||||
android:paddingHorizontal="20dp"
|
||||
|
||||
android:autofillHints="@null"
|
||||
|
||||
android:hint="@string/enter_your_message"
|
||||
android:textColorHint="@android:color/darker_gray"
|
||||
android:fontFamily="@font/exo_2"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="@dimen/_13ssp"
|
||||
|
||||
android:inputType="textMultiLine|textCapSentences"
|
||||
|
||||
android:gravity="top"
|
||||
|
||||
/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/submit"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:text="@string/submit"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_14ssp"
|
||||
|
||||
android:background="@drawable/gradient_btn_bg_2"
|
||||
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginVertical="@dimen/_50sdp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</RelativeLayout>
|
||||
65
app/src/main/res/layout/faq_view_holder.xml
Normal file
65
app/src/main/res/layout/faq_view_holder.xml
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginTop="5dp"
|
||||
|
||||
app:cardBackgroundColor="#342B8D"
|
||||
app:cardCornerRadius="10dp"
|
||||
app:cardElevation="3dp">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="10dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
tools:text="Title of the FAQs"
|
||||
android:fontFamily="@font/exo_2_semibold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_12ssp"
|
||||
|
||||
android:drawablePadding="5dp"
|
||||
app:drawableEndCompat="@drawable/ic_half_arrow_right" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/description_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
android:orientation="vertical">
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.5dp"
|
||||
android:background="@color/white"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
tools:text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s."
|
||||
android:fontFamily="@font/exo_2"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_12ssp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
@@ -139,4 +139,11 @@
|
||||
<string name="masila">MASILA</string>
|
||||
<string name="play_trailer">PLAY TRAILER</string>
|
||||
<string name="about_woka_description">WOKA endeavours to make this world a happier and a safe place for Children. A world where families and communities unite joyfully in celebration of their unity and learn from each other\'s diversity.</string>
|
||||
<string name="frequently_asked_questions">Frequently asked questions</string>
|
||||
<string name="subject">Subject</string>
|
||||
<string name="message">Message</string>
|
||||
<string name="enter_your_message">Enter your message</string>
|
||||
<string name="submit">Submit</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="name">Name</string>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user