diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 21cb76f..815adac 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,6 +15,10 @@ android:supportsRtl="true" android:theme="@style/Theme.Woka" tools:targetApi="31"> + ) : ListAdapter(config) { - inner class BlogViewHolder(binding: BlogViewHolderBinding): ViewHolder(binding.root) + inner class BlogViewHolder(val binding: BlogViewHolderBinding): ViewHolder(binding.root) + + companion object{ + private val DIFF_UTILS = object : DiffUtil.ItemCallback(){ + override fun areItemsTheSame(oldItem: Blog, newItem: Blog): Boolean = + oldItem.id == newItem.id + + override fun areContentsTheSame(oldItem: Blog, newItem: Blog): 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): BlogViewHolder { - + return BlogViewHolder(BlogViewHolderBinding.inflate(LayoutInflater.from(parent.context), parent, false)) } override fun onBindViewHolder(holder: BlogViewHolder, position: Int) { + with(getItem(position)){ + thumbnail_path?.let { + Glide.with(holder.binding.image) + .load(it) + .placeholder(android.R.color.darker_gray) + .error(R.drawable.woka_logo_half) + .into(holder.binding.image) + } + + holder.binding.title.text = title + } } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/HomeActivity.kt b/app/src/main/java/com/woka/home/HomeActivity.kt index d20bbe9..2835d33 100644 --- a/app/src/main/java/com/woka/home/HomeActivity.kt +++ b/app/src/main/java/com/woka/home/HomeActivity.kt @@ -12,6 +12,7 @@ import android.graphics.Shader import android.os.Build import android.os.Bundle import android.util.Log +import android.view.HapticFeedbackConstants import android.view.View.GONE import android.view.View.VISIBLE import android.view.WindowManager @@ -26,6 +27,7 @@ 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 @@ -37,6 +39,7 @@ 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.mvvm.userDataModels.UserDataResponse import com.woka.networking.ApiResult import com.woka.onboard.OnboardActivity @@ -131,6 +134,8 @@ class HomeActivity : WokaBaseActivity(), } LicenseUtil().setLicenseKey(this, "LkYoNusv+gSIVJIrXa5Bf59iBNlUMxeg82PM/l8JWk+cD4BE") + + viewModel.initPlayer(applicationContext) } override fun onResume() { @@ -256,6 +261,11 @@ class HomeActivity : WokaBaseActivity(), } } } + + sbAboutWokaCard.setOnClickListener { + startActivity(Intent(this@HomeActivity, AboutActivity::class.java), + ActivityOptions.makeSceneTransitionAnimation(this@HomeActivity).toBundle()) + } } } @@ -267,10 +277,16 @@ class HomeActivity : WokaBaseActivity(), Theme.THEME_ONE -> { sbTheme1Selected.visibility = VISIBLE sbTheme2Selected.visibility = GONE + + sbTheme1.isPressable = false + sbTheme2.isPressable = true } Theme.THEME_TWO -> { sbTheme2Selected.visibility = VISIBLE sbTheme1Selected.visibility = GONE + + sbTheme1.isPressable = true + sbTheme2.isPressable = false } } } @@ -310,6 +326,8 @@ class HomeActivity : WokaBaseActivity(), if (!init){ binding.homeDrawer.closeDrawer(GravityCompat.END) viewModel.sendLocaleChangeEvent(locale) + + binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) } } } diff --git a/app/src/main/java/com/woka/home/HomeViewModel.kt b/app/src/main/java/com/woka/home/HomeViewModel.kt index 849eb7f..fa69c48 100644 --- a/app/src/main/java/com/woka/home/HomeViewModel.kt +++ b/app/src/main/java/com/woka/home/HomeViewModel.kt @@ -1,9 +1,13 @@ package com.woka.home +import android.content.Context +import android.net.Uri import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.google.android.exoplayer2.ExoPlayer +import com.google.android.exoplayer2.MediaItem import com.woka.home.BottomNavigation.Companion.HOME import com.woka.mvvm.UserApiService import com.woka.mvvm.UserRepository @@ -26,6 +30,20 @@ class HomeViewModel: ViewModel(){ val logoutLiveData: LiveData?> get() = _logoutLiveData + var player: ExoPlayer? = null + + fun initPlayer(context: Context) { + player = ExoPlayer.Builder(context).build() + + player?.volume = 0f + + val videoUri = Uri.parse("https://d3volyx7jx7oal.cloudfront.net/master.m3u8") + val mediaItem = MediaItem.fromUri(videoUri) + player?.setMediaItem(mediaItem) + player?.playWhenReady = true + player?.prepare() + } + fun sendLocaleChangeEvent(locale: String){ _localeChangeLiveData.postValue(locale) } @@ -36,4 +54,10 @@ class HomeViewModel: ViewModel(){ _logoutLiveData.postValue(userRepository.logout()) } } + + override fun onCleared() { + super.onCleared() + player?.release() + player = null + } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/MoreHomeActivity.kt b/app/src/main/java/com/woka/home/MoreHomeActivity.kt index f80242b..e4aa76a 100644 --- a/app/src/main/java/com/woka/home/MoreHomeActivity.kt +++ b/app/src/main/java/com/woka/home/MoreHomeActivity.kt @@ -2,44 +2,93 @@ package com.woka.home import android.graphics.Color import android.os.Bundle +import android.transition.Fade import android.view.WindowManager import androidx.activity.enableEdgeToEdge -import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat -import androidx.lifecycle.ViewModelProvider import com.woka.R -import com.woka.modules.BlogsViewModel +import com.woka.databinding.ActivityMoreHomeBinding +import com.woka.modules.BlogsRepository +import com.woka.networking.ApiResult import com.woka.utils.WokaBaseActivity +import com.woka.utils.hide import com.woka.utils.lightStatusBar +import com.woka.utils.show +import com.woka.utils.toast class MoreHomeActivity : WokaBaseActivity() { - private lateinit var blogsViewModel: BlogsViewModel + private lateinit var binding: ActivityMoreHomeBinding + + private lateinit var blogsAdapter: BlogsAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + with(window){ + enterTransition = Fade() + } enableEdgeToEdge() - setContentView(R.layout.activity_more_home) + binding = ActivityMoreHomeBinding.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 } - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) - window.statusBarColor = Color.TRANSPARENT - window.navigationBarColor = getColor(R.color.more_bg) - window.lightStatusBar() + with(window){ + addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) + statusBarColor = Color.TRANSPARENT + navigationBarColor = getColor(R.color.more_bg) + lightStatusBar() + } - blogsViewModel = ViewModelProvider(this)[BlogsViewModel::class.java] + blogsAdapter = BlogsAdapter() + + initViews() + + clickEvents() setObservers() } - private fun setObservers() { - blogsViewModel.blogsLiveData.observe(this){ + private fun clickEvents() { + binding.apply { + more.setOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + } + } + private fun initViews(){ + binding.apply { + rvBlogs.adapter = blogsAdapter + } + } + + private fun setObservers() { + BlogsRepository.blogsLiveData.observe(this){ + when(it){ + is ApiResult.Error -> { + toast(it.errorMessage) + binding.blogsTxt.hide() + binding.rvBlogs.hide() + } + is ApiResult.Loading -> { + binding.blogsTxt.hide() + binding.rvBlogs.hide() + } + is ApiResult.Success -> { + it.data?.blogs?.let {blogList -> + binding.blogsTxt.show() + binding.rvBlogs.show() + + blogsAdapter.submitList(blogList) + } + } + null -> {} + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt index 8569608..288ed3e 100644 --- a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt +++ b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt @@ -2,6 +2,7 @@ package com.woka.home.fragments import android.animation.ObjectAnimator import android.animation.ValueAnimator +import android.app.ActivityOptions import android.content.BroadcastReceiver import android.content.Context import android.content.Intent @@ -47,8 +48,6 @@ class Home1Fragment : Fragment() { private var star1Animator: ValueAnimator? = null private var star2Animator: ValueAnimator? = null - private lateinit var player: ExoPlayer - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -56,7 +55,6 @@ class Home1Fragment : Fragment() { binding = FragmentHome1Binding.inflate(inflater, container, false) activity?.let { viewModel = ViewModelProvider(it)[HomeViewModel::class.java] - player = ExoPlayer.Builder(it).build() } initViews() @@ -85,8 +83,8 @@ class Home1Fragment : Fragment() { override fun onResume() { super.onResume() handleAnimations() - if (!player.isPlaying){ - player.play() + if (viewModel.player?.isPlaying == false){ + viewModel.player?.play() } binding.playerView.show() @@ -100,29 +98,16 @@ class Home1Fragment : Fragment() { if (star1Animator?.isRunning == true) star1Animator?.pause() if (star2Animator?.isRunning == true) star2Animator?.pause() - if (player.isPlaying) player.pause() + if (viewModel.player?.isPlaying == true) viewModel.player?.pause() if (viewModel.isHomeBackgroundBlurred){ binding.playerView.hide() } } - override fun onDestroy() { - super.onDestroy() - player.release() - } - private fun initPlayerView() { - binding.playerView.player = player - + binding.playerView.player = viewModel.player binding.playerView.useController = false - player.volume = 0f - - val videoUri = Uri.parse("https://d3volyx7jx7oal.cloudfront.net/master.m3u8") - val mediaItem = MediaItem.fromUri(videoUri) - player.setMediaItem(mediaItem) - player.playWhenReady = true - player.prepare() } private fun setObservers() { @@ -169,7 +154,8 @@ class Home1Fragment : Fragment() { more.setOnClickListener { activity?.let { - startActivity(Intent(it, MoreHomeActivity::class.java)) + startActivity(Intent(it, MoreHomeActivity::class.java), + ActivityOptions.makeSceneTransitionAnimation(it).toBundle()) } } } } diff --git a/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt b/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt index 1548e26..617fd47 100644 --- a/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt +++ b/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt @@ -31,8 +31,6 @@ class Home2Fragment : Fragment() { private lateinit var viewModel: HomeViewModel - private lateinit var player: ExoPlayer - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -41,7 +39,6 @@ class Home2Fragment : Fragment() { activity?.let { viewModel = ViewModelProvider(it)[HomeViewModel::class.java] - player = ExoPlayer.Builder(it).build() } iniViews() @@ -65,8 +62,8 @@ class Home2Fragment : Fragment() { override fun onResume() { super.onResume() - if (!player.isPlaying){ - player.play() + if (viewModel.player?.isPlaying == false){ + viewModel.player?.play() } binding.playerView.show() @@ -74,32 +71,16 @@ class Home2Fragment : Fragment() { override fun onPause() { super.onPause() - if (player.isPlaying) { - player.pause() - } + if (viewModel.player?.isPlaying == true) viewModel.player?.pause() if (viewModel.isHomeBackgroundBlurred){ binding.playerView.hide() } } - override fun onDestroy() { - super.onDestroy() - player.release() - } - private fun initPlayerView() { - binding.playerView.player = player - + binding.playerView.player = viewModel.player binding.playerView.useController = false - player.volume = 0f - - val videoUri = Uri.parse("https://d3volyx7jx7oal.cloudfront.net/master.m3u8") - val mediaItem = MediaItem.fromUri(videoUri) - player.setMediaItem(mediaItem) - player.playWhenReady = true - - player.prepare() } private fun clickEvents(){ diff --git a/app/src/main/java/com/woka/home/sidebar/AboutActivity.kt b/app/src/main/java/com/woka/home/sidebar/AboutActivity.kt new file mode 100644 index 0000000..18f938e --- /dev/null +++ b/app/src/main/java/com/woka/home/sidebar/AboutActivity.kt @@ -0,0 +1,49 @@ +package com.woka.home.sidebar + +import android.graphics.Color +import android.os.Bundle +import android.transition.Fade +import android.transition.Slide +import android.view.Gravity.END +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.ActivityAboutBinding +import com.woka.utils.WokaBaseActivity +import com.woka.utils.lightStatusBar + +class AboutActivity : WokaBaseActivity() { + + private lateinit var binding: ActivityAboutBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + window.enterTransition = Slide().apply { + slideEdge = END + } + enableEdgeToEdge() + binding = ActivityAboutBinding.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 + } + + with(window){ + lightStatusBar(true) + } + + clickEvents() + } + + private fun clickEvents() { + binding.apply { + backBtn.setOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/BlogsRepository.kt b/app/src/main/java/com/woka/modules/BlogsRepository.kt index 2249cc2..22afcf3 100644 --- a/app/src/main/java/com/woka/modules/BlogsRepository.kt +++ b/app/src/main/java/com/woka/modules/BlogsRepository.kt @@ -1,17 +1,39 @@ package com.woka.modules +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope import com.woka.modules.blogs.BlogsResponse import com.woka.networking.ApiResult import com.woka.networking.RetrofitHelper import com.woka.networking.RetrofitHelper.handleApiCall +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +object BlogsRepository{ -class BlogsRepository { private val apiService = RetrofitHelper.getRetrofit().create(ModuleApiService::class.java) - suspend fun getBlogs(): ApiResult{ + private val _blogsLiveData = MutableLiveData>() + val blogsLiveData: LiveData?> + get() = _blogsLiveData + + init { + loadBlogs() + } + + private suspend fun getBlogs(): ApiResult{ return handleApiCall{ apiService.getBlogs() } } + private fun loadBlogs(){ + CoroutineScope(Dispatchers.IO).launch { + _blogsLiveData.postValue(ApiResult.Loading()) + _blogsLiveData.postValue(getBlogs()) + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/BlogsViewModel.kt b/app/src/main/java/com/woka/modules/BlogsViewModel.kt deleted file mode 100644 index 7794ebd..0000000 --- a/app/src/main/java/com/woka/modules/BlogsViewModel.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.woka.modules - -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.woka.modules.blogs.BlogsResponse -import com.woka.networking.ApiResult -import kotlinx.coroutines.launch - -class BlogsViewModel: ViewModel() { - - private val blogsRepository = BlogsRepository() - - private val _blogsLiveData = MutableLiveData>() - val blogsLiveData: LiveData?> - get() = _blogsLiveData - - init { - loadBlogs() - } - - private fun loadBlogs(){ - viewModelScope.launch { - _blogsLiveData.postValue(ApiResult.Loading()) - _blogsLiveData.postValue(blogsRepository.getBlogs()) - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/woka/utils/Extensions.kt b/app/src/main/java/com/woka/utils/Extensions.kt index ecf6b0f..018a359 100644 --- a/app/src/main/java/com/woka/utils/Extensions.kt +++ b/app/src/main/java/com/woka/utils/Extensions.kt @@ -16,8 +16,8 @@ import androidx.fragment.app.Fragment import com.woka.WokaApp.Companion.userPrefs import java.util.Locale -fun Window.lightStatusBar(){ - WindowCompat.getInsetsController(this, decorView).isAppearanceLightStatusBars = false +fun Window.lightStatusBar(lightStatus: Boolean = false){ + WindowCompat.getInsetsController(this, decorView).isAppearanceLightStatusBars = lightStatus } fun View.scaleAnimate(from: Float = 0.5f, to: Float = 1f, duration: Long = 500){ diff --git a/app/src/main/java/com/woka/utils/PressableCard.kt b/app/src/main/java/com/woka/utils/PressableCard.kt index 6fcace7..24837ea 100644 --- a/app/src/main/java/com/woka/utils/PressableCard.kt +++ b/app/src/main/java/com/woka/utils/PressableCard.kt @@ -1,34 +1,20 @@ package com.woka.utils import android.content.Context +import android.os.Build import android.util.AttributeSet -import android.util.Log +import android.view.HapticFeedbackConstants import android.view.MotionEvent import android.view.MotionEvent.ACTION_CANCEL import android.view.MotionEvent.ACTION_DOWN import android.view.MotionEvent.ACTION_OUTSIDE import android.view.MotionEvent.ACTION_SCROLL import android.view.MotionEvent.ACTION_UP -import android.view.View -import android.view.ViewGroup import android.widget.FrameLayout -import android.widget.ScrollView -import androidx.core.view.ScrollingView import com.woka.R -import kotlin.math.abs class PressableCard : FrameLayout { - companion object { - private const val DEFAULT_SCALE_WHEN_PRESS = 0.9f - private const val DEFAULT_SCALE = 1f - - private const val DEFAULT_ALPHA_WHEN_PRESS = 0.5f - private const val DEFAULT_ALPHA = 1f - - private const val MIN_MOMENT_AFTER_TOUCH = 25f - } - enum class PressableType(value: Int){ SCALE(0), FADE(1); } @@ -48,39 +34,65 @@ class PressableCard : FrameLayout { // attributes private var pressType: PressableType? = PressableType.SCALE + private var scaleFrom = 0.9f + private var scaleTo = 1f + + private var alphaFrom = 0.5f + private var alphaTo = 1f + + private var isHapticEnabled = false + var isPressable = true private fun setPressType(attrs: AttributeSet?){ val attributes = context.obtainStyledAttributes(attrs, R.styleable.PressableCard) + val value = attributes.getInt(R.styleable.PressableCard_pressType, 0) pressType = when(value){ 1 -> PressableType.FADE else -> PressableType.SCALE } + + scaleFrom = attributes.getFloat(R.styleable.PressableCard_scaleFrom, 0.9f) + scaleTo = attributes.getFloat(R.styleable.PressableCard_scaleTo, 1f) + + alphaFrom = attributes.getFloat(R.styleable.PressableCard_alphaFrom, 0.5f) + alphaTo = attributes.getFloat(R.styleable.PressableCard_alphaTo, 1f) + + isHapticEnabled = attributes.getBoolean(R.styleable.PressableCard_isHapticEnabled, false) + attributes.recycle() } private fun refresh() { if (isPressed) { + if (isHapticEnabled){ + performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) + } if (pressType == PressableType.SCALE){ - scaleX = (DEFAULT_SCALE_WHEN_PRESS) - scaleY = (DEFAULT_SCALE_WHEN_PRESS) + scaleX = (scaleFrom) + scaleY = (scaleFrom) }else if (pressType == PressableType.FADE){ - alpha = DEFAULT_ALPHA_WHEN_PRESS + alpha = alphaFrom } invalidate() return } + + if (isHapticEnabled && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { + performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY_RELEASE) + } if (pressType == PressableType.SCALE){ - scaleX = (DEFAULT_SCALE) - scaleY = (DEFAULT_SCALE) + scaleX = (scaleTo) + scaleY = (scaleTo) }else if (pressType == PressableType.FADE){ - alpha = DEFAULT_ALPHA + alpha = alphaTo } invalidate() } override fun setPressed(pressed: Boolean) { super.setPressed(pressed) + if (!isPressable) return refresh() } diff --git a/app/src/main/res/drawable-hdpi/img_about.png b/app/src/main/res/drawable-hdpi/img_about.png new file mode 100644 index 0000000..6826ea4 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/img_about.png differ diff --git a/app/src/main/res/drawable-hdpi/img_about_bg.png b/app/src/main/res/drawable-hdpi/img_about_bg.png new file mode 100644 index 0000000..301d593 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/img_about_bg.png differ diff --git a/app/src/main/res/drawable-ldpi/img_about.png b/app/src/main/res/drawable-ldpi/img_about.png new file mode 100644 index 0000000..b4afad5 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/img_about.png differ diff --git a/app/src/main/res/drawable-ldpi/img_about_bg.png b/app/src/main/res/drawable-ldpi/img_about_bg.png new file mode 100644 index 0000000..79887de Binary files /dev/null and b/app/src/main/res/drawable-ldpi/img_about_bg.png differ diff --git a/app/src/main/res/drawable-mdpi/img_about.png b/app/src/main/res/drawable-mdpi/img_about.png new file mode 100644 index 0000000..a0b1d1f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/img_about.png differ diff --git a/app/src/main/res/drawable-mdpi/img_about_bg.png b/app/src/main/res/drawable-mdpi/img_about_bg.png new file mode 100644 index 0000000..6a5d32b Binary files /dev/null and b/app/src/main/res/drawable-mdpi/img_about_bg.png differ diff --git a/app/src/main/res/drawable-xhdpi/img_about.png b/app/src/main/res/drawable-xhdpi/img_about.png new file mode 100644 index 0000000..7687672 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/img_about.png differ diff --git a/app/src/main/res/drawable-xhdpi/img_about_bg.png b/app/src/main/res/drawable-xhdpi/img_about_bg.png new file mode 100644 index 0000000..eee3c88 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/img_about_bg.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_about.png b/app/src/main/res/drawable-xxhdpi/img_about.png new file mode 100644 index 0000000..740b5f8 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_about.png differ diff --git a/app/src/main/res/drawable-xxhdpi/img_about_bg.png b/app/src/main/res/drawable-xxhdpi/img_about_bg.png new file mode 100644 index 0000000..cbc9741 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_about_bg.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/img_about.png b/app/src/main/res/drawable-xxxhdpi/img_about.png new file mode 100644 index 0000000..39a70eb Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/img_about.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/img_about_bg.png b/app/src/main/res/drawable-xxxhdpi/img_about_bg.png new file mode 100644 index 0000000..c19619a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/img_about_bg.png differ diff --git a/app/src/main/res/drawable/about_bg.xml b/app/src/main/res/drawable/about_bg.xml new file mode 100644 index 0000000..8e3fbf3 --- /dev/null +++ b/app/src/main/res/drawable/about_bg.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_arrow_back_full.xml b/app/src/main/res/drawable/ic_arrow_back_full.xml new file mode 100644 index 0000000..075e95d --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_back_full.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml new file mode 100644 index 0000000..f9d5dcd --- /dev/null +++ b/app/src/main/res/layout/activity_about.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index eee78f2..4fa598a 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -206,89 +206,108 @@ android:gravity="center" > - - + - - - + - + - + + + + + + + + - + - - - + - + + + + + + + + + @@ -366,24 +385,28 @@ android:layout_marginBottom="10dp" /> - - android:text="@string/about_woka" - android:fontFamily="@font/exo_2_bold" - android:textColor="@color/white" - android:textSize="@dimen/_14ssp" + - android:foreground="?android:attr/selectableItemBackground" - /> + @@ -67,6 +65,8 @@ android:layout_marginTop="15dp" android:layout_marginBottom="5dp" + android:layout_marginHorizontal="15dp" + /> @@ -31,16 +37,18 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:contentDescription="@string/image" - android:src="@color/black" + android:src="@drawable/woka_logo_half" + android:scaleType="fitXY" /> diff --git a/app/src/main/res/layout/fragment_home2.xml b/app/src/main/res/layout/fragment_home2.xml index da34b78..127f82d 100644 --- a/app/src/main/res/layout/fragment_home2.xml +++ b/app/src/main/res/layout/fragment_home2.xml @@ -556,6 +556,82 @@ /> + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/custom_resources.xml b/app/src/main/res/values/custom_resources.xml index dab1d37..679e9f7 100644 --- a/app/src/main/res/values/custom_resources.xml +++ b/app/src/main/res/values/custom_resources.xml @@ -6,6 +6,13 @@ + + + + + + + \ 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 d983e22..4532bff 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -135,7 +135,7 @@ GAMES Coming soonn on Woka WOKA LIVE TV - BLOGS + Blogs MASILA PLAY TRAILER \ No newline at end of file