Skip to content

Commit

Permalink
Merge branch 'introduce-asset-script-gae-proto-endpoint-impl' into in…
Browse files Browse the repository at this point in the history
…troduce-asset-download-script
  • Loading branch information
BenHenning committed Jun 21, 2024
2 parents e4e9002 + ca71716 commit 6b1d81c
Show file tree
Hide file tree
Showing 69 changed files with 2,735 additions and 427 deletions.
10 changes: 9 additions & 1 deletion .bazelrc
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
# Configurations for arguments that should automatically be added to Bazel commands.
# Configurations to ensure that Android-specific classes build correctly.
build --android_databinding_use_v3_4_args \
--experimental_android_databinding_v2 \
--android_databinding_use_androidx

# Ensure that all builds use the same JDK for building & running (for better hermeticity and fewer
# inconsistencies across environment configurations).
build --java_runtime_version=remotejdk_11 --tool_java_runtime_version=remotejdk_11

# Ensure all built Java files treat warnings as errors (similar to the Kotlin configuration) to help
# reduce code smell & potential bugs during development.
build --javacopt="-Werror"

# Note that this doesn't stop 'Werror' from being passed above, but that shouldn't affect most of
# the Oppia Android-specific build.
build:ignore_build_warnings --//tools/kotlin:warn_mode=warning

