diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index aa0b6a2f64b..0f6d464f4a1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -96,6 +96,9 @@ NOTICE @BenHenning # Language configuration files. config/**/languages/*.textproto @BenHenning +# Configuration for KitKat-specific curated builds. +config/kitkat_main_dex_class_list.txt @BenHenning + ##################################################################################### # app module # ##################################################################################### diff --git a/.github/workflows/build_tests.yml b/.github/workflows/build_tests.yml index b827f77733b..4fa60d192e0 100644 --- a/.github/workflows/build_tests.yml +++ b/.github/workflows/build_tests.yml @@ -22,6 +22,8 @@ jobs: CACHE_DIRECTORY: ~/.bazel_cache steps: - uses: actions/checkout@v2 + with: + fetch-depth: 0 - name: Set up JDK 9 uses: actions/setup-java@v1 @@ -130,16 +132,36 @@ jobs: run: | bazel build -- //:oppia - - name: Copy Oppia APK for uploading - run: cp $GITHUB_WORKSPACE/bazel-bin/oppia.apk /home/runner/work/oppia-android/oppia-android/ + # Note that caching only works on non-forks. + - name: Build Oppia KitKat binary (with caching, non-fork only) + if: ${{ env.ENABLE_CACHING == 'true' && github.event.pull_request.head.repo.full_name == 'oppia/oppia-android' }} + env: + BAZEL_REMOTE_CACHE_URL: ${{ secrets.BAZEL_REMOTE_CACHE_URL }} + run: | + bazel build --remote_http_cache=$BAZEL_REMOTE_CACHE_URL --google_credentials=./config/oppia-dev-workflow-remote-cache-credentials.json -- //:oppia_kitkat + + - name: Build Oppia binary KitKat (without caching, or on a fork) + if: ${{ env.ENABLE_CACHING == 'false' || github.event.pull_request.head.repo.full_name != 'oppia/oppia-android' }} + run: | + bazel build -- //:oppia_kitkat + + - name: Copy Oppia dev APKs for uploading + run: | + cp $GITHUB_WORKSPACE/bazel-bin/oppia.apk /home/runner/work/oppia-android/oppia-android/ + cp $GITHUB_WORKSPACE/bazel-bin/oppia_kitkat.apk /home/runner/work/oppia-android/oppia-android/ - uses: actions/upload-artifact@v2 with: name: oppia-bazel.apk path: /home/runner/work/oppia-android/oppia-android/oppia.apk + - uses: actions/upload-artifact@v2 + with: + name: oppia-bazel-kitkat.apk + path: /home/runner/work/oppia-android/oppia-android/oppia_kitkat.apk + build_oppia_dev_aab: - name: Build Oppia AAB (developer flavor) + name: Build Oppia AAB (developer flavors) runs-on: ${{ matrix.os }} strategy: matrix: @@ -259,16 +281,36 @@ jobs: run: | bazel build -- //:oppia_dev - - name: Copy Oppia APK for uploading - run: cp $GITHUB_WORKSPACE/bazel-bin/oppia_dev.aab /home/runner/work/oppia-android/oppia-android/ + # Note that caching only works on non-forks. + - name: Build Oppia developer KitKat AAB (with caching, non-fork only) + if: ${{ env.ENABLE_CACHING == 'true' && github.event.pull_request.head.repo.full_name == 'oppia/oppia-android' }} + env: + BAZEL_REMOTE_CACHE_URL: ${{ secrets.BAZEL_REMOTE_CACHE_URL }} + run: | + bazel build --remote_http_cache=$BAZEL_REMOTE_CACHE_URL --google_credentials=./config/oppia-dev-workflow-remote-cache-credentials.json -- //:oppia_dev_kitkat + + - name: Build Oppia developer KitKat AAB (without caching, or on a fork) + if: ${{ env.ENABLE_CACHING == 'false' || github.event.pull_request.head.repo.full_name != 'oppia/oppia-android' }} + run: | + bazel build -- //:oppia_dev_kitkat + + - name: Copy Oppia developer AABs for uploading + run: | + cp $GITHUB_WORKSPACE/bazel-bin/oppia_dev.aab /home/runner/work/oppia-android/oppia-android/ + cp $GITHUB_WORKSPACE/bazel-bin/oppia_dev_kitkat.aab /home/runner/work/oppia-android/oppia-android/ - uses: actions/upload-artifact@v2 with: name: oppia_dev.aab path: /home/runner/work/oppia-android/oppia-android/oppia_dev.aab + - uses: actions/upload-artifact@v2 + with: + name: oppia_dev_kitkat.aab + path: /home/runner/work/oppia-android/oppia-android/oppia_dev_kitkat.aab + build_oppia_alpha_aab: - name: Build Oppia AAB (alpha flavor) + name: Build Oppia AAB (alpha flavors) runs-on: ${{ matrix.os }} strategy: matrix: @@ -388,10 +430,30 @@ jobs: run: | bazel build --compilation_mode=opt -- //:oppia_alpha - - name: Copy Oppia APK for uploading - run: cp $GITHUB_WORKSPACE/bazel-bin/oppia_alpha.aab /home/runner/work/oppia-android/oppia-android/ + # Note that caching only works on non-forks. + - name: Build Oppia alpha KitKat AAB (with caching, non-fork only) + if: ${{ env.ENABLE_CACHING == 'true' && github.event.pull_request.head.repo.full_name == 'oppia/oppia-android' }} + env: + BAZEL_REMOTE_CACHE_URL: ${{ secrets.BAZEL_REMOTE_CACHE_URL }} + run: | + bazel build --compilation_mode=opt --remote_http_cache=$BAZEL_REMOTE_CACHE_URL --google_credentials=./config/oppia-dev-workflow-remote-cache-credentials.json -- //:oppia_alpha_kitkat + + - name: Build Oppia alpha KitKat AAB (without caching, or on a fork) + if: ${{ env.ENABLE_CACHING == 'false' || github.event.pull_request.head.repo.full_name != 'oppia/oppia-android' }} + run: | + bazel build --compilation_mode=opt -- //:oppia_alpha_kitkat + + - name: Copy Oppia alpha AABs for uploading + run: | + cp $GITHUB_WORKSPACE/bazel-bin/oppia_alpha.aab /home/runner/work/oppia-android/oppia-android/ + cp $GITHUB_WORKSPACE/bazel-bin/oppia_alpha_kitkat.aab /home/runner/work/oppia-android/oppia-android/ - uses: actions/upload-artifact@v2 with: name: oppia_alpha.aab path: /home/runner/work/oppia-android/oppia-android/oppia_alpha.aab + + - uses: actions/upload-artifact@v2 + with: + name: oppia_alpha_kitkat.aab + path: /home/runner/work/oppia-android/oppia-android/oppia_alpha_kitkat.aab diff --git a/BUILD.bazel b/BUILD.bazel index 845129a3402..b6eefe19198 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,6 +1,10 @@ # TODO(#1532): Rename file to 'BUILD' post-Gradle. -load("//:build_flavors.bzl", "AVAILABLE_FLAVORS", "define_oppia_binary_flavor") +load("//:build_flavors.bzl", "AVAILABLE_FLAVORS", "define_oppia_aab_binary_flavor", "transform_android_manifest") +load("//:version.bzl", "MAJOR_VERSION", "MINOR_VERSION", "OPPIA_DEV_KITKAT_VERSION_CODE", "OPPIA_DEV_VERSION_CODE") + +# This is exported here since config/ isn't a Bazel package. +exports_files(["config/kitkat_main_dex_class_list.txt"]) # Corresponds to being accessible to all Oppia targets. This should be used for production APIs & # modules that may be used both in production targets and in tests. @@ -68,28 +72,66 @@ package_group( ) # TODO(#1640): Move binary manifest to top-level package post-Gradle. -android_binary( - name = "oppia", - custom_package = "org.oppia.android", - enable_data_binding = True, - manifest = "//app:src/main/AndroidManifest.xml", - manifest_values = { - "applicationId": "org.oppia.android", - "minSdkVersion": "19", - "targetSdkVersion": "29", - "versionCode": "0", - "versionName": "0.1-alpha", - }, - multidex = "native", - deps = [ - "//app", - ], -) +[ + transform_android_manifest( + name = "oppia_apk_%s_transformed_manifest" % apk_flavor_metadata["flavor"], + build_flavor = apk_flavor_metadata["flavor"], + input_file = "//app:src/main/AndroidManifest.xml", + major_version = MAJOR_VERSION, + minor_version = MINOR_VERSION, + output_file = "AndroidManifest_transformed_%s.xml" % apk_flavor_metadata["flavor"], + version_code = apk_flavor_metadata["version_code"], + ) + for apk_flavor_metadata in [ + { + "flavor": "oppia", + "version_code": OPPIA_DEV_VERSION_CODE, + }, + { + "flavor": "oppia_kitkat", + "version_code": OPPIA_DEV_KITKAT_VERSION_CODE, + }, + ] +] + +[ + android_binary( + name = apk_flavor_metadata["flavor"], + custom_package = "org.oppia.android", + enable_data_binding = True, + main_dex_list = apk_flavor_metadata.get("main_dex_list"), + manifest = "oppia_apk_%s_transformed_manifest" % apk_flavor_metadata["flavor"], + manifest_values = { + "applicationId": "org.oppia.android", + "minSdkVersion": "%d" % apk_flavor_metadata["min_sdk_version"], + "targetSdkVersion": "%d" % apk_flavor_metadata["target_sdk_version"], + }, + multidex = apk_flavor_metadata["multidex"], + deps = [ + "//app", + ], + ) + for apk_flavor_metadata in [ + { + "flavor": "oppia", + "min_sdk_version": 21, + "multidex": "native", + "target_sdk_version": 29, + }, + { + "flavor": "oppia_kitkat", + "main_dex_list": "//:config/kitkat_main_dex_class_list.txt", + "min_sdk_version": 19, + "multidex": "manual_main_dex", + "target_sdk_version": 29, + }, + ] +] # Define all binary flavors that can be built. Note that these are AABs, not APKs, and can be # be installed on a local device or emulator using a 'bazel run' command like so: # bazel run //:install_oppia_dev [ - define_oppia_binary_flavor(flavor = flavor) + define_oppia_aab_binary_flavor(flavor = flavor) for flavor in AVAILABLE_FLAVORS ] diff --git a/app/BUILD.bazel b/app/BUILD.bazel index fba131c801b..caf40076824 100644 --- a/app/BUILD.bazel +++ b/app/BUILD.bazel @@ -529,7 +529,6 @@ android_library( # Library for layout resource files. android_library( name = "databinding_resources", - srcs = BINDING_ADAPTERS, custom_package = "org.oppia.android.app.databinding", enable_data_binding = True, exports_manifest = True, @@ -685,6 +684,7 @@ android_library( "//third_party:androidx_lifecycle_lifecycle-livedata-ktx", "//third_party:circularimageview_circular_image_view", "//third_party:com_google_android_material_material", + "//third_party:de_hdodenhof_circleimageview", "//third_party:io_github_chaosleung_pinview", "//utility", "//utility/src/main/java/org/oppia/android/util/system:oppia_clock", diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c5f15f4bfc3..7d433c0fea2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,8 @@ + + PNG pipeline + // in Bazel. + AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) + } FirebaseApp.initializeApp(applicationContext) WorkManager.initialize(applicationContext, workManagerConfiguration) component.getApplicationStartupListeners().forEach(ApplicationStartupListener::onCreate) diff --git a/app/src/main/java/org/oppia/android/app/databinding/ImageViewBindingAdapters.java b/app/src/main/java/org/oppia/android/app/databinding/ImageViewBindingAdapters.java index 710098a0dee..818fa574dec 100644 --- a/app/src/main/java/org/oppia/android/app/databinding/ImageViewBindingAdapters.java +++ b/app/src/main/java/org/oppia/android/app/databinding/ImageViewBindingAdapters.java @@ -10,116 +10,26 @@ import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.Target; import org.oppia.android.R; -import org.oppia.android.app.model.LessonThumbnailGraphic; import org.oppia.android.app.model.ProfileAvatar; /** Holds all custom binding adapters that bind to [ImageView]. */ public final class ImageViewBindingAdapters { - /** - * Allows binding drawables to an [ImageView] via "android:src". - * Reference: https://stackoverflow.com/a/35809319/3689782. - */ - @BindingAdapter("android:src") - public static void setImageDrawable(@NonNull ImageView imageView, String imageUrl) { - RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.review_placeholder); - Glide.with(imageView.getContext()) - .load(imageUrl) - .apply(requestOptions) - .into(imageView); - } - - /** - * Allows binding drawables to an [ImageView] via "android:src". - * Reference: https://stackoverflow.com/a/35809319/3689782. - */ - @BindingAdapter("android:src") - public static void setImageDrawable( + @BindingAdapter("app:srcCompat") + public static void setImageDrawableCompat( @NonNull ImageView imageView, @DrawableRes int drawableResourceId ) { imageView.setImageResource(drawableResourceId); } - /** - * Binds the specified [LessonThumbnailGraphic] as the source for the [ImageView]. - *

