Skip to content

Commit

Permalink
ISSUE-543: add parsing CollapsingToolbarLayout title + sample
Browse files Browse the repository at this point in the history
  • Loading branch information
mfglushchenko committed Jul 18, 2023
1 parent 878f14a commit 6939527
Show file tree
Hide file tree
Showing 13 changed files with 191 additions and 1 deletion.
1 change: 1 addition & 0 deletions kaspresso/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ dependencies {
implementation(libs.gson)
implementation(projects.adbServer.adbserverDevice)
implementation(libs.appcompat)
implementation(libs.material)

testImplementation(libs.junit)
testImplementation(libs.truth)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.content.res.Resources
import android.view.View
import android.widget.TextView
import androidx.test.espresso.util.TreeIterables
import com.google.android.material.appbar.CollapsingToolbarLayout
import com.kaspersky.kaspresso.logger.UiTestLogger

/**
Expand Down Expand Up @@ -48,7 +49,7 @@ internal class ActivityMetadata(
}

private fun getLocalizedStrings(decorView: View): List<LocalizedString> {
return TreeIterables.depthFirstViewTraversal(decorView)
val localizedStrings = TreeIterables.depthFirstViewTraversal(decorView)
.filter { it.visibility == View.VISIBLE }
.filter { it is TextView }
.map { it as TextView }
Expand All @@ -61,7 +62,25 @@ internal class ActivityMetadata(
v.width,
v.height
)
}.toMutableList()

val stringsFromToolbarLayouts = TreeIterables.depthFirstViewTraversal(decorView)
.filter { it.visibility == View.VISIBLE }
.filter { it is CollapsingToolbarLayout }
.map { it as CollapsingToolbarLayout }
.map { v ->
LocalizedString(
v.title.toString(),
getEntryNameFromLayout(decorView.resources, v),
v.left,
v.top,
v.width,
v.height
)
}

localizedStrings.addAll(stringsFromToolbarLayouts)
return localizedStrings
}

private fun getEntryName(resources: Resources, v: TextView): String {
Expand All @@ -73,6 +92,16 @@ internal class ActivityMetadata(
}
}

private fun getEntryNameFromLayout(resources: Resources, layout: CollapsingToolbarLayout): String {
return try {
resources.getResourceEntryName(layout.id)
}
catch (ex: Resources.NotFoundException) {
logger.e("Entry ${layout.id} not found")
"[id:${Integer.toHexString(layout.id)}]"
}
}

private fun resolveAmbiguous(localizedStrings: List<LocalizedString>): List<LocalizedString> {
return localizedStrings.groupBy { it.locValueDescription }
.values
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.kaspersky.kaspressample.docloc_tests

import androidx.test.espresso.action.ViewActions
import androidx.test.ext.junit.rules.activityScenarioRule
import com.kaspersky.kaspressample.MainActivity
import com.kaspersky.kaspressample.screen.MainScreen
import com.kaspersky.kaspressample.screen.WithToolbarScreen
import com.kaspersky.kaspresso.testcases.api.testcase.DocLocScreenshotTestCase
import org.junit.Rule
import org.junit.Test

class ScreenshotActivityWithToolbarTest : DocLocScreenshotTestCase(locales="en") {

@get:Rule
val activityRule = activityScenarioRule<MainActivity>()

@Test
fun takeScreenshot() = run {
step("Open screen with toolbar") {
MainScreen {
withToolbarButton {
click()
}
}
}

step("Take screenshot") {
WithToolbarScreen {
collapsingToolbar {
view.perform(ViewActions.swipeUp())
}
}
captureScreenshot("screen with toolbar")
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,7 @@ object MainScreen : KScreen<MainScreen>() {

val changeLocaleButton = KButton { withId(R.id.activity_main_change_locale_mid_test_button) }

val withToolbarButton = KButton { withId(R.id.activity_with_toolbar_button) }

val descriptionText = KTextView { withId(R.id.activity_main_title) }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.kaspersky.kaspressample.screen

import com.kaspersky.kaspresso.screens.KScreen
import com.kaspersky.kaspressample.R
import io.github.kakaocup.kakao.toolbar.KToolbar

object WithToolbarScreen : KScreen<WithToolbarScreen>() {
override val layoutId: Int? = null
override val viewClass: Class<*>? = null

val collapsingToolbar = KToolbar { withId(R.id.collapsing_toolbar)}
}
5 changes: 5 additions & 0 deletions samples/kaspresso-sample/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@
android:name=".systemlanguage.ChangeLocaleActivity"
android:label="@string/main_screen_change_language_mid_test_button"/>

<activity
android:name=".withtoolbar.WithToolbarActivity"
android:theme="@style/ToolbarTheme"
android:label="@string/main_screen_activity_with_toolbar_button"/>

<service
android:name=".device.DeviceSampleAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import com.kaspersky.kaspressample.simple.SimpleActivity
import com.kaspersky.kaspressample.systemlanguage.ChangeLocaleActivity
import com.kaspersky.kaspressample.upgrade.UpgradeTestActivity
import com.kaspersky.kaspressample.web.WebViewActivity
import com.kaspersky.kaspressample.withtoolbar.WithToolbarActivity

class MainActivity : AppCompatActivity() {

Expand Down Expand Up @@ -73,6 +74,10 @@ class MainActivity : AppCompatActivity() {
startActivity(Intent(this, ChangeLocaleActivity::class.java))
}

binding.activityWithToolbarButton.setOnClickListener {
startActivity(Intent(this, WithToolbarActivity::class.java))
}

setContentView(binding.root)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.kaspersky.kaspressample.withtoolbar

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.appbar.CollapsingToolbarLayout
import com.google.android.material.appbar.MaterialToolbar
import com.kaspersky.kaspressample.R

class WithToolbarActivity : AppCompatActivity() {


override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_with_toolbar)

val toolbar = findViewById<MaterialToolbar>(R.id.toolbar)
toolbar.title = getString(R.string.toolbar_title)

val collapsingToolbar = findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar)
collapsingToolbar.title = getString(R.string.toolbar_layout_title)

this.setSupportActionBar(toolbar)
val actionBar = this.supportActionBar!!
actionBar.setDisplayHomeAsUpEnabled(true)
actionBar.setDisplayShowHomeEnabled(true)

toolbar.setNavigationOnClickListener { this.onBackPressed() }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,13 @@
android:layout_below="@id/activity_main_device_full_button"
android:text="@string/main_screen_change_language_mid_test_button" />

<Button
android:id="@+id/activity_with_toolbar_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/activity_main_change_locale_mid_test_button"
android:text="@string/main_screen_activity_with_toolbar_button" />

<TextView
android:id="@+id/activity_main_description_textview"
android:layout_width="wrap_content"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content">


<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:expandedTitleGravity="bottom|start"
app:expandedTitleMarginBottom="8dp"
app:expandedTitleMarginStart="24dp"
app:extraMultilineHeightEnabled="true"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
app:maxLines="99"
app:titleCollapseMode="fade">

<Space
android:id="@+id/expanded_size"
android:layout_width="match_parent"
android:layout_height="90dp" />


<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="60dp"
app:layout_collapseMode="pin"/>
</com.google.android.material.appbar.CollapsingToolbarLayout>

</com.google.android.material.appbar.AppBarLayout>

<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_marginBottom="40dp"
android:text="@string/screen_with_toolbar"
android:textAlignment="center"
android:textSize="48sp" />


</androidx.coordinatorlayout.widget.CoordinatorLayout>
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<string name="main_screen_device_button">Device пример</string>
<string name="main_screen_full_device_button">Full Window Device пример</string>
<string name="main_screen_change_language_mid_test_button">Сменить локаль во время теста</string>
<string name="main_screen_activity_with_toolbar_button">Пример с toolbar</string>

<!-- Auto scroll fallback screen -->
<string name="autoscroll_scrollview_with_padding_title">Auto scroll ScrollView with padding</string>
Expand Down
6 changes: 6 additions & 0 deletions samples/kaspresso-sample/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<string name="main_screen_device_button">Device Sample</string>
<string name="main_screen_full_device_button">Full Window Device Sample</string>
<string name="main_screen_change_language_mid_test_button">Change locale mid-test</string>
<string name="main_screen_activity_with_toolbar_button">Activity with toolbar</string>

<!-- Auto scroll fallback screen -->
<string name="autoscroll_scrollview_with_padding_title">Auto scroll ScrollView with padding</string>
Expand Down Expand Up @@ -92,6 +93,11 @@
<!-- Change locale fragment -->
<string name="change_locale_screen_text">For en locale the value is 123</string>

<!-- Activity with toolbar -->
<string name="screen_with_toolbar" translatable="false">Screen with toolbar</string>
<string name="toolbar_title" translatable="false">toolbar title</string>
<string name="toolbar_layout_title" translatable="false">toolbar layout title</string>

<string name="large_text" translatable="false">
"Material is the metaphor.\n\n"

Expand Down
5 changes: 5 additions & 0 deletions samples/kaspresso-sample/src/main/res/values/styles.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,9 @@
<item name="colorAccent">@color/colorAccent</item>
</style>

<style name="ToolbarTheme" parent="AppTheme">
<item name="android:windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>

</resources>

0 comments on commit 6939527

Please sign in to comment.