# Show all test output by default (for better debugging).
test --test_output=all
3 changes: 2 additions & 1 deletion app/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -408,9 +408,9 @@ VIEWS_WITH_RESOURCE_IMPORTS = [
"src/main/java/org/oppia/android/app/customview/ChapterNotStartedContainerConstraintLayout.kt",
"src/main/java/org/oppia/android/app/customview/ContinueButtonView.kt",
"src/main/java/org/oppia/android/app/customview/LessonThumbnailImageView.kt",
"src/main/java/org/oppia/android/app/customview/OppiaCurveBackgroundView.kt",
"src/main/java/org/oppia/android/app/customview/PromotedStoryCardView.kt",
"src/main/java/org/oppia/android/app/customview/SegmentedCircularProgressView.kt",
"src/main/java/org/oppia/android/app/customview/SurveyOnboardingBackgroundView.kt",
"src/main/java/org/oppia/android/app/customview/VerticalDashedLineView.kt",
"src/main/java/org/oppia/android/app/survey/SurveyMultipleChoiceOptionView.kt",
"src/main/java/org/oppia/android/app/survey/SurveyNpsItemOptionView.kt",
Expand Down Expand Up @@ -485,6 +485,7 @@ BINDING_ADAPTERS_WITH_RESOURCE_IMPORTS = [
BINDING_ADAPTERS = [
"src/main/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdapters.java",
"src/main/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdapters.java",
"src/main/java/org/oppia/android/app/databinding/ColorBindingAdapters.java",
"src/main/java/org/oppia/android/app/databinding/ConstraintLayoutAdapters.java",
"src/main/java/org/oppia/android/app/databinding/EditTextBindingAdapters.java",
"src/main/java/org/oppia/android/app/databinding/GuidelineBindingAdapters.java",
Expand Down
1 change: 0 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,9 @@
android:label="@string/survey_activity_title"
android:theme="@style/OppiaThemeWithoutActionBar"
android:windowSoftInputMode="adjustNothing" />
<activity
android:name=".app.testing.ColorBindingAdaptersTestActivity"
android:theme="@style/OppiaThemeWithoutActionBar" />

<provider
android:name="androidx.work.impl.WorkManagerInitializer"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ import org.oppia.android.app.testing.AdministratorControlsFragmentTestActivity
import org.oppia.android.app.testing.AppCompatCheckBoxBindingAdaptersTestActivity
import org.oppia.android.app.testing.AudioFragmentTestActivity
import org.oppia.android.app.testing.CircularProgressIndicatorAdaptersTestActivity
import org.oppia.android.app.testing.ColorBindingAdaptersTestActivity
import org.oppia.android.app.testing.ConceptCardFragmentTestActivity
import org.oppia.android.app.testing.DragDropTestActivity
import org.oppia.android.app.testing.DrawableBindingAdaptersTestActivity
Expand Down Expand Up @@ -216,4 +217,5 @@ interface ActivityComponentImpl :
fun inject(viewEventLogsTestActivity: ViewEventLogsTestActivity)
fun inject(walkthroughActivity: WalkthroughActivity)
fun inject(surveyActivity: SurveyActivity)
fun inject(colorBindingAdaptersTestActivity: ColorBindingAdaptersTestActivity)
}
Original file line number Diff line number Diff line change
@@ -1,50 +1,54 @@
package org.oppia.android.app.customview

import android.content.Context
import android.content.res.Configuration
import android.content.res.Resources
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Path
import android.util.AttributeSet
import android.view.View
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import org.oppia.android.R
import org.oppia.android.app.translation.AppLanguageResourceHandler
import org.oppia.android.app.view.ViewComponentFactory
import org.oppia.android.app.view.ViewComponentImpl
import javax.inject.Inject

/**
* CustomView to add a background to [SurveyWelcomeDialogFragment] and [SurveyOutroDialogFragment].
* Without chaptersFinished and totalChapters values this custom-view cannot be created.
* CustomView to add a background to views that require a bezier curve background.
*
* Reference: // https://proandroiddev.com/how-i-drew-custom-shapes-in-bottom-bar-c4539d86afd7 and
* // https://ciechanow.ski/drawing-bezier-curves/
*/
class SurveyOnboardingBackgroundView : View {
@Inject
lateinit var resourceHandler: AppLanguageResourceHandler
class OppiaCurveBackgroundView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
/**
* Used to retrieve the layout direction that should be used to mirror the direction of the
* curve based on locale.
*/
@Inject lateinit var resourceHandler: AppLanguageResourceHandler

private val isRtl by lazy {
resourceHandler.getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL
}

private val orientation = Resources.getSystem().configuration.orientation

private var customBackgroundColor = Color.WHITE // Default color.

private lateinit var paint: Paint
private lateinit var path: Path
private var strokeWidth = 2f

constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)

init {
/** Sets the desired background color to the view and initializes the view. */
fun setCustomBackgroundColor(colorRes: Int) {
this.customBackgroundColor = colorRes
setupCurvePaint()
}

Expand All @@ -61,17 +65,37 @@ class SurveyOnboardingBackgroundView : View {
val width = this.width.toFloat()
val height = this.height.toFloat()

val controlPoint1X = width * 0.5f
val controlPoint1Y = 0f

val controlPoint2X = width * 0.5f
val controlPoint2Y = height * 0.2f

val controlPoint3X = width * 1f
val controlPoint3Y = height * 0.1f
val controlPoint1X: Float
val controlPoint1Y: Float

val controlPoint2X: Float
val controlPoint2Y: Float

val controlPoint3X: Float
val controlPoint3Y: Float

if (orientation == Configuration.ORIENTATION_PORTRAIT) {
controlPoint1X = width * 0.55f
controlPoint1Y = 0f
controlPoint2X = width * 0.52f
controlPoint2Y = height * 0.2f
controlPoint3X = width * 1f
controlPoint3Y = height * 0.1f
} else {
controlPoint1X = width * 0.40f
controlPoint1Y = 0f
controlPoint2X = width * 0.60f
controlPoint2Y = height * 0.40f
controlPoint3X = width * 1f
controlPoint3Y = height * 0.2f
}

path.reset()
path.moveTo(0f, height * 0.1f)
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
path.moveTo(0f, height * 0.10f)
} else {
path.moveTo(0f, height * 0.30f)
}
path.cubicTo(
controlPoint1X,
controlPoint1Y,
Expand All @@ -90,12 +114,9 @@ class SurveyOnboardingBackgroundView : View {
path = Path()
paint = Paint(Paint.ANTI_ALIAS_FLAG)
paint.apply {
style = Paint.Style.FILL_AND_STROKE
strokeWidth = this@SurveyOnboardingBackgroundView.strokeWidth
color = ContextCompat.getColor(
context,
R.color.component_color_survey_popup_background_color
)
style = Paint.Style.FILL
strokeWidth = this@OppiaCurveBackgroundView.strokeWidth
color = customBackgroundColor
}
setBackgroundColor(Color.TRANSPARENT)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.oppia.android.app.databinding;

import android.view.View;
import androidx.databinding.BindingAdapter;

/** Holds all custom binding adapters that set color values. */
public final class ColorBindingAdapters {

/** Binding adapter for setting the `customBackgroundColor` for a [View]. */
@BindingAdapter("customBackgroundColor")
public static void setCustomBackgroundColor(View view, int color) {
view.setBackgroundColor(color);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,22 @@ import android.view.View
import android.view.ViewGroup
import org.oppia.android.app.fragment.FragmentComponentImpl
import org.oppia.android.app.fragment.InjectableFragment
import org.oppia.android.util.platformparameter.EnableOnboardingFlowV2
import org.oppia.android.util.platformparameter.PlatformParameterValue
import javax.inject.Inject

/** Fragment that contains an onboarding flow of the app. */
class OnboardingFragment : InjectableFragment() {
@Inject
lateinit var onboardingFragmentPresenterV1: OnboardingFragmentPresenterV1

@Inject
lateinit var onboardingFragmentPresenter: OnboardingFragmentPresenter

@Inject
@field:EnableOnboardingFlowV2
lateinit var enableOnboardingFlowV2: PlatformParameterValue<Boolean>

override fun onAttach(context: Context) {
super.onAttach(context)
(fragmentComponent as FragmentComponentImpl).inject(this)
Expand All @@ -24,6 +33,10 @@ class OnboardingFragment : InjectableFragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return onboardingFragmentPresenter.handleCreateView(inflater, container)
return if (enableOnboardingFlowV2.value) {
onboardingFragmentPresenter.handleCreateView(inflater, container)
} else {
onboardingFragmentPresenterV1.handleCreateView(inflater, container)
}
}
}
Loading

0 comments on commit 6b1d81c

Please sign in to comment.