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:
2024-06-05 21:08:33 +05:30
parent 2bf884ed56
commit 84a8f11f5a
32 changed files with 927 additions and 62 deletions

View File

@@ -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" />

View File

@@ -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

View File

@@ -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())
}
}
}

View File

@@ -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

View File

@@ -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
}
}
}

View File

@@ -1,4 +1,4 @@
package com.woka.home.sidebar
package com.woka.home.sidebar.aboutwoka
import android.os.Bundle
import android.transition.Slide

View 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()
}
}
}
}

View 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
}
}
}
}
}

View File

@@ -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
}
}

View File

@@ -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
))
}
}
}

View File

@@ -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>>
}

View 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()
)
}
}
}

View File

@@ -1,4 +1,4 @@
package com.woka.home
package com.woka.modules.blogs
import android.view.LayoutInflater
import android.view.ViewGroup

View File

@@ -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()
)
}
}

View File

@@ -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?,

View File

@@ -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?
)

View File

@@ -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)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

View 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>

View 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>

View 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>

View File

@@ -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"

View File

@@ -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>

View File

@@ -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"

View 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>

View 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>

View File

@@ -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>