Skip to content

Commit 50a1821

Browse files
Release Student 8.2.0 (281)
2 parents d02d6d8 + 0d29096 commit 50a1821

File tree

305 files changed

+11668
-1534
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

305 files changed

+11668
-1534
lines changed

apps/parent/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ android {
4040
applicationId "com.instructure.parentapp"
4141
minSdkVersion Versions.MIN_SDK
4242
targetSdkVersion Versions.TARGET_SDK
43-
versionCode 60
44-
versionName "4.4.0"
43+
versionCode 61
44+
versionName "4.5.0"
4545

4646
buildConfigField "boolean", "IS_TESTING", "false"
4747
testInstrumentationRunner 'com.instructure.parentapp.ui.espresso.ParentHiltTestRunner'

apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/InboxE2ETest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import androidx.test.espresso.matcher.ViewMatchers
2323
import com.instructure.canvas.espresso.E2E
2424
import com.instructure.canvas.espresso.FeatureCategory
2525
import com.instructure.canvas.espresso.Priority
26-
import com.instructure.canvas.espresso.Stub
26+
import com.instructure.canvas.espresso.ReleaseExclude
2727
import com.instructure.canvas.espresso.TestCategory
2828
import com.instructure.canvas.espresso.TestMetaData
2929
import com.instructure.canvas.espresso.refresh
@@ -54,7 +54,7 @@ class InboxE2ETest: ParentComposeTest() {
5454
@E2E
5555
@Test
5656
@TestMetaData(Priority.MANDATORY, FeatureCategory.INBOX, TestCategory.E2E)
57-
@Stub
57+
@ReleaseExclude
5858
fun testInboxSelectedButtonActionsE2E() {
5959

6060
Log.d(PREPARATION_TAG, "Seeding data.")

apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxComposeInteractionTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.instructure.canvas.espresso.mockCanvas.addRecipientsToCourse
1313
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeAssignmentDetailsManager
1414
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeCommentLibraryManager
1515
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeInboxSettingsManager
16+
import com.instructure.canvas.espresso.mockCanvas.fakes.FakePostPolicyManager
1617
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeSubmissionCommentsManager
1718
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeSubmissionContentManager
1819
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeSubmissionDetailsManager
@@ -22,6 +23,7 @@ import com.instructure.canvas.espresso.mockCanvas.init
2223
import com.instructure.canvasapi2.di.GraphQlApiModule
2324
import com.instructure.canvasapi2.managers.CommentLibraryManager
2425
import com.instructure.canvasapi2.managers.InboxSettingsManager
26+
import com.instructure.canvasapi2.managers.PostPolicyManager
2527
import com.instructure.canvasapi2.managers.SubmissionRubricManager
2628
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
2729
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
@@ -90,6 +92,10 @@ class ParentInboxComposeInteractionTest: InboxComposeInteractionTest() {
9092
@JvmField
9193
val commentLibraryManager: CommentLibraryManager = FakeCommentLibraryManager()
9294

95+
@BindValue
96+
@JvmField
97+
val postPolicyManager: PostPolicyManager = FakePostPolicyManager()
98+
9399
@Test
94100
fun testParentComposeDefaultValues() {
95101
val data = initData(canSendToAll = true)

apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/ParentInboxSignatureInteractionTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import com.instructure.canvas.espresso.mockCanvas.MockCanvas
2424
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeAssignmentDetailsManager
2525
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeCommentLibraryManager
2626
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeInboxSettingsManager
27+
import com.instructure.canvas.espresso.mockCanvas.fakes.FakePostPolicyManager
2728
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeSubmissionCommentsManager
2829
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeSubmissionContentManager
2930
import com.instructure.canvas.espresso.mockCanvas.fakes.FakeSubmissionDetailsManager
@@ -33,6 +34,7 @@ import com.instructure.canvas.espresso.mockCanvas.init
3334
import com.instructure.canvasapi2.di.GraphQlApiModule
3435
import com.instructure.canvasapi2.managers.CommentLibraryManager
3536
import com.instructure.canvasapi2.managers.InboxSettingsManager
37+
import com.instructure.canvasapi2.managers.PostPolicyManager
3638
import com.instructure.canvasapi2.managers.SubmissionRubricManager
3739
import com.instructure.canvasapi2.managers.graphql.AssignmentDetailsManager
3840
import com.instructure.canvasapi2.managers.graphql.SubmissionCommentsManager
@@ -86,6 +88,10 @@ class ParentInboxSignatureInteractionTest : InboxSignatureInteractionTest() {
8688
@JvmField
8789
val commentLibraryManager: CommentLibraryManager = FakeCommentLibraryManager()
8890

91+
@BindValue
92+
@JvmField
93+
val postPolicyManager: PostPolicyManager = FakePostPolicyManager()
94+
8995
private val dashboardPage = DashboardPage()
9096
private val leftSideNavigationDrawerPage = LeftSideNavigationDrawerPage()
9197

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.instructure.canvasapi2.apis.CourseAPI
2222
import com.instructure.canvasapi2.apis.FeaturesAPI
2323
import com.instructure.canvasapi2.apis.PlannerAPI
2424
import com.instructure.canvasapi2.utils.ApiPrefs
25+
import com.instructure.pandautils.features.calendar.CalendarBehavior
2526
import com.instructure.pandautils.features.calendar.CalendarRepository
2627
import com.instructure.pandautils.features.calendar.CalendarRouter
2728
import com.instructure.pandautils.room.calendar.daos.CalendarFilterDao
@@ -61,4 +62,9 @@ class CalendarViewModelModule {
6162
): CalendarRepository {
6263
return ParentCalendarRepository(plannerApi, coursesApi, calendarEventsApi, apiPrefs, featuresApi, parentPrefs, calendarFilterDao)
6364
}
65+
66+
@Provides
67+
fun provideCalendarBehavior(): CalendarBehavior {
68+
return object : CalendarBehavior {}
69+
}
6470
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@ import com.instructure.canvasapi2.apis.InboxApi
2626
import com.instructure.canvasapi2.apis.ProgressAPI
2727
import com.instructure.canvasapi2.apis.RecipientAPI
2828
import com.instructure.canvasapi2.managers.InboxSettingsManager
29+
import com.instructure.pandautils.features.inbox.compose.InboxComposeBehavior
2930
import com.instructure.pandautils.features.inbox.compose.InboxComposeRepository
3031
import com.instructure.pandautils.features.inbox.details.InboxDetailsBehavior
32+
import com.instructure.pandautils.utils.FeatureFlagProvider
33+
import com.instructure.parentapp.features.inbox.compose.ParentInboxComposeBehavior
34+
3135
import com.instructure.pandautils.features.inbox.list.InboxRepository
3236
import com.instructure.pandautils.features.inbox.list.InboxRouter
3337
import com.instructure.pandautils.utils.FileDownloader
@@ -93,4 +97,9 @@ class InboxModule {
9397
fun provideInboxDetailsBehavior(): InboxDetailsBehavior {
9498
return InboxDetailsBehavior()
9599
}
100+
101+
@Provides
102+
fun provideInboxComposeBehavior(): InboxComposeBehavior {
103+
return ParentInboxComposeBehavior()
104+
}
96105
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2025 - present Instructure, Inc.
2+
* Copyright (C) 2024 - present Instructure, Inc.
33
*
44
* This program is free software: you can redistribute it and/or modify
55
* it under the terms of the GNU General Public License as published by
@@ -14,13 +14,11 @@
1414
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1515
*
1616
*/
17-
package com.instructure.horizon.features.inbox
17+
package com.instructure.parentapp.features.inbox.compose
1818

19-
import androidx.compose.runtime.Composable
20-
import androidx.navigation.NavHostController
21-
import com.instructure.horizon.features.inbox.navigation.HorizonInboxNavigation
19+
import com.instructure.pandautils.features.inbox.compose.InboxComposeBehavior
20+
import javax.inject.Inject
2221

23-
@Composable
24-
fun HorizonInboxScreen(mainNavController: NavHostController) {
25-
HorizonInboxNavigation(mainNavController)
26-
}
22+
class ParentInboxComposeBehavior @Inject constructor() : InboxComposeBehavior {
23+
override suspend fun shouldHideSendIndividual(): Boolean = false
24+
}

apps/parent/src/main/java/com/instructure/parentapp/features/splash/SplashViewModel.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@ class SplashViewModel @Inject constructor(
6868
val theme = repository.getTheme()
6969
theme?.let { _events.send(SplashAction.ApplyTheme(it)) }
7070

71+
// Fetch environment feature flags for app functionality
72+
try {
73+
featureFlagProvider.fetchEnvironmentFeatureFlags()
74+
} catch (e: Exception) {
75+
// Log error but don't block app startup
76+
}
77+
7178
if (apiPrefs.canBecomeUser == null && qrMasqueradeId == 0L) {
7279
if (apiPrefs.domain.startsWith("siteadmin", true)) {
7380
apiPrefs.canBecomeUser = true
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright (C) 2024 - present Instructure, Inc.
3+
*
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, version 3 of the License.
7+
*
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* GNU General Public License for more details.
12+
*
13+
* You should have received a copy of the GNU General Public License
14+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
15+
*
16+
*/
17+
package com.instructure.parentapp.features.inbox.compose
18+
19+
import kotlinx.coroutines.test.runTest
20+
import org.junit.Assert.assertFalse
21+
import org.junit.Test
22+
23+
class ParentInboxComposeBehaviorTest {
24+
25+
private val behavior = ParentInboxComposeBehavior()
26+
27+
@Test
28+
fun `shouldHideSendIndividual returns false for parent`() = runTest {
29+
val result = behavior.shouldHideSendIndividual()
30+
31+
assertFalse(result)
32+
}
33+
}

apps/student/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ android {
3737
applicationId "com.instructure.candroid"
3838
minSdkVersion Versions.MIN_SDK
3939
targetSdkVersion Versions.TARGET_SDK
40-
versionCode = 280
41-
versionName = '8.1.0'
40+
versionCode = 281
41+
versionName = '8.2.0'
4242

4343
vectorDrawables.useSupportLibrary = true
4444
testInstrumentationRunner 'com.instructure.student.espresso.StudentHiltTestRunner'

0 commit comments

Comments
 (0)