From 0725db11376c75e434c2f717b20e7caca5ac0842 Mon Sep 17 00:00:00 2001 From: Akexorcist Date: Thu, 1 Apr 2021 01:43:48 +0700 Subject: [PATCH 01/76] Create android.yml --- .github/workflows/android.yml | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/workflows/android.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000..2919629 --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,57 @@ +name: Android CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + test: + name: Unit Test + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Run Unit test + run: ./gradlew test + - name: Build with Gradle + run: ./gradlew build + - name: Firebase Test Lab Action + uses: asadmansr/Firebase-Test-Lab-Action@v1.0 + + apk: + name: Generate APK + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Assemble App APK + run: ./gradlew assembleDebug + - name: Upload App APK + uses: actions/upload-artifact@v1 + with: + name: app-debug + path: app/build/outputs/apk/debug/app-debug.apk + + - name: Assemble Android Instrumented Unit Test + run: ./gradlew assembleDebugAndroidTest + - name: Upload Android Test APK + uses: actions/upload-artifact@v1 + with: + name: app-debug-androidTest + path: app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk From 77383c007e0713a881e9988b9cf82dce77993da5 Mon Sep 17 00:00:00 2001 From: Akexorcist Date: Thu, 1 Apr 2021 03:12:20 +0700 Subject: [PATCH 02/76] Update android.yml --- .github/workflows/android.yml | 48 ++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 2919629..1fc5fb5 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -22,10 +22,6 @@ jobs: - name: Run Unit test run: ./gradlew test - - name: Build with Gradle - run: ./gradlew build - - name: Firebase Test Lab Action - uses: asadmansr/Firebase-Test-Lab-Action@v1.0 apk: name: Generate APK @@ -55,3 +51,47 @@ jobs: with: name: app-debug-androidTest path: app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk + + firebase: + name: Run UI tests with Firebase Test Lab + needs: apk + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v1 + + - name: Download app APK + uses: actions/download-artifact@v1 + with: + name: app-debug + + - name: Download Android test APK + uses: actions/download-artifact@v1 + with: + name: app-debug-androidTest + + - name: Login to Google Cloud + uses: google-github-actions/setup-gcloud@master + with: + version: '270.0.0' + service_account_key: ${{ secrets.FIREBASE_SERVICES_KEY }} + + - name: Set current project + run: gcloud config set project ${{ secrets.FIREBASE_PROJECT_ID }} + + - name: Run Instrumentation Tests in Firebase Test Lab + run: "gcloud firebase test android run + --type instrumentation + --app app-debug/app-debug.apk + --test app-debug-androidTest/app-debug-androidTest.apk + --device model=flame,version=30,locale=en,orientation=portrait + --device model=x1q,version=29,locale=en,orientation=portrait + --device model=crownlte,version=28,locale=en,orientation=portrait + --device model=HWCOR,version=27,locale=en,orientation=portrait + --device model=SOV33,version=26,locale=en,orientation=portrait + --device model=mata,version=25,locale=en,orientation=portrait + --device model=HWMHA,version=24,locale=en,orientation=portrait + --device model=mlv1,version=23,locale=en,orientation=portrait + --device model=Nexus4,version=22,locale=en,orientation=portrait + --device model=flo,version=21,locale=en,orientation=portrait + --device model=victara,version=19,locale=en,orientation=portrait" From a8d9d71a74e99aa17e7ad8ade953b181e71c3249 Mon Sep 17 00:00:00 2001 From: Mohammad Reza Najafi Date: Mon, 5 Apr 2021 07:29:21 +0200 Subject: [PATCH 03/76] Adds compatibility with hilt's viewmodel injection a bit of code cleanup --- .../localizationapp/hilt/HiltActivity.kt | 28 ---- .../hilt/HiltFragmentWithViewModel.kt | 69 +++++++++ .../localizationapp/hilt/HiltViewModel.kt | 13 ++ .../localizationapp/hilt/StoryProvider.kt | 6 +- app/src/main/res/layout/activity_hilt.xml | 53 +------ app/src/main/res/layout/fragment_hilt.xml | 52 +++++++ .../core/LocalizationActivityDelegate.kt | 3 +- .../core/LocalizationApplicationDelegate.kt | 5 +- .../core/LocalizationUtility.kt | 132 ++++++++++++++---- .../ui/LocalizationApplication.kt | 5 + 10 files changed, 253 insertions(+), 113 deletions(-) create mode 100644 app/src/main/java/com/akexorcist/localizationapp/hilt/HiltFragmentWithViewModel.kt create mode 100644 app/src/main/java/com/akexorcist/localizationapp/hilt/HiltViewModel.kt create mode 100644 app/src/main/res/layout/fragment_hilt.xml diff --git a/app/src/main/java/com/akexorcist/localizationapp/hilt/HiltActivity.kt b/app/src/main/java/com/akexorcist/localizationapp/hilt/HiltActivity.kt index 4a16cff..cf71cba 100644 --- a/app/src/main/java/com/akexorcist/localizationapp/hilt/HiltActivity.kt +++ b/app/src/main/java/com/akexorcist/localizationapp/hilt/HiltActivity.kt @@ -13,36 +13,8 @@ class HiltActivity : LocalizationActivity() { @Inject lateinit var storyProvider: StoryProvider - companion object { - private const val KEY_SCROLL_X = "scroll_x" - } - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) - - binding.textViewContent.text = storyProvider.getAppleStory() - binding.btnBack.setOnClickListener { super.onBackPressed() } - binding.layoutLanguageChooser.btnAmerican.setOnClickListener { setLanguage("en") } - binding.layoutLanguageChooser.btnChinese.setOnClickListener { setLanguage("zh") } - binding.layoutLanguageChooser.btnItalian.setOnClickListener { setLanguage("it") } - binding.layoutLanguageChooser.btnJapanese.setOnClickListener { setLanguage("ja") } - binding.layoutLanguageChooser.btnKorean.setOnClickListener { setLanguage("ko") } - binding.layoutLanguageChooser.btnPortuguese.setOnClickListener { setLanguage("pt") } - binding.layoutLanguageChooser.btnThai.setOnClickListener { setLanguage("th") } - } - - public override fun onSaveInstanceState(outState: Bundle) { - // Save x-position of horizontal scroll view. - outState.putInt(KEY_SCROLL_X, binding.layoutLanguageChooser.svLanguageChooser.scrollX) - super.onSaveInstanceState(outState) - } - - public override fun onRestoreInstanceState(savedInstanceState: Bundle) { - super.onRestoreInstanceState(savedInstanceState) - // Restore x-position of horizontal scroll view. - binding.layoutLanguageChooser.svLanguageChooser.scrollTo( - savedInstanceState.getInt(KEY_SCROLL_X), 0 - ) } } diff --git a/app/src/main/java/com/akexorcist/localizationapp/hilt/HiltFragmentWithViewModel.kt b/app/src/main/java/com/akexorcist/localizationapp/hilt/HiltFragmentWithViewModel.kt new file mode 100644 index 0000000..36dcf50 --- /dev/null +++ b/app/src/main/java/com/akexorcist/localizationapp/hilt/HiltFragmentWithViewModel.kt @@ -0,0 +1,69 @@ +package com.akexorcist.localizationapp.hilt + +import android.os.Bundle +import android.view.View +import android.widget.Button +import android.widget.ImageButton +import android.widget.ScrollView +import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import com.akexorcist.localizationactivity.ui.LocalizationActivity +import com.akexorcist.localizationapp.R +import dagger.hilt.android.AndroidEntryPoint + + +@AndroidEntryPoint +class HiltFragmentWithViewModel : Fragment(R.layout.fragment_hilt) { + + private val hiltViewModel: HiltViewModel by viewModels() + + private var languageChooserScrollView: ScrollView? = null + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupUi(view) + } + + private fun setupUi(view: View) { + languageChooserScrollView = view.findViewById(R.id.sv_language_chooser) + + view.findViewById(R.id.text_view_content).text = hiltViewModel.storyProvider.getAppleStory() + view.findViewById