diff --git a/Owl/app/build.gradle b/Owl/app/build.gradle index 3fde4e10..5dd16913 100644 --- a/Owl/app/build.gradle +++ b/Owl/app/build.gradle @@ -18,11 +18,11 @@ apply plugin: 'kotlin-kapt' apply plugin: 'androidx.navigation.safeargs.kotlin' android { - compileSdkVersion 30 + compileSdkVersion 33 defaultConfig { applicationId 'com.materialstudies.owl' minSdkVersion 23 - targetSdkVersion 30 + targetSdkVersion 33 versionCode 1 versionName '1.0' vectorDrawables.useSupportLibrary = true @@ -47,14 +47,15 @@ android { kotlinOptions { jvmTarget = "1.8" } + namespace 'com.materialstudies.owl' } dependencies { - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.fragment:fragment-ktx:1.2.5' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation 'androidx.core:core-ktx:1.5.0-alpha04' - implementation 'com.google.android.material:material:1.4.0-alpha02' + implementation 'androidx.appcompat:appcompat:1.5.1' + implementation 'androidx.fragment:fragment-ktx:1.5.5' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.core:core-ktx:1.9.0' + implementation 'com.google.android.material:material:1.8.0-beta01' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "androidx.navigation:navigation-runtime-ktx:$nav_version" @@ -62,6 +63,6 @@ dependencies { implementation "androidx.navigation:navigation-ui-ktx:$nav_version" implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' - implementation 'com.github.bumptech.glide:glide:4.11.0' - annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' + implementation 'com.github.bumptech.glide:glide:4.13.2' + annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2' } diff --git a/Owl/app/src/main/AndroidManifest.xml b/Owl/app/src/main/AndroidManifest.xml index 7a135a7b..d3dbaeb9 100644 --- a/Owl/app/src/main/AndroidManifest.xml +++ b/Owl/app/src/main/AndroidManifest.xml @@ -14,8 +14,7 @@ --> + xmlns:tools="http://schemas.android.com/tools"> @@ -31,7 +30,8 @@ + android:theme="@style/Owl.Blue" + android:exported="true"> diff --git a/Owl/app/src/main/java/com/materialstudies/owl/ui/featured/FeaturedFragment.kt b/Owl/app/src/main/java/com/materialstudies/owl/ui/featured/FeaturedFragment.kt index c138c8c1..df13fc18 100644 --- a/Owl/app/src/main/java/com/materialstudies/owl/ui/featured/FeaturedFragment.kt +++ b/Owl/app/src/main/java/com/materialstudies/owl/ui/featured/FeaturedFragment.kt @@ -24,6 +24,7 @@ import androidx.core.view.doOnNextLayout import androidx.fragment.app.Fragment import androidx.navigation.findNavController import androidx.navigation.fragment.FragmentNavigatorExtras +import com.materialstudies.owl.R import com.materialstudies.owl.databinding.FragmentFeaturedBinding import com.materialstudies.owl.model.CourseId import com.materialstudies.owl.model.courses @@ -46,14 +47,16 @@ class FeaturedFragment : Fragment() { val extras = FragmentNavigatorExtras( view to "shared_element" ) - val action = FeaturedFragmentDirections.actionFeaturedToLearn(courseId) - /* awaiting aosp/987385 in fragment 1.2.0-alpha02 - exitTransition = Recede().apply { - addTarget(root) - excludeTarget(view, true) - duration = 300L - }*/ - view.findNavController().navigate(action, extras) + + val bundle = Bundle() + bundle.putLong("course_id", courseId) + + view.findNavController().navigate( + R.id.action_featured_to_learn, + bundle, // Bundle of args + null, // NavOptions + extras + ) } } featuredGrid.apply { diff --git a/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt b/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt index 28945f12..3314d37d 100644 --- a/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt +++ b/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt @@ -59,14 +59,16 @@ class LessonsSheetFragment : Fragment() { val course = this.course if (course != null) { binding.lessonsSheet.postDelayed(300L) { - val action = - LessonsSheetFragmentDirections.actionLessonsSheetToLesson(course.id, step) - // FIXME should be able to `navigate(action)` but not working + val navController = findNavController() val onLesson = navController.currentDestination?.id != R.id.lesson + val bundle = Bundle() + bundle.putLong("course_id", course.id) + bundle.putInt("step_number", step) + navController.navigate( - R.id.lesson, - action.arguments, + R.id.action_featured_to_learn, + bundle, // Bundle of args navOptions { launchSingleTop = true anim { diff --git a/Owl/app/src/main/java/com/materialstudies/owl/ui/mycourses/MyCoursesAdapter.kt b/Owl/app/src/main/java/com/materialstudies/owl/ui/mycourses/MyCoursesAdapter.kt index c57002ce..107edd42 100644 --- a/Owl/app/src/main/java/com/materialstudies/owl/ui/mycourses/MyCoursesAdapter.kt +++ b/Owl/app/src/main/java/com/materialstudies/owl/ui/mycourses/MyCoursesAdapter.kt @@ -14,6 +14,7 @@ package com.materialstudies.owl.ui.mycourses +import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -36,9 +37,20 @@ class MyCoursesAdapter : ListAdapter(CourseDiff) { val extras = FragmentNavigatorExtras( view to "shared_element" ) - val action = MyCoursesFragmentDirections.actionMycoursesToLearn(courseId) - view.findNavController().navigate(action, extras) + + val bundle = Bundle() + bundle.putLong("course_id", courseId) + + view.findNavController().navigate( + R.id.action_mycourses_to_learn, + bundle, // Bundle of args + null, // NavOptions + extras + ) } + + + } private val shapeTransform = diff --git a/Owl/app/src/main/java/com/materialstudies/owl/ui/onboarding/TopicThumbnailDrawable.kt b/Owl/app/src/main/java/com/materialstudies/owl/ui/onboarding/TopicThumbnailDrawable.kt index 3071e33e..94311f98 100644 --- a/Owl/app/src/main/java/com/materialstudies/owl/ui/onboarding/TopicThumbnailDrawable.kt +++ b/Owl/app/src/main/java/com/materialstudies/owl/ui/onboarding/TopicThumbnailDrawable.kt @@ -93,9 +93,9 @@ class TopicThumbnailDrawable( callback?.invalidateDrawable(this) } - override fun onStateChange(state: IntArray?): Boolean { + override fun onStateChange(state: IntArray): Boolean { val initialProgress = progress - val newProgress = if (state?.contains(android.R.attr.state_activated) == true) { + val newProgress = if (state.contains(android.R.attr.state_activated)) { 1f } else { 0f @@ -115,8 +115,7 @@ class TopicThumbnailDrawable( override fun isStateful() = true - override fun onBoundsChange(bounds: Rect?) { - if (bounds == null) return + override fun onBoundsChange(bounds: Rect) { update() val dLeft = (bounds.right - selectedDrawable.intrinsicWidth) / 2 val dTop = (bounds.bottom - selectedDrawable.intrinsicHeight) / 2 diff --git a/Owl/app/src/main/java/com/materialstudies/owl/util/ViewExtensions.kt b/Owl/app/src/main/java/com/materialstudies/owl/util/ViewExtensions.kt index c3898ffe..68814a1b 100644 --- a/Owl/app/src/main/java/com/materialstudies/owl/util/ViewExtensions.kt +++ b/Owl/app/src/main/java/com/materialstudies/owl/util/ViewExtensions.kt @@ -23,6 +23,8 @@ import android.graphics.Bitmap.Config.ARGB_8888 import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.ColorDrawable +import android.os.Handler +import android.os.Looper import android.view.View import android.view.View.GONE import android.view.View.MeasureSpec @@ -179,38 +181,40 @@ fun View.findAncestorById(@IdRes ancestorId: Int): View { */ fun BottomNavigationView.show() { if (visibility == VISIBLE) return + Handler(Looper.myLooper()!!).postDelayed({ - val parent = parent as ViewGroup - // View needs to be laid out to create a snapshot & know position to animate. If view isn't - // laid out yet, need to do this manually. - if (!isLaidOut) { - measure( - MeasureSpec.makeMeasureSpec(parent.width, MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(parent.height, MeasureSpec.AT_MOST) - ) - layout(parent.left, parent.height - measuredHeight, parent.right, parent.height) - } - - val drawable = BitmapDrawable(context.resources, drawToBitmap()) - drawable.setBounds(left, parent.height, right, parent.height + height) - parent.overlay.add(drawable) - ValueAnimator.ofInt(parent.height, top).apply { - startDelay = 100L - duration = 300L - interpolator = AnimationUtils.loadInterpolator( - context, - android.R.interpolator.linear_out_slow_in - ) - addUpdateListener { - val newTop = it.animatedValue as Int - drawable.setBounds(left, newTop, right, newTop + height) + val parent = parent as ViewGroup + // View needs to be laid out to create a snapshot & know position to animate. If view isn't + // laid out yet, need to do this manually. + if (!isLaidOut) { + measure( + MeasureSpec.makeMeasureSpec(parent.width, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(parent.height, MeasureSpec.AT_MOST) + ) + layout(parent.left, parent.height - measuredHeight, parent.right, parent.height) } - doOnEnd { - parent.overlay.remove(drawable) - visibility = VISIBLE + + val drawable = BitmapDrawable(context.resources, drawToBitmap()) + drawable.setBounds(left, parent.height, right, parent.height + height) + parent.overlay.add(drawable) + ValueAnimator.ofInt(parent.height, top).apply { + startDelay = 100L + duration = 300L + interpolator = AnimationUtils.loadInterpolator( + context, + android.R.interpolator.linear_out_slow_in + ) + addUpdateListener { + val newTop = it.animatedValue as Int + drawable.setBounds(left, newTop, right, newTop + height) + } + doOnEnd { + parent.overlay.remove(drawable) + visibility = VISIBLE + } + start() } - start() - } + },100) } /** diff --git a/Owl/build.gradle b/Owl/build.gradle index ca25b341..1a81e09b 100644 --- a/Owl/build.gradle +++ b/Owl/build.gradle @@ -13,14 +13,14 @@ */ buildscript { - ext.kotlin_version = '1.4.10' - ext.nav_version = '2.3.1' + ext.kotlin_version = '1.6.20' + ext.nav_version = '2.5.3' repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } @@ -29,7 +29,7 @@ buildscript { allprojects { repositories { google() - jcenter() + mavenCentral() } } diff --git a/Owl/gradle/wrapper/gradle-wrapper.properties b/Owl/gradle/wrapper/gradle-wrapper.properties index c5f2522d..336d6411 100644 --- a/Owl/gradle/wrapper/gradle-wrapper.properties +++ b/Owl/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip