Skip to content

Commit a349f01

Browse files
authored
[MBL-19400][Student] To Do List - Implement actions (swipe, checkbox) (#3367)
Co-Authored-By: Claude noreply@anthropic.com refs: MBL-19400 affects: Student release note: Added swipe-to-complete and checkbox toggle functionality to To Do List with undo support * Swipe actin UI. * Swipe action * Refactored viewModel injection and screen architecture so the content of the screen could be reused. * Undo feature. * Checkbox action. * Offline and haptics. * Corrected calendar user colors to be in sync with the to do. * Fixed badge issues. * Tests. * Fixed remote config params for devDebugMinify build. * Fade in/out text. * Improve haptic feedback and fade-in animation for swipe gestures - Apply ease-in cubic easing to swipe indicator fade-in for more natural animation - Add GESTURE_START haptic feedback when user begins dragging - Add GESTURE_END haptic feedback when swipe animation completes - Keep TOGGLE_ON/OFF for checkbox interactions - All haptics fall back to CONTEXT_CLICK on API < 34 - Provides better tactile feedback flow: start → drag → end * Improved error logging. * Add DefaultToDoListRouter for Teacher and Parent apps - Created DefaultToDoListRouter with no-op implementations - Added ToDoListRouter provider to Teacher ToDoModule - Added ToDoListRouter provider to Parent ToDoModule - Fixes build issues for Teacher and Parent apps since ToDoListFragment is in common code * fixed tests * CR fixes. * Show snackbar for marking as undone as well. * Test fixes.
1 parent c12f823 commit a349f01

File tree

26 files changed

+998
-183
lines changed

26 files changed

+998
-183
lines changed

apps/parent/src/main/java/com/instructure/parentapp/di/feature/ToDoModule.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ package com.instructure.parentapp.di.feature
2020
import androidx.fragment.app.FragmentActivity
2121
import com.instructure.pandautils.features.calendartodo.details.ToDoViewModelBehavior
2222
import com.instructure.pandautils.features.calendartodo.details.ToDoRouter
23+
import com.instructure.pandautils.features.todolist.DefaultToDoListRouter
24+
import com.instructure.pandautils.features.todolist.ToDoListRouter
2325
import com.instructure.parentapp.features.calendartodo.ParentToDoRouter
2426
import com.instructure.parentapp.util.navigation.Navigation
2527
import dagger.Module
@@ -36,6 +38,11 @@ class ToDoModule {
3638
fun provideToDoRouter(activity: FragmentActivity, navigation: Navigation): ToDoRouter {
3739
return ParentToDoRouter(activity, navigation)
3840
}
41+
42+
@Provides
43+
fun provideToDoListRouter(): ToDoListRouter {
44+
return DefaultToDoListRouter()
45+
}
3946
}
4047

4148
@Module

apps/student/src/androidTest/java/com/instructure/student/ui/interaction/LoginInteractionTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class LoginInteractionTest : StudentTest() {
3838
if(isTabletDevice()) loginFindSchoolPage.assertHintText(R.string.schoolInstructureCom)
3939
else loginFindSchoolPage.assertHintText(R.string.loginHint)
4040

41-
loginFindSchoolPage.enterDomain("harv")
41+
loginFindSchoolPage.enterDomain("harvest")
4242
loginFindSchoolPage.assertSchoolSearchResults("City Harvest Church (Singapore)")
4343
}
4444

apps/student/src/main/java/com/instructure/student/activity/CallbackActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import com.instructure.pandautils.utils.FeatureFlagProvider
6060
import com.instructure.pandautils.utils.LocaleUtils
6161
import com.instructure.pandautils.utils.SHA256
6262
import com.instructure.pandautils.utils.ThemePrefs
63+
import com.instructure.pandautils.utils.isComplete
6364
import com.instructure.pandautils.utils.orDefault
6465
import com.instructure.pandautils.utils.toast
6566
import com.instructure.student.BuildConfig
@@ -236,7 +237,7 @@ abstract class CallbackActivity : ParentActivity(), OnUnreadCountInvalidated, No
236237
plannerApi.nextPagePlannerItems(nextUrl, restParams)
237238
}
238239

239-
val todoCount = plannerItems.dataOrNull?.count().orDefault()
240+
val todoCount = plannerItems.dataOrNull?.count { !it.isComplete() }.orDefault()
240241
updateToDoCount(todoCount)
241242
}
242243

apps/student/src/main/java/com/instructure/student/activity/NavigationActivity.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ import com.instructure.pandautils.features.notification.preferences.PushNotifica
9191
import com.instructure.pandautils.features.offline.sync.OfflineSyncHelper
9292
import com.instructure.pandautils.features.reminder.AlarmScheduler
9393
import com.instructure.pandautils.features.settings.SettingsFragment
94+
import com.instructure.pandautils.features.todolist.OnToDoCountChanged
95+
import com.instructure.pandautils.features.todolist.ToDoListFragment
9496
import com.instructure.pandautils.interfaces.NavigationCallbacks
9597
import com.instructure.pandautils.models.PushNotification
9698
import com.instructure.pandautils.receivers.PushExternalReceiver
@@ -136,7 +138,6 @@ import com.instructure.student.events.UserUpdatedEvent
136138
import com.instructure.student.features.files.list.FileListFragment
137139
import com.instructure.student.features.modules.progression.CourseModuleProgressionFragment
138140
import com.instructure.student.features.navigation.NavigationRepository
139-
import com.instructure.student.features.todolist.ToDoListFragment
140141
import com.instructure.student.fragment.BookmarksFragment
141142
import com.instructure.student.fragment.DashboardFragment
142143
import com.instructure.student.fragment.NotificationListFragment
@@ -174,7 +175,7 @@ private const val BOTTOM_SCREENS_BUNDLE_KEY = "bottomScreens"
174175
@AndroidEntryPoint
175176
@Suppress("DELEGATED_MEMBER_HIDES_SUPERTYPE_OVERRIDE")
176177
class NavigationActivity : BaseRouterActivity(), Navigation, MasqueradingDialog.OnMasqueradingSet,
177-
FullScreenInteractions, ActivityCompat.OnRequestPermissionsResultCallback by PermissionReceiver() {
178+
FullScreenInteractions, ActivityCompat.OnRequestPermissionsResultCallback by PermissionReceiver(), OnToDoCountChanged {
178179

179180
private val binding by viewBinding(ActivityNavigationBinding::inflate)
180181
private lateinit var navigationDrawerBinding: NavigationDrawerBinding
@@ -1273,6 +1274,10 @@ class NavigationActivity : BaseRouterActivity(), Navigation, MasqueradingDialog.
12731274
updateBottomBarBadge(R.id.bottomNavigationToDo, toDoCount, R.plurals.a11y_todoBadgeCount)
12741275
}
12751276

1277+
override fun onToDoCountChanged(count: Int) {
1278+
updateToDoCount(count)
1279+
}
1280+
12761281
private fun updateBottomBarBadge(@IdRes menuItemId: Int, count: Int, @PluralsRes quantityContentDescription: Int? = null) = with(binding) {
12771282
if (count > 0) {
12781283
bottomBar.getOrCreateBadge(menuItemId).number = count

apps/student/src/main/java/com/instructure/student/features/settings/StudentSettingsBehaviour.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class StudentSettingsBehaviour(
4545
if (apiPrefs.canvasForElementary) {
4646
preferencesList.add(1, SettingsItem.HOMEROOM_VIEW)
4747
}
48-
if (BuildConfig.DEBUG) {
48+
if (BuildConfig.IS_DEBUG) {
4949
preferencesList.add(SettingsItem.ACCOUNT_PREFERENCES)
5050
preferencesList.add(SettingsItem.FEATURE_FLAGS)
5151
preferencesList.add(SettingsItem.REMOTE_CONFIG)

apps/student/src/main/java/com/instructure/student/features/todolist/StudentToDoListRouter.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package com.instructure.student.features.todolist
1818

1919
import androidx.fragment.app.Fragment
2020
import androidx.fragment.app.FragmentActivity
21+
import com.instructure.pandautils.features.todolist.ToDoListFragment
2122
import com.instructure.pandautils.features.todolist.ToDoListRouter
2223
import com.instructure.student.activity.NavigationActivity
2324

apps/student/src/main/java/com/instructure/student/navigation/NavigationBehavior.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import com.instructure.interactions.router.Route
2626
import com.instructure.pandautils.features.inbox.list.InboxFragment
2727
import com.instructure.pandautils.utils.CanvasFont
2828
import com.instructure.student.activity.NothingToSeeHereFragment
29-
import com.instructure.student.features.todolist.ToDoListFragment
29+
import com.instructure.pandautils.features.todolist.ToDoListFragment
3030
import com.instructure.student.fragment.OldToDoListFragment
3131
import com.instructure.student.fragment.ParentFragment
3232

apps/student/src/main/java/com/instructure/student/router/RouteMatcher.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ import com.instructure.student.features.pages.list.PageListFragment
8282
import com.instructure.student.features.people.details.PeopleDetailsFragment
8383
import com.instructure.student.features.people.list.PeopleListFragment
8484
import com.instructure.student.features.quiz.list.QuizListFragment
85-
import com.instructure.student.features.todolist.ToDoListFragment
85+
import com.instructure.pandautils.features.todolist.ToDoListFragment
8686
import com.instructure.student.fragment.AnnouncementListFragment
8787
import com.instructure.student.fragment.BasicQuizViewFragment
8888
import com.instructure.student.fragment.CourseSettingsFragment

apps/student/src/main/java/com/instructure/student/router/RouteResolver.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import com.instructure.student.features.pages.list.PageListFragment
4545
import com.instructure.student.features.people.details.PeopleDetailsFragment
4646
import com.instructure.student.features.people.list.PeopleListFragment
4747
import com.instructure.student.features.quiz.list.QuizListFragment
48-
import com.instructure.student.features.todolist.ToDoListFragment
48+
import com.instructure.pandautils.features.todolist.ToDoListFragment
4949
import com.instructure.student.fragment.AccountPreferencesFragment
5050
import com.instructure.student.fragment.AnnouncementListFragment
5151
import com.instructure.student.fragment.AssignmentBasicFragment

apps/teacher/src/main/java/com/instructure/teacher/di/ToDoModule.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ package com.instructure.teacher.di
2020
import androidx.fragment.app.FragmentActivity
2121
import com.instructure.pandautils.features.calendartodo.details.ToDoViewModelBehavior
2222
import com.instructure.pandautils.features.calendartodo.details.ToDoRouter
23+
import com.instructure.pandautils.features.todolist.DefaultToDoListRouter
24+
import com.instructure.pandautils.features.todolist.ToDoListRouter
2325
import com.instructure.teacher.features.calendartodo.TeacherToDoRouter
2426
import dagger.Module
2527
import dagger.Provides
@@ -35,6 +37,11 @@ class ToDoModule {
3537
fun provideToDoRouter(activity: FragmentActivity): ToDoRouter {
3638
return TeacherToDoRouter(activity)
3739
}
40+
41+
@Provides
42+
fun provideToDoListRouter(): ToDoListRouter {
43+
return DefaultToDoListRouter()
44+
}
3845
}
3946

4047
@Module

0 commit comments

Comments
 (0)