From 3ecaaa4233d0fc55764ff3be5d786846f85298d1 Mon Sep 17 00:00:00 2001 From: Duc Le Tran Date: Sat, 17 Aug 2019 09:25:26 +0700 Subject: [PATCH] Summary: Add expand/collapse animation for View/TextView Details: - Use external libraries for expandable text view and view container Fixes: #2182 --- app/build.gradle | 7 + .../general/event/EventDetailsFragment.kt | 11 +- .../general/sessions/SessionFragment.kt | 11 +- .../SpeakersCallProposalFragment.kt | 4 +- app/src/main/res/layout/content_event.xml | 4 +- app/src/main/res/layout/fragment_session.xml | 3 +- .../fragment_speakers_call_proposal.xml | 265 +++++++++--------- 7 files changed, 155 insertions(+), 150 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 09fc0c4cc..2e98a375b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -224,6 +224,13 @@ dependencies { // Searchable Spinner implementation 'com.toptoche.searchablespinner:searchablespinnerlibrary:1.3.1' + //ExpandableTextView + implementation 'at.blogc:expandabletextview:1.0.5' + + //ExpandableView + implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2' + + testImplementation 'junit:junit:4.12' testImplementation 'org.threeten:threetenbp:1.4.0' diff --git a/app/src/main/java/org/fossasia/openevent/general/event/EventDetailsFragment.kt b/app/src/main/java/org/fossasia/openevent/general/event/EventDetailsFragment.kt index a3942387b..32b5cb342 100644 --- a/app/src/main/java/org/fossasia/openevent/general/event/EventDetailsFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/event/EventDetailsFragment.kt @@ -415,14 +415,9 @@ class EventDetailsFragment : Fragment() { // Organizer Section if (!event.ownerName.isNullOrEmpty()) { val organizerDescriptionListener = View.OnClickListener { - if (rootView.seeMoreOrganizer.text == getString(R.string.see_more)) { - rootView.seeMoreOrganizer.text = getString(R.string.see_less) - rootView.eventOrganiserDescription.minLines = 0 - rootView.eventOrganiserDescription.maxLines = Int.MAX_VALUE - } else { - rootView.seeMoreOrganizer.text = getString(R.string.see_more) - rootView.eventOrganiserDescription.setLines(3) - } + rootView.eventOrganiserDescription.toggle() + rootView.seeMoreOrganizer.text = if (rootView.eventOrganiserDescription.isExpanded) + getString(R.string.see_less) else getString(R.string.see_more) } rootView.eventOrganiserDescription.post { diff --git a/app/src/main/java/org/fossasia/openevent/general/sessions/SessionFragment.kt b/app/src/main/java/org/fossasia/openevent/general/sessions/SessionFragment.kt index acca53f02..77c31a029 100644 --- a/app/src/main/java/org/fossasia/openevent/general/sessions/SessionFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/sessions/SessionFragment.kt @@ -231,14 +231,9 @@ class SessionFragment : Fragment() { false -> { rootView.sessionDetailAbstract.text = description.stripHtml() val sessionAbstractClickListener = View.OnClickListener { - if (rootView.sessionDetailAbstractSeeMore.text == getString(R.string.see_more)) { - rootView.sessionDetailAbstractSeeMore.text = getString(R.string.see_less) - rootView.sessionDetailAbstract.minLines = 0 - rootView.sessionDetailAbstract.maxLines = Int.MAX_VALUE - } else { - rootView.sessionDetailAbstractSeeMore.text = getString(R.string.see_more) - rootView.sessionDetailAbstract.setLines(LINE_COUNT_ABSTRACT + 1) - } + rootView.sessionDetailAbstract.toggle() + rootView.sessionDetailAbstractSeeMore.text = if (rootView.sessionDetailAbstract.isExpanded) + getString(R.string.see_less) else getString(R.string.see_more) } rootView.sessionDetailAbstract.post { diff --git a/app/src/main/java/org/fossasia/openevent/general/speakercall/SpeakersCallProposalFragment.kt b/app/src/main/java/org/fossasia/openevent/general/speakercall/SpeakersCallProposalFragment.kt index 50cb96a0a..7a3100f82 100644 --- a/app/src/main/java/org/fossasia/openevent/general/speakercall/SpeakersCallProposalFragment.kt +++ b/app/src/main/java/org/fossasia/openevent/general/speakercall/SpeakersCallProposalFragment.kt @@ -138,7 +138,7 @@ class SpeakersCallProposalFragment : Fragment(), ComplexBackPressFragment { .observe(viewLifecycleOwner, Observer { rootView.speakerProgressBar.isVisible = it }) - rootView.speakerInfoContainer.isVisible = speakersCallProposalViewModel.isSpeakerInfoShown + rootView.speakerInfoContainer.isExpanded = speakersCallProposalViewModel.isSpeakerInfoShown rootView.titleLayout.setRequired() setupTrack() @@ -159,7 +159,7 @@ class SpeakersCallProposalFragment : Fragment(), ComplexBackPressFragment { rootView.expandSpeakerDetailButton.setOnClickListener { speakersCallProposalViewModel.isSpeakerInfoShown = !speakersCallProposalViewModel.isSpeakerInfoShown - rootView.speakerInfoContainer.isVisible = speakersCallProposalViewModel.isSpeakerInfoShown + rootView.speakerInfoContainer.toggle() } rootView.submitProposalButton.setOnClickListener { diff --git a/app/src/main/res/layout/content_event.xml b/app/src/main/res/layout/content_event.xml index 4305d0638..2dfd7bb61 100644 --- a/app/src/main/res/layout/content_event.xml +++ b/app/src/main/res/layout/content_event.xml @@ -433,16 +433,18 @@ android:textColor="@color/light_grey" android:textSize="@dimen/event_details_headers" /> - - - - + app:el_duration="300" + app:el_expanded="true" + app:el_parallax="0.5"> - + android:layout_height="wrap_content"> + + android:orientation="horizontal"> - - - + - + + + android:orientation="horizontal"> - - - + - + + + android:orientation="horizontal"> - - - + - + + + android:orientation="horizontal"> - - - + - + + + android:orientation="horizontal"> - - - + - + + + android:orientation="horizontal"> - - - + - + + + android:foreground="?selectableItemBackground" + android:orientation="horizontal"> - + + + + - +