- * The view should be specified to have no width/height (when sized in a constraint layout), and - * use centerCrop for the image to appear correctly. - */ - @BindingAdapter("android:src") - public static void setImageDrawable( - ImageView imageView, - LessonThumbnailGraphic thumbnailGraphic + @BindingAdapter("app:srcCompat") + public static void setImageDrawableCompat( + @NonNull ImageView imageView, + Drawable drawable ) { - int drawableResourceId; - switch (thumbnailGraphic) { - case BAKER: - drawableResourceId = R.drawable.lesson_thumbnail_graphic_baker; - break; - case CHILD_WITH_BOOK: - drawableResourceId = R.drawable.lesson_thumbnail_graphic_child_with_book; - break; - case CHILD_WITH_CUPCAKES: - drawableResourceId = R.drawable.lesson_thumbnail_graphic_child_with_cupcakes; - break; - case CHILD_WITH_FRACTIONS_HOMEWORK: - drawableResourceId = R.drawable.lesson_thumbnail_graphic_child_with_fractions_homework; - break; - case DUCK_AND_CHICKEN: - drawableResourceId = R.drawable.lesson_thumbnail_graphic_duck_and_chicken; - break; - case PERSON_WITH_PIE_CHART: - drawableResourceId = R.drawable.lesson_thumbnail_graphic_person_with_pie_chart; - break; - case IDENTIFYING_THE_PARTS_OF_A_FRACTION: - drawableResourceId = R.drawable.topic_fractions_01; - break; - case WRITING_FRACTIONS: - drawableResourceId = R.drawable.topic_fractions_02; - break; - case EQUIVALENT_FRACTIONS: - drawableResourceId = R.drawable.topic_fractions_03; - break; - case MIXED_NUMBERS_AND_IMPROPER_FRACTIONS: - drawableResourceId = R.drawable.topic_fractions_04; - break; - case COMPARING_FRACTIONS: - drawableResourceId = R.drawable.topic_fractions_05; - break; - case ADDING_AND_SUBTRACTING_FRACTIONS: - drawableResourceId = R.drawable.topic_fractions_06; - break; - case MULTIPLYING_FRACTIONS: - drawableResourceId = R.drawable.topic_fractions_07; - break; - case DIVIDING_FRACTIONS: - drawableResourceId = R.drawable.topic_fractions_08; - break; - case DERIVE_A_RATIO: - drawableResourceId = R.drawable.topic_ratios_01; - break; - case WHAT_IS_A_FRACTION: - drawableResourceId = R.drawable.topic_fractions_01; - break; - case FRACTION_OF_A_GROUP: - drawableResourceId = R.drawable.topic_fractions_02; - break; - case ADDING_FRACTIONS: - drawableResourceId = R.drawable.topic_fractions_03; - break; - case MIXED_NUMBERS: - drawableResourceId = R.drawable.topic_fractions_04; - break; - default: - drawableResourceId = R.drawable.topic_fractions_01; - } - setImageDrawable( - imageView, - drawableResourceId - ); + imageView.setImageDrawable(drawable); } /** diff --git a/app/src/main/java/org/oppia/android/app/databinding/TextViewBindingAdapters.java b/app/src/main/java/org/oppia/android/app/databinding/TextViewBindingAdapters.java index e701a8cf20b..00b2abb0255 100644 --- a/app/src/main/java/org/oppia/android/app/databinding/TextViewBindingAdapters.java +++ b/app/src/main/java/org/oppia/android/app/databinding/TextViewBindingAdapters.java @@ -3,6 +3,7 @@ import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; +import android.graphics.drawable.Drawable; import android.view.View; import android.widget.TextView; import androidx.annotation.NonNull; @@ -45,6 +46,17 @@ public static void setProfileLastVisitedText(@NonNull TextView textView, long ti textView.setText(profileLastVisited); } + /** Binds an AndroidX KitKat-compatible drawable end to the specified text view. */ + @BindingAdapter("app:drawableEndCompat") + public static void setDrawableEndCompat( + @NonNull TextView imageView, + Drawable drawable + ) { + imageView.setCompoundDrawablesRelativeWithIntrinsicBounds( + /* start= */ null, /* top= */ null, /* end= */ drawable, /* bottom=*/ null + ); + } + private static String getTimeAgo(View view, long lastVisitedTimestamp) { long timeStampMillis = ensureTimestampIsInMilliseconds(lastVisitedTimestamp); long currentTimeMillis = getOppiaClock(view).getCurrentTimeMs(); diff --git a/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt index 3f0525734ab..709d7f5af05 100644 --- a/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt +++ b/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt @@ -1,6 +1,5 @@ package org.oppia.android.app.drawer -import android.os.Build import android.view.LayoutInflater import android.view.MenuItem import android.view.View @@ -15,6 +14,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.lifecycle.Transformations import com.google.android.material.navigation.NavigationView +import com.google.common.base.Optional import org.oppia.android.R import org.oppia.android.app.administratorcontrols.AdministratorControlsActivity import org.oppia.android.app.devoptions.DeveloperOptionsStarter @@ -40,7 +40,6 @@ import org.oppia.android.domain.topic.TopicController import org.oppia.android.util.data.AsyncResult import org.oppia.android.util.data.DataProviders.Companion.toLiveData import org.oppia.android.util.statusbar.StatusBarColor -import java.util.Optional import javax.inject.Inject const val NAVIGATION_PROFILE_ID_ARGUMENT_KEY = @@ -98,29 +97,26 @@ class NavigationDrawerFragmentPresenter @Inject constructor( // TODO(#3382): Remove debug only code from prod build (also check imports, constructor and drawer_fragment.xml) private fun setIfDeveloperOptionsMenuItemListener() { - // TODO(#3383): Find a way to make this work below N - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - developerOptionsStarter.ifPresent { starter -> - getFooterViewModel().isDebugMode.set(true) - binding.developerOptionsLinearLayout.setOnClickListener { - if (getFooterViewModel().isDeveloperOptionsSelected.get() == true) { - drawerLayout.closeDrawers() - return@setOnClickListener - } - uncheckAllMenuItemsWhenAdministratorControlsOrDeveloperOptionsIsSelected() - drawerLayout.closeDrawers() - getFooterViewModel().isDeveloperOptionsSelected.set(true) - val intent = starter.createIntent(activity, internalProfileId) - fragment.activity!!.startActivity(intent) - if (previousMenuItemId == 0) fragment.activity!!.finish() - else if (previousMenuItemId != null && - NavigationDrawerItem.valueFromNavId(previousMenuItemId!!) != - NavigationDrawerItem.HOME - ) { - fragment.activity!!.finish() - } + developerOptionsStarter.asSet().forEach { starter -> + getFooterViewModel().isDebugMode.set(true) + binding.developerOptionsLinearLayout.setOnClickListener { + if (getFooterViewModel().isDeveloperOptionsSelected.get() == true) { drawerLayout.closeDrawers() + return@setOnClickListener + } + uncheckAllMenuItemsWhenAdministratorControlsOrDeveloperOptionsIsSelected() + drawerLayout.closeDrawers() + getFooterViewModel().isDeveloperOptionsSelected.set(true) + val intent = starter.createIntent(activity, internalProfileId) + fragment.activity!!.startActivity(intent) + if (previousMenuItemId == 0) fragment.activity!!.finish() + else if (previousMenuItemId != null && + NavigationDrawerItem.valueFromNavId(previousMenuItemId!!) != + NavigationDrawerItem.HOME + ) { + fragment.activity!!.finish() } + drawerLayout.closeDrawers() } } } diff --git a/app/src/main/res/layout-land/hints_summary.xml b/app/src/main/res/layout-land/hints_summary.xml index c1dcba67a30..2b654d0c309 100644 --- a/app/src/main/res/layout-land/hints_summary.xml +++ b/app/src/main/res/layout-land/hints_summary.xml @@ -84,7 +84,7 @@ android:layout_gravity="center_vertical" android:contentDescription="@{viewModel.computeHintListDropDownIconContentDescription()}" android:padding="8dp" - android:src="@drawable/ic_arrow_drop_down_black_24dp" + app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" app:isRotationAnimationClockwise="@{isListExpanded}" app:rotationAnimationAngle="@{180f}" /> diff --git a/app/src/main/res/layout-land/lessons_chapter_view.xml b/app/src/main/res/layout-land/lessons_chapter_view.xml index 3b7897fb411..d3fdbbca226 100644 --- a/app/src/main/res/layout-land/lessons_chapter_view.xml +++ b/app/src/main/res/layout-land/lessons_chapter_view.xml @@ -1,5 +1,6 @@ - + @@ -31,7 +32,7 @@ android:layout_marginStart="16dp" android:layout_marginEnd="8dp" android:contentDescription="@{viewModel.computeChapterPlayStateIconContentDescription()}" - android:src="@{viewModel.chapterPlayState == ChapterPlayState.COMPLETED?@drawable/ic_check_24dp:@drawable/ic_pending_24dp}" + app:srcCompat="@{viewModel.chapterPlayState == ChapterPlayState.COMPLETED?@drawable/ic_check_24dp:@drawable/ic_pending_24dp}" android:visibility="@{(viewModel.chapterPlayState == ChapterPlayState.COMPLETED || viewModel.chapterPlayState == ChapterPlayState.IN_PROGRESS_SAVED)?View.VISIBLE : View.INVISIBLE}" /> diff --git a/app/src/main/res/layout-land/onboarding_slide.xml b/app/src/main/res/layout-land/onboarding_slide.xml index ce316a794bd..3ac11c15768 100644 --- a/app/src/main/res/layout-land/onboarding_slide.xml +++ b/app/src/main/res/layout-land/onboarding_slide.xml @@ -29,7 +29,7 @@ android:adjustViewBounds="true" android:importantForAccessibility="no" android:scaleType="fitXY" - android:src="@{viewModel.slideImage}" + app:srcCompat="@{viewModel.slideImage}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="H, 10:9" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout-land/onboarding_slide_final.xml b/app/src/main/res/layout-land/onboarding_slide_final.xml index 934c8ed5758..afec77e83e1 100644 --- a/app/src/main/res/layout-land/onboarding_slide_final.xml +++ b/app/src/main/res/layout-land/onboarding_slide_final.xml @@ -30,7 +30,7 @@ android:adjustViewBounds="true" android:importantForAccessibility="no" android:scaleType="fitXY" - android:src="@drawable/ic_landscape_onboarding_3" + app:srcCompat="@drawable/ic_landscape_onboarding_3" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="H, 10:9" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout-land/profile_chooser_add_view.xml b/app/src/main/res/layout-land/profile_chooser_add_view.xml index ca149ec25ff..71071ed8f22 100644 --- a/app/src/main/res/layout-land/profile_chooser_add_view.xml +++ b/app/src/main/res/layout-land/profile_chooser_add_view.xml @@ -33,7 +33,7 @@ android:layout_width="72dp" android:layout_height="72dp" android:layout_marginBottom="8dp" - android:src="@drawable/ic_add_profile" + app:srcCompat="@{@drawable/ic_add_profile}" app:civ_border_color="@color/avatarBorder" app:civ_border_width="1dp" /> diff --git a/app/src/main/res/layout-land/profile_chooser_fragment.xml b/app/src/main/res/layout-land/profile_chooser_fragment.xml index 3d9a06b1bc4..43d2939a6a7 100644 --- a/app/src/main/res/layout-land/profile_chooser_fragment.xml +++ b/app/src/main/res/layout-land/profile_chooser_fragment.xml @@ -33,7 +33,7 @@ android:paddingStart="4dp" android:paddingTop="20dp" android:paddingEnd="20dp" - android:src="@drawable/ic_language_icon_grey_24dp" + app:srcCompat="@drawable/ic_language_icon_grey_24dp" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -117,7 +117,7 @@ android:paddingTop="12dp" android:paddingEnd="16dp" android:paddingBottom="12dp" - android:src="@drawable/ic_settings_grey_48dp" /> + app:srcCompat="@drawable/ic_settings_grey_48dp" /> diff --git a/app/src/main/res/layout-land/profile_progress_header.xml b/app/src/main/res/layout-land/profile_progress_header.xml index 3607624b315..8e9cfdc89c2 100644 --- a/app/src/main/res/layout-land/profile_progress_header.xml +++ b/app/src/main/res/layout-land/profile_progress_header.xml @@ -39,7 +39,7 @@ android:onClick="@{() -> viewModel.clickOnProfilePicture()}" android:paddingStart="12dp" android:paddingTop="12dp" - android:src="@drawable/rounded_white_background_with_shadow" + app:srcCompat="@drawable/rounded_white_background_with_shadow" app:layout_constraintBottom_toBottomOf="@+id/profile_edit_image" app:layout_constraintEnd_toEndOf="@+id/profile_edit_image" /> diff --git a/app/src/main/res/layout-land/question_player_fragment.xml b/app/src/main/res/layout-land/question_player_fragment.xml index 02b7cbdcfa0..b90b0b24ffc 100644 --- a/app/src/main/res/layout-land/question_player_fragment.xml +++ b/app/src/main/res/layout-land/question_player_fragment.xml @@ -148,7 +148,7 @@ android:layout_gravity="top|end" android:layout_margin="8dp" android:contentDescription="@string/new_hint_available" - android:src="@drawable/ic_dot_yellow_24dp" + app:srcCompat="@drawable/ic_dot_yellow_24dp" android:visibility="@{viewModel.isHintOpenedAndUnRevealed() ? View.VISIBLE : View.GONE}" /> + app:srcCompat="@drawable/ic_hint_bulb_white_24dp" /> diff --git a/app/src/main/res/layout-land/story_chapter_view.xml b/app/src/main/res/layout-land/story_chapter_view.xml index d1d43288657..be3a47b2989 100644 --- a/app/src/main/res/layout-land/story_chapter_view.xml +++ b/app/src/main/res/layout-land/story_chapter_view.xml @@ -95,7 +95,7 @@ android:layout_marginEnd="8dp" android:layout_marginBottom="4dp" android:contentDescription="@{@string/chapter_completed}" - android:src="@drawable/ic_check_24dp" + app:srcCompat="@drawable/ic_check_24dp" android:visibility="@{viewModel.chapterSummary.chapterPlayState == ChapterPlayState.COMPLETED ? View.VISIBLE : View.GONE}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout-land/topic_info_fragment.xml b/app/src/main/res/layout-land/topic_info_fragment.xml index f42fd7673d2..007ec49262d 100644 --- a/app/src/main/res/layout-land/topic_info_fragment.xml +++ b/app/src/main/res/layout-land/topic_info_fragment.xml @@ -104,7 +104,7 @@ android:layout_marginTop="24dp" android:layout_marginEnd="72dp" android:layout_marginBottom="32dp" - android:src="@{viewModel.downloadStatusIndicatorDrawableResourceId, default=@drawable/ic_available_offline_primary_24dp}" + app:srcCompat="@{viewModel.downloadStatusIndicatorDrawableResourceId, default=@drawable/ic_available_offline_primary_24dp}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/see_more_text_view" /> diff --git a/app/src/main/res/layout-land/topic_lessons_story_summary.xml b/app/src/main/res/layout-land/topic_lessons_story_summary.xml index 09e92d066df..48ef7150074 100644 --- a/app/src/main/res/layout-land/topic_lessons_story_summary.xml +++ b/app/src/main/res/layout-land/topic_lessons_story_summary.xml @@ -135,7 +135,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal|bottom" android:contentDescription="@{isListExpanded ? @string/hide_chapter_list : @string/show_chapter_list}" - android:src="@drawable/ic_arrow_drop_down_black_24dp" + app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" app:isRotationAnimationClockwise="@{isListExpanded}" app:rotationAnimationAngle="@{180f}" /> diff --git a/app/src/main/res/layout-land/walkthrough_final_fragment.xml b/app/src/main/res/layout-land/walkthrough_final_fragment.xml index c23c0c09f82..09ab8eeebb9 100644 --- a/app/src/main/res/layout-land/walkthrough_final_fragment.xml +++ b/app/src/main/res/layout-land/walkthrough_final_fragment.xml @@ -23,7 +23,7 @@ android:layout_width="180dp" android:layout_height="180dp" android:layout_marginStart="28dp" - android:src="@drawable/ic_portrait_onboarding_0" + app:srcCompat="@drawable/ic_portrait_onboarding_0" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout-land/walkthrough_welcome_fragment.xml b/app/src/main/res/layout-land/walkthrough_welcome_fragment.xml index 5ce14f69346..a34f65e94d7 100644 --- a/app/src/main/res/layout-land/walkthrough_welcome_fragment.xml +++ b/app/src/main/res/layout-land/walkthrough_welcome_fragment.xml @@ -57,7 +57,7 @@ android:layout_width="180dp" android:layout_height="180dp" android:layout_marginStart="56dp" - android:src="@drawable/ic_portrait_onboarding_0" + app:srcCompat="@drawable/ic_portrait_onboarding_0" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout-sw600dp-land/hints_summary.xml b/app/src/main/res/layout-sw600dp-land/hints_summary.xml index a9e5eb3639c..8f38a2a47a8 100644 --- a/app/src/main/res/layout-sw600dp-land/hints_summary.xml +++ b/app/src/main/res/layout-sw600dp-land/hints_summary.xml @@ -78,7 +78,7 @@ android:layout_gravity="center_vertical" android:contentDescription="@{viewModel.computeHintListDropDownIconContentDescription()}" android:padding="8dp" - android:src="@drawable/ic_arrow_drop_down_black_24dp" + app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" app:isRotationAnimationClockwise="@{isListExpanded}" app:rotationAnimationAngle="@{180f}" /> diff --git a/app/src/main/res/layout-sw600dp-land/onboarding_fragment.xml b/app/src/main/res/layout-sw600dp-land/onboarding_fragment.xml index 1f018a5b7a7..54be918fb4d 100644 --- a/app/src/main/res/layout-sw600dp-land/onboarding_fragment.xml +++ b/app/src/main/res/layout-sw600dp-land/onboarding_fragment.xml @@ -75,7 +75,7 @@ android:minHeight="48dp" android:onClick="@{(v) -> presenter.clickOnNext()}" android:scaleType="center" - android:src="@drawable/ic_arrow_forward_black_24dp" + app:srcCompat="@drawable/ic_arrow_forward_black_24dp" android:visibility="@{viewModel.slideNumber != 3 ? View.VISIBLE: View.GONE, default=visible}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout-sw600dp-land/onboarding_slide.xml b/app/src/main/res/layout-sw600dp-land/onboarding_slide.xml index 2e4497cf4b8..d583edeb5eb 100644 --- a/app/src/main/res/layout-sw600dp-land/onboarding_slide.xml +++ b/app/src/main/res/layout-sw600dp-land/onboarding_slide.xml @@ -28,7 +28,7 @@ android:layout_height="0dp" android:adjustViewBounds="true" android:importantForAccessibility="no" - android:src="@{viewModel.slideImage}" + app:srcCompat="@{viewModel.slideImage}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="40:39" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout-sw600dp-land/onboarding_slide_final.xml b/app/src/main/res/layout-sw600dp-land/onboarding_slide_final.xml index 3944fb465ae..c3b3095228c 100644 --- a/app/src/main/res/layout-sw600dp-land/onboarding_slide_final.xml +++ b/app/src/main/res/layout-sw600dp-land/onboarding_slide_final.xml @@ -29,7 +29,7 @@ android:layout_height="0dp" android:adjustViewBounds="true" android:importantForAccessibility="no" - android:src="@drawable/ic_landscape_onboarding_3_tablet" + app:srcCompat="@drawable/ic_landscape_onboarding_3_tablet" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="40:39" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout-sw600dp-land/profile_chooser_add_view.xml b/app/src/main/res/layout-sw600dp-land/profile_chooser_add_view.xml index 5e34a5d1fc9..6339536d44e 100644 --- a/app/src/main/res/layout-sw600dp-land/profile_chooser_add_view.xml +++ b/app/src/main/res/layout-sw600dp-land/profile_chooser_add_view.xml @@ -39,7 +39,7 @@ android:id="@+id/profile_add_button" android:layout_width="108dp" android:layout_height="108dp" - android:src="@drawable/ic_add_profile" + app:srcCompat="@{@drawable/ic_add_profile}" app:layoutMarginTop="@{hasProfileEverBeenAddedValue ? @dimen/profile_chooser_add_view_circular_image_margin_top_profile_already_added : @dimen/space_0dp}" app:civ_border_color="@color/avatarBorder" app:civ_border_width="1dp" /> diff --git a/app/src/main/res/layout-sw600dp-land/profile_chooser_fragment.xml b/app/src/main/res/layout-sw600dp-land/profile_chooser_fragment.xml index e00baba31e8..7598fcc7260 100644 --- a/app/src/main/res/layout-sw600dp-land/profile_chooser_fragment.xml +++ b/app/src/main/res/layout-sw600dp-land/profile_chooser_fragment.xml @@ -37,7 +37,7 @@ android:paddingStart="4dp" android:paddingTop="20dp" android:paddingEnd="20dp" - android:src="@drawable/ic_language_icon_grey_24dp" + app:srcCompat="@drawable/ic_language_icon_grey_24dp" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -121,7 +121,7 @@ android:layout_height="48dp" android:layout_marginEnd="96dp" android:padding="8dp" - android:src="@drawable/ic_settings_grey_48dp" /> + app:srcCompat="@drawable/ic_settings_grey_48dp" /> diff --git a/app/src/main/res/layout-sw600dp-land/profile_progress_header.xml b/app/src/main/res/layout-sw600dp-land/profile_progress_header.xml index 9398bca7926..6848b0031ef 100644 --- a/app/src/main/res/layout-sw600dp-land/profile_progress_header.xml +++ b/app/src/main/res/layout-sw600dp-land/profile_progress_header.xml @@ -38,7 +38,7 @@ android:onClick="@{() -> viewModel.clickOnProfilePicture()}" android:paddingStart="12dp" android:paddingTop="12dp" - android:src="@drawable/rounded_white_background_with_shadow" + app:srcCompat="@drawable/rounded_white_background_with_shadow" app:layout_constraintBottom_toBottomOf="@+id/profile_edit_image" app:layout_constraintEnd_toEndOf="@+id/profile_edit_image" /> diff --git a/app/src/main/res/layout-sw600dp-land/question_player_fragment.xml b/app/src/main/res/layout-sw600dp-land/question_player_fragment.xml index 55251dd52f7..8f6b5818b8d 100644 --- a/app/src/main/res/layout-sw600dp-land/question_player_fragment.xml +++ b/app/src/main/res/layout-sw600dp-land/question_player_fragment.xml @@ -152,7 +152,7 @@ android:layout_gravity="top|end" android:layout_margin="8dp" android:contentDescription="@string/new_hint_available" - android:src="@drawable/ic_dot_yellow_24dp" + app:srcCompat="@drawable/ic_dot_yellow_24dp" android:visibility="@{viewModel.isHintOpenedAndUnRevealed() ? View.VISIBLE : View.GONE}" /> + app:srcCompat="@drawable/ic_hint_bulb_white_24dp" /> diff --git a/app/src/main/res/layout-sw600dp-land/topic_info_fragment.xml b/app/src/main/res/layout-sw600dp-land/topic_info_fragment.xml index 428ddefc4f8..fb3a79937e2 100644 --- a/app/src/main/res/layout-sw600dp-land/topic_info_fragment.xml +++ b/app/src/main/res/layout-sw600dp-land/topic_info_fragment.xml @@ -99,7 +99,7 @@ android:layout_height="20dp" android:layout_marginStart="64dp" android:layout_marginTop="32dp" - android:src="@{viewModel.downloadStatusIndicatorDrawableResourceId, default=@drawable/ic_available_offline_primary_24dp}" + app:srcCompat="@{viewModel.downloadStatusIndicatorDrawableResourceId, default=@drawable/ic_available_offline_primary_24dp}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/see_more_text_view" /> diff --git a/app/src/main/res/layout-sw600dp-land/topic_lessons_story_summary.xml b/app/src/main/res/layout-sw600dp-land/topic_lessons_story_summary.xml index c7b07e6e927..d3f338cd0e6 100644 --- a/app/src/main/res/layout-sw600dp-land/topic_lessons_story_summary.xml +++ b/app/src/main/res/layout-sw600dp-land/topic_lessons_story_summary.xml @@ -138,7 +138,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal|bottom" android:contentDescription="@{isListExpanded ? @string/hide_chapter_list : @string/show_chapter_list}" - android:src="@drawable/ic_arrow_drop_down_black_24dp" + app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" app:isRotationAnimationClockwise="@{isListExpanded}" app:rotationAnimationAngle="@{180f}" /> diff --git a/app/src/main/res/layout-sw600dp-port/hints_summary.xml b/app/src/main/res/layout-sw600dp-port/hints_summary.xml index 28dcfdd4ffb..c457db4d9ba 100644 --- a/app/src/main/res/layout-sw600dp-port/hints_summary.xml +++ b/app/src/main/res/layout-sw600dp-port/hints_summary.xml @@ -78,7 +78,7 @@ android:layout_gravity="center_vertical" android:contentDescription="@{viewModel.computeHintListDropDownIconContentDescription()}" android:padding="8dp" - android:src="@drawable/ic_arrow_drop_down_black_24dp" + app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" app:isRotationAnimationClockwise="@{isListExpanded}" app:rotationAnimationAngle="@{180f}" /> diff --git a/app/src/main/res/layout-sw600dp-port/onboarding_fragment.xml b/app/src/main/res/layout-sw600dp-port/onboarding_fragment.xml index 37cdf46fe28..7bfbe54ab2d 100644 --- a/app/src/main/res/layout-sw600dp-port/onboarding_fragment.xml +++ b/app/src/main/res/layout-sw600dp-port/onboarding_fragment.xml @@ -74,7 +74,7 @@ android:minHeight="48dp" android:onClick="@{(v) -> presenter.clickOnNext()}" android:scaleType="center" - android:src="@drawable/ic_arrow_forward_black_24dp" + app:srcCompat="@drawable/ic_arrow_forward_black_24dp" android:visibility="@{viewModel.slideNumber != 3 ? View.VISIBLE: View.GONE, default=visible}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout-sw600dp-port/onboarding_slide.xml b/app/src/main/res/layout-sw600dp-port/onboarding_slide.xml index 74a4ab27d9e..ef07a22d85b 100644 --- a/app/src/main/res/layout-sw600dp-port/onboarding_slide.xml +++ b/app/src/main/res/layout-sw600dp-port/onboarding_slide.xml @@ -27,7 +27,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:importantForAccessibility="no" - android:src="@{viewModel.slideImage}" + app:srcCompat="@{viewModel.slideImage}" app:layout_constraintDimensionRatio="5:4" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout-sw600dp-port/onboarding_slide_final.xml b/app/src/main/res/layout-sw600dp-port/onboarding_slide_final.xml index 1890899d7cd..f7b1c43797a 100644 --- a/app/src/main/res/layout-sw600dp-port/onboarding_slide_final.xml +++ b/app/src/main/res/layout-sw600dp-port/onboarding_slide_final.xml @@ -28,7 +28,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:importantForAccessibility="no" - android:src="@drawable/ic_portrait_onboarding_3" + app:srcCompat="@drawable/ic_portrait_onboarding_3" app:layout_constraintDimensionRatio="5:4" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout-sw600dp-port/profile_chooser_add_view.xml b/app/src/main/res/layout-sw600dp-port/profile_chooser_add_view.xml index 7ebf1309dd1..2b493e7cd69 100644 --- a/app/src/main/res/layout-sw600dp-port/profile_chooser_add_view.xml +++ b/app/src/main/res/layout-sw600dp-port/profile_chooser_add_view.xml @@ -40,7 +40,7 @@ android:id="@+id/profile_add_button" android:layout_width="108dp" android:layout_height="108dp" - android:src="@drawable/ic_add_profile" + app:srcCompat="@{@drawable/ic_add_profile}" app:layoutMarginTop="@{hasProfileEverBeenAddedValue ? @dimen/profile_chooser_add_view_circular_image_margin_top_profile_already_added : @dimen/space_0dp}" app:civ_border_color="@color/avatarBorder" app:civ_border_width="1dp" /> diff --git a/app/src/main/res/layout-sw600dp-port/profile_chooser_fragment.xml b/app/src/main/res/layout-sw600dp-port/profile_chooser_fragment.xml index 92c6e540cee..0c68b38ba4f 100644 --- a/app/src/main/res/layout-sw600dp-port/profile_chooser_fragment.xml +++ b/app/src/main/res/layout-sw600dp-port/profile_chooser_fragment.xml @@ -37,7 +37,7 @@ android:paddingStart="4dp" android:paddingTop="20dp" android:paddingEnd="20dp" - android:src="@drawable/ic_language_icon_grey_24dp" + app:srcCompat="@drawable/ic_language_icon_grey_24dp" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -121,7 +121,7 @@ android:layout_height="48dp" android:layout_marginEnd="64dp" android:padding="8dp" - android:src="@drawable/ic_settings_grey_48dp" /> + app:srcCompat="@drawable/ic_settings_grey_48dp" /> diff --git a/app/src/main/res/layout-sw600dp-port/profile_progress_header.xml b/app/src/main/res/layout-sw600dp-port/profile_progress_header.xml index 46455c87825..a7b3a4ce187 100644 --- a/app/src/main/res/layout-sw600dp-port/profile_progress_header.xml +++ b/app/src/main/res/layout-sw600dp-port/profile_progress_header.xml @@ -38,7 +38,7 @@ android:onClick="@{() -> viewModel.clickOnProfilePicture()}" android:paddingStart="12dp" android:paddingTop="12dp" - android:src="@drawable/rounded_white_background_with_shadow" + app:srcCompat="@drawable/rounded_white_background_with_shadow" app:layout_constraintBottom_toBottomOf="@+id/profile_edit_image" app:layout_constraintEnd_toEndOf="@+id/profile_edit_image" /> diff --git a/app/src/main/res/layout-sw600dp-port/question_player_fragment.xml b/app/src/main/res/layout-sw600dp-port/question_player_fragment.xml index ceaa478e9ab..ef3b272aceb 100644 --- a/app/src/main/res/layout-sw600dp-port/question_player_fragment.xml +++ b/app/src/main/res/layout-sw600dp-port/question_player_fragment.xml @@ -152,7 +152,7 @@ android:layout_gravity="top|end" android:layout_margin="8dp" android:contentDescription="@string/new_hint_available" - android:src="@drawable/ic_dot_yellow_24dp" + app:srcCompat="@drawable/ic_dot_yellow_24dp" android:visibility="@{viewModel.isHintOpenedAndUnRevealed() ? View.VISIBLE : View.GONE}" /> + app:srcCompat="@drawable/ic_hint_bulb_white_24dp" /> diff --git a/app/src/main/res/layout-sw600dp-port/topic_info_fragment.xml b/app/src/main/res/layout-sw600dp-port/topic_info_fragment.xml index 2aa1375f61a..c9bfa875c35 100644 --- a/app/src/main/res/layout-sw600dp-port/topic_info_fragment.xml +++ b/app/src/main/res/layout-sw600dp-port/topic_info_fragment.xml @@ -118,7 +118,7 @@ android:layout_height="20dp" android:layout_marginStart="120dp" android:layout_marginTop="24dp" - android:src="@{viewModel.downloadStatusIndicatorDrawableResourceId, default=@drawable/ic_available_offline_primary_24dp}" + app:srcCompat="@{viewModel.downloadStatusIndicatorDrawableResourceId, default=@drawable/ic_available_offline_primary_24dp}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/see_more_text_view" /> diff --git a/app/src/main/res/layout-sw600dp-port/topic_lessons_story_summary.xml b/app/src/main/res/layout-sw600dp-port/topic_lessons_story_summary.xml index 25b801e8054..9649b299c79 100644 --- a/app/src/main/res/layout-sw600dp-port/topic_lessons_story_summary.xml +++ b/app/src/main/res/layout-sw600dp-port/topic_lessons_story_summary.xml @@ -138,7 +138,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal|bottom" android:contentDescription="@{isListExpanded ? @string/hide_chapter_list : @string/show_chapter_list}" - android:src="@drawable/ic_arrow_drop_down_black_24dp" + app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" app:isRotationAnimationClockwise="@{isListExpanded}" app:rotationAnimationAngle="@{180f}" /> diff --git a/app/src/main/res/layout-sw600dp/help_activity.xml b/app/src/main/res/layout-sw600dp/help_activity.xml index 219ff664632..1b812394dea 100644 --- a/app/src/main/res/layout-sw600dp/help_activity.xml +++ b/app/src/main/res/layout-sw600dp/help_activity.xml @@ -37,7 +37,7 @@ android:background="@color/oppiaGreyBackground" android:contentDescription="@string/help_activity_back_arrow_description" android:padding="12dp" - android:src="@drawable/ic_arrow_back_black_24_dp" + app:srcCompat="@drawable/ic_arrow_back_black_24_dp" android:visibility="gone" app:layout_constraintStart_toEndOf="@id/multipane_guideline" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout-sw600dp/story_chapter_view.xml b/app/src/main/res/layout-sw600dp/story_chapter_view.xml index 8ea5b6867a4..72b96f4a8ef 100644 --- a/app/src/main/res/layout-sw600dp/story_chapter_view.xml +++ b/app/src/main/res/layout-sw600dp/story_chapter_view.xml @@ -67,7 +67,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="center" - android:src="@drawable/ic_baseline_lock_24" + app:srcCompat="@drawable/ic_baseline_lock_24" android:visibility="@{viewModel.chapterSummary.chapterPlayState == ChapterPlayState.NOT_PLAYABLE_MISSING_PREREQUISITES ? View.VISIBLE : View.INVISIBLE}" app:layout_constraintBottom_toBottomOf="@id/chapter_thumbnail" app:layout_constraintEnd_toEndOf="@id/chapter_thumbnail" @@ -128,7 +128,7 @@ android:layout_marginEnd="8dp" android:layout_marginBottom="4dp" android:contentDescription="@{@string/chapter_completed}" - android:src="@drawable/ic_check_24dp" + app:srcCompat="@drawable/ic_check_24dp" android:visibility="@{viewModel.chapterSummary.chapterPlayState == ChapterPlayState.COMPLETED ? View.VISIBLE : View.GONE}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/activity_view_binding_adapters_test.xml b/app/src/main/res/layout/activity_view_binding_adapters_test.xml index ae933b4f361..1ea2f715569 100644 --- a/app/src/main/res/layout/activity_view_binding_adapters_test.xml +++ b/app/src/main/res/layout/activity_view_binding_adapters_test.xml @@ -1,5 +1,6 @@ - + + app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" /> diff --git a/app/src/main/res/layout/add_profile_activity.xml b/app/src/main/res/layout/add_profile_activity.xml index bf756349f13..3765a11afa0 100644 --- a/app/src/main/res/layout/add_profile_activity.xml +++ b/app/src/main/res/layout/add_profile_activity.xml @@ -45,7 +45,7 @@ android:clickable="true" android:contentDescription="@string/current_profile_picture_content_description" android:focusable="true" - android:src="@drawable/ic_default_avatar" + app:srcCompat="@drawable/ic_default_avatar" app:add_shadow="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -59,7 +59,7 @@ android:contentDescription="@string/edit_profile_picture_content_description" android:paddingStart="12dp" android:paddingTop="12dp" - android:src="@drawable/rounded_white_background_with_shadow" + app:srcCompat="@drawable/rounded_white_background_with_shadow" app:layout_constraintBottom_toBottomOf="@+id/add_profile_activity_user_image_view" app:layout_constraintEnd_toEndOf="@+id/add_profile_activity_user_image_view" /> @@ -113,7 +113,7 @@ android:layout_height="48dp" android:contentDescription="@string/add_profile_info_content_description" android:padding="12dp" - android:src="@drawable/ic_info_icon" + app:srcCompat="@drawable/ic_info_icon" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@+id/add_profile_activity_pin_check_box" /> diff --git a/app/src/main/res/layout/app_version_fragment.xml b/app/src/main/res/layout/app_version_fragment.xml index 17c0b0ff013..3c0dae0e83e 100644 --- a/app/src/main/res/layout/app_version_fragment.xml +++ b/app/src/main/res/layout/app_version_fragment.xml @@ -36,7 +36,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/app_version_image_view_margin_start" - android:src="@drawable/ic_info_icon_gray_24dp" + app:srcCompat="@drawable/ic_info_icon_gray_24dp" app:layout_constraintEnd_toStartOf="@id/app_last_update_date_text_view" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/app_last_update_date_text_view" /> diff --git a/app/src/main/res/layout/audio_fragment.xml b/app/src/main/res/layout/audio_fragment.xml index 6b7417560ab..63c5bbe3562 100755 --- a/app/src/main/res/layout/audio_fragment.xml +++ b/app/src/main/res/layout/audio_fragment.xml @@ -35,7 +35,7 @@ android:contentDescription="@{viewModel.playStatusLiveData == UiAudioPlayStatus.PLAYING ? @string/audio_pause_description : @string/audio_play_description}" android:onClick="@{(v) -> viewModel.togglePlayPause(viewModel.playStatusLiveData)}" android:padding="12dp" - android:src="@{viewModel.playStatusLiveData == UiAudioPlayStatus.PLAYING ? @drawable/ic_pause_circle_filled_white_24dp : @drawable/ic_play_circle_filled_white_24dp}" + app:srcCompat="@{viewModel.playStatusLiveData == UiAudioPlayStatus.PLAYING ? @drawable/ic_pause_circle_filled_white_24dp : @drawable/ic_play_circle_filled_white_24dp}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -69,7 +69,7 @@ android:gravity="center" android:onClick="@{(v) -> audioFragment.languageSelectionClicked()}" android:padding="12dp" - android:src="@drawable/ic_audio_lang_24px" + app:srcCompat="@drawable/ic_audio_lang_24px" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/drag_drop_interaction_items.xml b/app/src/main/res/layout/drag_drop_interaction_items.xml index 2c7a8a1dd3f..429c8799e47 100644 --- a/app/src/main/res/layout/drag_drop_interaction_items.xml +++ b/app/src/main/res/layout/drag_drop_interaction_items.xml @@ -45,7 +45,7 @@ android:enabled="@{viewModel.itemIndex != 0}" android:focusable="true" android:onClick="@{(v) -> viewModel.handleUpMovement(adapter)}" - android:src="@drawable/ic_arrow_up_black_24dp" + app:srcCompat="@drawable/ic_arrow_up_black_24dp" android:tint="@{dragDropMoveUpItem.enabled? @color/mergeIconEnabled : @color/mergeIconDisabled}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -62,7 +62,7 @@ android:enabled="@{viewModel.itemIndex != viewModel.listSize-1}" android:focusable="true" android:onClick="@{(v) -> viewModel.handleDownMovement(adapter)}" - android:src="@drawable/ic_keyboard_arrow_down_black_24dp" + app:srcCompat="@drawable/ic_keyboard_arrow_down_black_24dp" android:tint="@{dragDropMoveDownItem.enabled? @color/mergeIconEnabled : @color/mergeIconDisabled}" /> @@ -91,7 +91,7 @@ android:focusable="true" android:onClick="@{(v) -> viewModel.handleGrouping(adapter)}" android:padding="16dp" - android:src="@drawable/ic_merge_icon_24" + app:srcCompat="@drawable/ic_merge_icon_24" android:tint="@{dragDropContentGroupItem.enabled? @color/mergeIconEnabled : @color/mergeIconDisabled}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -107,7 +107,7 @@ android:focusable="true" android:onClick="@{(v) -> viewModel.handleUnlinking(adapter)}" android:padding="16dp" - android:src="@drawable/ic_unlink_icon_24" + app:srcCompat="@drawable/ic_unlink_icon_24" app:layout_constraintBottom_toTopOf="@+id/drag_drop_content_group_item" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/drawer_fragment.xml b/app/src/main/res/layout/drawer_fragment.xml index b440a07d396..ae5fd677775 100644 --- a/app/src/main/res/layout/drawer_fragment.xml +++ b/app/src/main/res/layout/drawer_fragment.xml @@ -65,7 +65,7 @@ android:layout_width="24dp" android:layout_height="24dp" android:layout_gravity="center_vertical" - android:src="@drawable/ic_baseline_code_24" + app:srcCompat="@drawable/ic_baseline_code_24" android:tint="@{footerViewModel.isDeveloperOptionsSelected ? @color/highlightedDeveloperOptionsNavMenuItem : @color/oppiaPrimaryTextDark}"/> diff --git a/app/src/main/res/layout/force_network_type_network_item_view.xml b/app/src/main/res/layout/force_network_type_network_item_view.xml index 86ecad0dac2..5c57171578a 100644 --- a/app/src/main/res/layout/force_network_type_network_item_view.xml +++ b/app/src/main/res/layout/force_network_type_network_item_view.xml @@ -42,7 +42,7 @@ android:layout_marginEnd="18dp" android:layout_marginBottom="4dp" android:contentDescription="@{@string/force_network_type_network_selected}" - android:src="@drawable/ic_check_24dp" + app:srcCompat="@drawable/ic_check_24dp" android:visibility="@{isNetworkSelected ? View.VISIBLE : View.GONE }" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/hints_summary.xml b/app/src/main/res/layout/hints_summary.xml index 75db37f1e2b..7b0763ccce5 100644 --- a/app/src/main/res/layout/hints_summary.xml +++ b/app/src/main/res/layout/hints_summary.xml @@ -84,7 +84,7 @@ android:layout_gravity="center_vertical" android:contentDescription="@{viewModel.computeHintListDropDownIconContentDescription()}" android:padding="8dp" - android:src="@drawable/ic_arrow_drop_down_black_24dp" + app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" app:isRotationAnimationClockwise="@{isListExpanded}" app:rotationAnimationAngle="@{180f}" /> diff --git a/app/src/main/res/layout/image_region_selection_test_fragment.xml b/app/src/main/res/layout/image_region_selection_test_fragment.xml index 57758ce4d1d..5ff07314181 100644 --- a/app/src/main/res/layout/image_region_selection_test_fragment.xml +++ b/app/src/main/res/layout/image_region_selection_test_fragment.xml @@ -1,6 +1,7 @@ + app:srcCompat="@drawable/testing_fraction" /> - + @@ -31,7 +32,7 @@ android:layout_marginStart="16dp" android:layout_marginEnd="8dp" android:contentDescription="@{viewModel.computeChapterPlayStateIconContentDescription()}" - android:src="@{viewModel.chapterPlayState == ChapterPlayState.COMPLETED?@drawable/ic_check_24dp:@drawable/ic_pending_24dp}" + app:srcCompat="@{viewModel.chapterPlayState == ChapterPlayState.COMPLETED?@drawable/ic_check_24dp:@drawable/ic_pending_24dp}" android:visibility="@{(viewModel.chapterPlayState == ChapterPlayState.COMPLETED || viewModel.chapterPlayState == ChapterPlayState.IN_PROGRESS_SAVED)?View.VISIBLE : View.INVISIBLE}" /> diff --git a/app/src/main/res/layout/onboarding_slide.xml b/app/src/main/res/layout/onboarding_slide.xml index 72ac87b4bff..b3b42071e30 100644 --- a/app/src/main/res/layout/onboarding_slide.xml +++ b/app/src/main/res/layout/onboarding_slide.xml @@ -27,7 +27,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:importantForAccessibility="no" - android:src="@{viewModel.slideImage}" + app:srcCompat="@{viewModel.slideImage}" app:layout_constraintDimensionRatio="5:4" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/onboarding_slide_final.xml b/app/src/main/res/layout/onboarding_slide_final.xml index 40158512bd7..b9d63d9d3c3 100644 --- a/app/src/main/res/layout/onboarding_slide_final.xml +++ b/app/src/main/res/layout/onboarding_slide_final.xml @@ -29,7 +29,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:importantForAccessibility="no" - android:src="@drawable/ic_portrait_onboarding_3" + app:srcCompat="@drawable/ic_portrait_onboarding_3" app:layout_constraintDimensionRatio="5:4" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/pin_password_activity.xml b/app/src/main/res/layout/pin_password_activity.xml index d45770e047a..59065c76ec2 100644 --- a/app/src/main/res/layout/pin_password_activity.xml +++ b/app/src/main/res/layout/pin_password_activity.xml @@ -173,7 +173,7 @@ android:layout_height="32dp" android:layout_gravity="center_horizontal" android:contentDescription="@{viewModel.showPassword ? @string/password_shown_icon : @string/password_hidden_icon}" - android:src="@{viewModel.showPassword ? @drawable/ic_show_eye_icon : @drawable/ic_hide_eye_icon}" /> + app:srcCompat="@{viewModel.showPassword ? @drawable/ic_show_eye_icon : @drawable/ic_hide_eye_icon}" /> diff --git a/app/src/main/res/layout/profile_chooser_fragment.xml b/app/src/main/res/layout/profile_chooser_fragment.xml index bba2aeb6c10..cb7210cc957 100644 --- a/app/src/main/res/layout/profile_chooser_fragment.xml +++ b/app/src/main/res/layout/profile_chooser_fragment.xml @@ -33,7 +33,7 @@ android:paddingStart="4dp" android:paddingTop="20dp" android:paddingEnd="20dp" - android:src="@drawable/ic_language_icon_grey_24dp" + app:srcCompat="@drawable/ic_language_icon_grey_24dp" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"/> @@ -117,7 +117,7 @@ android:paddingTop="12dp" android:paddingEnd="16dp" android:paddingBottom="12dp" - android:src="@drawable/ic_settings_grey_48dp" /> + app:srcCompat="@drawable/ic_settings_grey_48dp" /> diff --git a/app/src/main/res/layout/profile_progress_header.xml b/app/src/main/res/layout/profile_progress_header.xml index 706fe2ecc61..c83060e0fd7 100644 --- a/app/src/main/res/layout/profile_progress_header.xml +++ b/app/src/main/res/layout/profile_progress_header.xml @@ -40,7 +40,7 @@ android:onClick="@{() -> viewModel.clickOnProfilePicture()}" android:paddingStart="8dp" android:paddingTop="8dp" - android:src="@drawable/rounded_white_background_with_shadow" + app:srcCompat="@drawable/rounded_white_background_with_shadow" app:layout_constraintBottom_toBottomOf="@+id/profile_edit_image" app:layout_constraintEnd_toEndOf="@+id/profile_edit_image"/> diff --git a/app/src/main/res/layout/question_player_fragment.xml b/app/src/main/res/layout/question_player_fragment.xml index f0d1fc08d77..7591436349e 100644 --- a/app/src/main/res/layout/question_player_fragment.xml +++ b/app/src/main/res/layout/question_player_fragment.xml @@ -128,7 +128,7 @@ android:layout_gravity="top|end" android:layout_margin="8dp" android:contentDescription="@string/new_hint_available" - android:src="@drawable/ic_dot_yellow_24dp" + app:srcCompat="@drawable/ic_dot_yellow_24dp" android:visibility="@{viewModel.isHintOpenedAndUnRevealed() ? View.VISIBLE : View.GONE}" /> + app:srcCompat="@drawable/ic_hint_bulb_white_24dp" /> diff --git a/app/src/main/res/layout/state_fragment.xml b/app/src/main/res/layout/state_fragment.xml index 3568b2df265..c70dd2cbc7c 100755 --- a/app/src/main/res/layout/state_fragment.xml +++ b/app/src/main/res/layout/state_fragment.xml @@ -114,7 +114,7 @@ android:layout_gravity="top|end" android:layout_margin="8dp" android:contentDescription="@string/new_hint_available" - android:src="@drawable/ic_dot_yellow_24dp" + app:srcCompat="@drawable/ic_dot_yellow_24dp" android:visibility="@{viewModel.isHintOpenedAndUnRevealed() ? View.VISIBLE : View.GONE}" /> + app:srcCompat="@drawable/ic_hint_bulb_white_24dp" /> diff --git a/app/src/main/res/layout/topic_lessons_story_summary.xml b/app/src/main/res/layout/topic_lessons_story_summary.xml index 722c8bb94f6..9e37a313bf3 100644 --- a/app/src/main/res/layout/topic_lessons_story_summary.xml +++ b/app/src/main/res/layout/topic_lessons_story_summary.xml @@ -135,7 +135,7 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal|bottom" android:contentDescription="@{isListExpanded ? @string/hide_chapter_list : @string/show_chapter_list}" - android:src="@drawable/ic_arrow_drop_down_black_24dp" + app:srcCompat="@drawable/ic_arrow_drop_down_black_24dp" app:isRotationAnimationClockwise="@{isListExpanded}" app:rotationAnimationAngle="@{180f}" /> diff --git a/app/src/main/res/layout/topic_practice_subtopic.xml b/app/src/main/res/layout/topic_practice_subtopic.xml index d476aef4138..d08d11b5a40 100755 --- a/app/src/main/res/layout/topic_practice_subtopic.xml +++ b/app/src/main/res/layout/topic_practice_subtopic.xml @@ -45,7 +45,7 @@ android:layout_height="wrap_content" android:button="@drawable/selector_checkbox" android:checked="@{isChecked}" - android:drawableStart="@android:color/transparent" + app:drawableStartCompat="@android:color/transparent" android:drawablePadding="20dp" android:fontFamily="sans-serif" android:gravity="start|top" diff --git a/app/src/main/res/layout/walkthrough_activity.xml b/app/src/main/res/layout/walkthrough_activity.xml index 114fd74982c..d4c26c4a22f 100644 --- a/app/src/main/res/layout/walkthrough_activity.xml +++ b/app/src/main/res/layout/walkthrough_activity.xml @@ -37,7 +37,7 @@ android:contentDescription="@string/back_button" android:focusable="true" android:onClick="@{(v) -> presenter.moveToPreviousPage(viewModel.currentProgress)}" - android:src="@drawable/ic_arrow_back_white_24dp" + app:srcCompat="@drawable/ic_arrow_back_white_24dp" android:tint="@color/grey" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/walkthrough_final_fragment.xml b/app/src/main/res/layout/walkthrough_final_fragment.xml index 75d1ef649a9..6bcc514b99a 100644 --- a/app/src/main/res/layout/walkthrough_final_fragment.xml +++ b/app/src/main/res/layout/walkthrough_final_fragment.xml @@ -27,7 +27,7 @@ android:layout_width="180dp" android:layout_height="180dp" android:layout_marginTop="32dp" - android:src="@drawable/ic_portrait_onboarding_0" + app:srcCompat="@drawable/ic_portrait_onboarding_0" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/walkthrough_final_title_text_view" /> diff --git a/app/src/main/res/layout/walkthrough_welcome_fragment.xml b/app/src/main/res/layout/walkthrough_welcome_fragment.xml index 002c9d57959..8f915dd3f0f 100644 --- a/app/src/main/res/layout/walkthrough_welcome_fragment.xml +++ b/app/src/main/res/layout/walkthrough_welcome_fragment.xml @@ -58,7 +58,7 @@ android:layout_width="180dp" android:layout_height="180dp" android:layout_marginTop="32dp" - android:src="@drawable/ic_portrait_onboarding_0" + app:srcCompat="@drawable/ic_portrait_onboarding_0" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/walkthrough_welcome_description_text_view" /> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 6b271c3c3a9..16a1d20e97a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -88,7 +88,7 @@ @drawable/previous_next_state_image_view_background @string/previous_state_description 12dp - @drawable/ic_arrow_back_oppia_dark_blue_24dp + @drawable/ic_arrow_back_oppia_dark_blue_24dp