From 49f3522b14889d5afdbfc9a6e4d1380a68607fff Mon Sep 17 00:00:00 2001 From: Rajat Talesra Date: Wed, 8 Apr 2020 14:04:11 +0530 Subject: [PATCH] Fix #953: Highfi HomeFragment (#954) * welcome screen * Updated implementation * Approach 2 * Fixed issue * Updated UI * ! added * Space issue fix * Nit change * Linter issue fixes * Nit change for lint fixes Co-authored-by: Rajat Talesra --- .../topiclist/PromotedStoryListAdapter.kt | 11 +- .../app/home/topiclist/TopicListAdapter.kt | 56 +++++-- app/src/main/res/layout-land/all_topics.xml | 8 +- .../main/res/layout-land/home_fragment.xml | 13 +- .../res/layout-land/promoted_story_card.xml | 135 +++++++++-------- .../res/layout-land/promoted_story_list.xml | 6 +- .../res/layout-land/topic_summary_view.xml | 95 +++++------- app/src/main/res/layout-land/welcome.xml | 12 +- app/src/main/res/layout/all_topics.xml | 6 +- app/src/main/res/layout/home_fragment.xml | 11 +- .../main/res/layout/promoted_story_card.xml | 137 +++++++++--------- .../main/res/layout/promoted_story_list.xml | 4 +- .../main/res/layout/topic_summary_view.xml | 95 +++++------- app/src/main/res/layout/welcome.xml | 10 +- app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/dimens.xml | 2 + app/src/main/res/values/strings.xml | 1 + .../org/oppia/util/datetime/DateTimeUtil.kt | 4 +- .../java/org/oppia/util/system/OppiaClock.kt | 4 +- .../oppia/util/datetime/DateTimeUtilTest.kt | 6 +- 20 files changed, 325 insertions(+), 293 deletions(-) diff --git a/app/src/main/java/org/oppia/app/home/topiclist/PromotedStoryListAdapter.kt b/app/src/main/java/org/oppia/app/home/topiclist/PromotedStoryListAdapter.kt index f4f737fb491..bbe3f5ef4eb 100644 --- a/app/src/main/java/org/oppia/app/home/topiclist/PromotedStoryListAdapter.kt +++ b/app/src/main/java/org/oppia/app/home/topiclist/PromotedStoryListAdapter.kt @@ -1,6 +1,8 @@ package org.oppia.app.home.topiclist import android.content.Context +import android.content.res.Configuration +import android.content.res.Resources import android.view.LayoutInflater import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity @@ -15,6 +17,8 @@ class PromotedStoryListAdapter( ) : RecyclerView.Adapter() { + private val orientation = Resources.getSystem().configuration.orientation + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val inflater = LayoutInflater.from(parent.context) val binding = @@ -41,7 +45,12 @@ class PromotedStoryListAdapter( binding.viewModel = promotedStoryViewModel val layoutParams = binding.promotedStoryCardContainer.layoutParams layoutParams.width = if (itemCount > 1) { - (activity as Context).resources.getDimensionPixelSize(R.dimen.promoted_story_card_width) + if (orientation == Configuration.ORIENTATION_PORTRAIT) { + ViewGroup.LayoutParams.MATCH_PARENT + } + else{ + (activity as Context).resources.getDimensionPixelSize(R.dimen.promoted_story_card_width) + } } else { ViewGroup.LayoutParams.MATCH_PARENT } diff --git a/app/src/main/java/org/oppia/app/home/topiclist/TopicListAdapter.kt b/app/src/main/java/org/oppia/app/home/topiclist/TopicListAdapter.kt index a76b60d47ba..c9ea8572f7b 100644 --- a/app/src/main/java/org/oppia/app/home/topiclist/TopicListAdapter.kt +++ b/app/src/main/java/org/oppia/app/home/topiclist/TopicListAdapter.kt @@ -6,7 +6,6 @@ import android.content.res.Resources import android.view.LayoutInflater import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity -import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import org.oppia.app.R @@ -123,7 +122,8 @@ class TopicListAdapter( return itemList.size } - private class WelcomeViewHolder(val binding: WelcomeBinding) : RecyclerView.ViewHolder(binding.root) { + private class WelcomeViewHolder(val binding: WelcomeBinding) : + RecyclerView.ViewHolder(binding.root) { internal fun bind(welcomeViewModel: WelcomeViewModel) { binding.viewModel = welcomeViewModel } @@ -151,10 +151,11 @@ class TopicListAdapter( */ val snapHelper = StartSnapHelper() binding.promotedStoryListRecyclerView.layoutManager = horizontalLayoutManager + binding.promotedStoryListRecyclerView.setOnFlingListener(null) snapHelper.attachToRecyclerView(binding.promotedStoryListRecyclerView) val paddingEnd = if (orientation == Configuration.ORIENTATION_PORTRAIT) { - (activity as Context).resources.getDimensionPixelSize(R.dimen.padding_48) + (activity as Context).resources.getDimensionPixelSize(R.dimen.padding_44) } else { (activity as Context).resources.getDimensionPixelSize(R.dimen.padding_72) } @@ -171,17 +172,21 @@ class TopicListAdapter( } } - private class AllTopicsViewHolder(binding: AllTopicsBinding) : RecyclerView.ViewHolder(binding.root) { + private class AllTopicsViewHolder(binding: AllTopicsBinding) : + RecyclerView.ViewHolder(binding.root) { internal fun bind() { } } - inner class TopicListViewHolder(val binding: TopicSummaryViewBinding) : RecyclerView.ViewHolder(binding.root) { + inner class TopicListViewHolder(val binding: TopicSummaryViewBinding) : + RecyclerView.ViewHolder(binding.root) { internal fun bind(topicSummaryViewModel: TopicSummaryViewModel, position: Int) { binding.viewModel = topicSummaryViewModel - val param = binding.topicContainer.layoutParams as GridLayoutManager.LayoutParams + + val marginLayoutParams = binding.topicContainer.layoutParams as ViewGroup.MarginLayoutParams + val marginMax = if (orientation == Configuration.ORIENTATION_PORTRAIT) { - (activity as Context).resources.getDimensionPixelSize(R.dimen.margin_32) + (activity as Context).resources.getDimensionPixelSize(R.dimen.margin_28) } else { (activity as Context).resources.getDimensionPixelSize(R.dimen.margin_72) } @@ -196,17 +201,42 @@ class TopicListAdapter( if (orientation == Configuration.ORIENTATION_PORTRAIT) { when { - position % 2 == 0 -> param.setMargins(marginMin, marginTopBottom, marginMax, marginTopBottom) - else -> param.setMargins(marginMax, marginTopBottom, marginMin, marginTopBottom) + position % 2 == 0 -> marginLayoutParams.setMargins( + marginMin, + marginTopBottom, + marginMax, + marginTopBottom + ) + else -> marginLayoutParams.setMargins( + marginMax, + marginTopBottom, + marginMin, + marginTopBottom + ) } } else { when { - position % 3 == 0 -> param.setMargins(marginMax, marginTopBottom, /* right= */ 0, marginTopBottom) - position % 3 == 1 -> param.setMargins(marginMin, marginTopBottom, marginMin, marginTopBottom) - position % 3 == 2 -> param.setMargins(/* left= */ 0, marginTopBottom, marginMax, marginTopBottom) + position % 3 == 0 -> marginLayoutParams.setMargins( + marginMax, + marginTopBottom, + /* right= */ 0, + marginTopBottom + ) + position % 3 == 1 -> marginLayoutParams.setMargins( + marginMin, + marginTopBottom, + marginMin, + marginTopBottom + ) + position % 3 == 2 -> marginLayoutParams.setMargins( + /* left= */ 0, + marginTopBottom, + marginMax, + marginTopBottom + ) } } - binding.topicContainer.layoutParams = param + binding.topicContainer.layoutParams = marginLayoutParams } } } diff --git a/app/src/main/res/layout-land/all_topics.xml b/app/src/main/res/layout-land/all_topics.xml index 74c8bb42741..d997dc9127c 100644 --- a/app/src/main/res/layout-land/all_topics.xml +++ b/app/src/main/res/layout-land/all_topics.xml @@ -9,10 +9,10 @@ android:id="@+id/all_topics_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="72dp" - android:layout_marginTop="56dp" - android:layout_marginEnd="72dp" - android:layout_marginBottom="16dp" + android:layout_marginStart="76dp" + android:layout_marginTop="32dp" + android:layout_marginEnd="76dp" + android:layout_marginBottom="12dp" android:fontFamily="sans-serif-medium" android:text="@string/all_topics" android:textColor="@color/oppiaPrimaryText" diff --git a/app/src/main/res/layout-land/home_fragment.xml b/app/src/main/res/layout-land/home_fragment.xml index a8e1b0108ec..6f415439770 100644 --- a/app/src/main/res/layout-land/home_fragment.xml +++ b/app/src/main/res/layout-land/home_fragment.xml @@ -10,7 +10,7 @@ type="org.oppia.app.home.HomeFragmentPresenter" /> - - + + + diff --git a/app/src/main/res/layout-land/promoted_story_card.xml b/app/src/main/res/layout-land/promoted_story_card.xml index d401fac89c8..e32ccefa864 100755 --- a/app/src/main/res/layout-land/promoted_story_card.xml +++ b/app/src/main/res/layout-land/promoted_story_card.xml @@ -11,85 +11,92 @@ type="org.oppia.app.home.topiclist.PromotedStoryViewModel" /> - + app:cardElevation="4dp" + app:cardCornerRadius="4dp"> - - - + app:layout_constraintTop_toBottomOf="@id/recently_played_stories_text_view" + app:roundedRectDrawableWithColor="@{viewModel.promotedStoryObservable.lessonThumbnail.backgroundColorRgb}"> - + android:layout_height="0dp" + android:importantForAccessibility="no" + android:scaleType="centerInside" + android:src="@{viewModel.promotedStoryObservable.lessonThumbnail.thumbnailGraphic}" + app:layout_constraintDimensionRatio="H, 16:9" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + android:background="@drawable/bottom_rounded_rect_white_background" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/lesson_thumbnail"> - - - + + + + + + + + diff --git a/app/src/main/res/layout-land/promoted_story_list.xml b/app/src/main/res/layout-land/promoted_story_list.xml index 4b5c0b4805c..55cb6040407 100755 --- a/app/src/main/res/layout-land/promoted_story_list.xml +++ b/app/src/main/res/layout-land/promoted_story_list.xml @@ -19,7 +19,8 @@ + android:orientation="horizontal" + android:gravity="center_vertical"> - + app:cardCornerRadius="4dp"> - + android:layout_height="match_parent" + android:onClick="@{(v) -> viewModel.clickOnSummaryTile()}" + android:clickable="true" + android:focusable="true"> - - - - - + + android:background="@color/topicTitleBackground" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/topic_thumbnail_image_view"> @@ -102,9 +73,13 @@ android:textColor="@color/white_80" android:textSize="14sp" android:textStyle="italic" + android:layout_marginTop="4dp" + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" + android:paddingBottom="8dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/topic_name_text_view" /> - - + + diff --git a/app/src/main/res/layout-land/welcome.xml b/app/src/main/res/layout-land/welcome.xml index 9e8c12b193d..e467adb0bee 100644 --- a/app/src/main/res/layout-land/welcome.xml +++ b/app/src/main/res/layout-land/welcome.xml @@ -21,27 +21,31 @@ android:fontFamily="sans-serif" android:textColor="@color/oppiaPrimaryText" android:textSize="24sp" - android:text="@string/welcome_text" + android:text="@{viewModel.greeting}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintBottom_toBottomOf="@id/welcome_text_view" + app:layout_constraintTop_toTopOf="@+id/welcome_text_view" /> - - + + + diff --git a/app/src/main/res/layout/promoted_story_card.xml b/app/src/main/res/layout/promoted_story_card.xml index d401fac89c8..a3e12f6e585 100755 --- a/app/src/main/res/layout/promoted_story_card.xml +++ b/app/src/main/res/layout/promoted_story_card.xml @@ -11,85 +11,92 @@ type="org.oppia.app.home.topiclist.PromotedStoryViewModel" /> - + app:cardElevation="4dp" + app:cardCornerRadius="4dp"> - - - + app:layout_constraintTop_toBottomOf="@id/recently_played_stories_text_view" + app:roundedRectDrawableWithColor="@{viewModel.promotedStoryObservable.lessonThumbnail.backgroundColorRgb}"> - + android:layout_height="0dp" + android:importantForAccessibility="no" + android:scaleType="centerInside" + android:src="@{viewModel.promotedStoryObservable.lessonThumbnail.thumbnailGraphic}" + app:layout_constraintDimensionRatio="H, 16:9" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + android:background="@drawable/bottom_rounded_rect_white_background" + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/lesson_thumbnail"> - - - + + + + + + + + diff --git a/app/src/main/res/layout/promoted_story_list.xml b/app/src/main/res/layout/promoted_story_list.xml index b9ca9dabff5..cacf3e99b84 100755 --- a/app/src/main/res/layout/promoted_story_list.xml +++ b/app/src/main/res/layout/promoted_story_list.xml @@ -19,6 +19,7 @@ - + app:cardCornerRadius="4dp"> - + android:layout_height="match_parent" + android:onClick="@{(v) -> viewModel.clickOnSummaryTile()}" + android:clickable="true" + android:focusable="true"> - - - - - + + android:background="@color/topicTitleBackground" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/topic_thumbnail_image_view"> @@ -102,9 +73,13 @@ android:textColor="@color/white_80" android:textSize="14sp" android:textStyle="italic" + android:layout_marginTop="4dp" + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" + android:paddingBottom="8dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/topic_name_text_view" /> - - + + diff --git a/app/src/main/res/layout/welcome.xml b/app/src/main/res/layout/welcome.xml index f0f9b5ae6d7..2b784226d1c 100644 --- a/app/src/main/res/layout/welcome.xml +++ b/app/src/main/res/layout/welcome.xml @@ -28,20 +28,24 @@ + app:layout_constraintBottom_toBottomOf="@id/welcome_text_view" + app:layout_constraintTop_toTopOf="@+id/welcome_text_view" /> #CC2970 #707070 + #C6DCDA + #2F6687 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 9d599273852..2aeeeb96f5a 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -21,10 +21,12 @@ 160dp 48dp 20dp + 44dp 72dp 72dp 36dp 32dp + 28dp 16dp 12dp 8dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d035f138040..bb36c0640d4 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -99,6 +99,7 @@ %d GB Correct! Topic: %s + %s! 1 Chapter diff --git a/utility/src/main/java/org/oppia/util/datetime/DateTimeUtil.kt b/utility/src/main/java/org/oppia/util/datetime/DateTimeUtil.kt index 20d7420061f..574b3be8276 100644 --- a/utility/src/main/java/org/oppia/util/datetime/DateTimeUtil.kt +++ b/utility/src/main/java/org/oppia/util/datetime/DateTimeUtil.kt @@ -1,11 +1,11 @@ package org.oppia.util.datetime import android.content.Context -import org.oppia.util.R -import org.oppia.util.system.OppiaClock import java.util.Calendar import javax.inject.Inject import javax.inject.Singleton +import org.oppia.util.R +import org.oppia.util.system.OppiaClock /** Utility to manage date and time. */ @Singleton diff --git a/utility/src/main/java/org/oppia/util/system/OppiaClock.kt b/utility/src/main/java/org/oppia/util/system/OppiaClock.kt index 1403b08c269..e81d275ac27 100644 --- a/utility/src/main/java/org/oppia/util/system/OppiaClock.kt +++ b/utility/src/main/java/org/oppia/util/system/OppiaClock.kt @@ -5,7 +5,9 @@ import android.os.SystemClock import androidx.annotation.VisibleForTesting import java.text.ParseException import java.text.SimpleDateFormat -import java.util.* +import java.util.Calendar +import java.util.Date +import java.util.TimeZone import javax.inject.Inject import javax.inject.Singleton diff --git a/utility/src/test/java/org/oppia/util/datetime/DateTimeUtilTest.kt b/utility/src/test/java/org/oppia/util/datetime/DateTimeUtilTest.kt index 802fac8751a..bc0e52ac38b 100644 --- a/utility/src/test/java/org/oppia/util/datetime/DateTimeUtilTest.kt +++ b/utility/src/test/java/org/oppia/util/datetime/DateTimeUtilTest.kt @@ -9,6 +9,9 @@ import dagger.BindsInstance import dagger.Component import dagger.Module import dagger.Provides +import javax.inject.Inject +import javax.inject.Qualifier +import javax.inject.Singleton import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -29,9 +32,6 @@ import org.oppia.util.system.OppiaClock import org.oppia.util.threading.BackgroundDispatcher import org.oppia.util.threading.BlockingDispatcher import org.robolectric.annotation.Config -import javax.inject.Inject -import javax.inject.Qualifier -import javax.inject.Singleton // Time: Tue Apr 23 2019 23:22:00 private const val EVENING_TIMESTAMP = 1556061720000