Uygulamanızı katlanabilir cihazlarda test etme

Katlanabilir cihazlar, özel testler gerektiren benzersiz özelliklere ve işlevlere sahiptir. Uygulamanızı küçük ve büyük ekranlı katlanabilir cihazlarda, katlanmış ve açık olarak, dikey ve yatay yönlerde, masa üstünde ve kitap duruşlarında ve çoklu pencere modunda test edin. Daha fazla bilgi için Büyük ekran uygulama kalitesi yönergelerine bakın.

FoldingFeature

Jetpack WindowManager kitaplığı, katlanabilir cihazların duruşu değiştiğinde uygulamanızı bilgilendirir. Böylece uygulamanın düzenini değiştirebilirsiniz.

window-testing yapısı, testlerde bir FoldingFeature simüle etmek için özel bir WindowInfoLayout yayınlamanıza olanak tanıyan WindowLayoutInfoPublisherRule JUnit4 kuralını içerir.

Bir katlama özelliğinin durumunu test etmek için önce bir test sınıfı ve test kurallarını tanımlayın:

Kotlin

import androidx.window.layout.FoldingFeature.Orientation.Companion.HORIZONTAL
import androidx.window.layout.FoldingFeature.Orientation.Companion.VERTICAL
import androidx.window.layout.FoldingFeature.State.Companion.FLAT
import androidx.window.layout.FoldingFeature.State.Companion.HALF_OPENED
import androidx.window.testing.layout.FoldingFeature
import androidx.window.testing.layout.TestWindowLayoutInfo
import androidx.window.testing.layout.WindowLayoutInfoPublisherRule

@RunWith(AndroidJUnit4::class)
class DisplayFeaturesActivityTest {
    private val activityRule = ActivityScenarioRule(DisplayFeaturesActivity::class.java)
    private val publisherRule = WindowLayoutInfoPublisherRule()

    @get:Rule
    val testRule: TestRule

    init {
        testRule = RuleChain.outerRule(publisherRule).around(activityRule)
    }

    @Test myTest() {
       // TODO
    }
}

Java

import static androidx.window.layout.FoldingFeature.Orientation.HORIZONTAL;
import static androidx.window.layout.FoldingFeature.Orientation.VERTICAL;
import static androidx.window.layout.FoldingFeature.State.FLAT;
import static androidx.window.layout.FoldingFeature.State.HALF_OPENED;
import static androidx.window.testing.layout.DisplayFeatureTesting.createFoldingFeature;
import static androidx.window.testing.layout.WindowLayoutInfoTesting.createWindowLayoutInfo;
import androidx.window.layout.FoldingFeature;
import androidx.window.layout.WindowLayoutInfo;
import androidx.window.testing.layout.WindowLayoutInfoPublisherRule;

@RunWith(AndroidJUnit4.class)
public class DisplayFeaturesActivityJavaTest {
    private WindowLayoutInfoPublisherRule publisherRule = new WindowLayoutInfoPublisherRule();

    @Rule public TestRule testRule;

    public DisplayFeaturesActivityJavaTest() {
        testRule = RuleChain.outerRule(publisherRule).around(activityRule);
    };

     @Test
     public void myTest() {
         // TODO
     }
}

Ardından, ortalanmış yatay katlanabilirliğin sıfır olduğu yarı açık bir katlanabilir ekran gibi bir katlama özelliğini simüle edebilirsiniz:

Kotlin

val feature = FoldingFeature(
                  activity = activity,
                  state = HALF_OPENED,
                  orientation = HORIZONTAL)

val expected = TestWindowLayoutInfo(listOf(feature))

Java

FoldingFeature feature = createFoldingFeature(
                             activity,
                             -1,
                             0,
                             HALF_OPENED,
                             HORIZONTAL);

WindowLayoutInfo expected = createWindowLayoutInfo(
                                Collections.singletonList(feature)
                            );

Ardından, özel WindowLayoutInfo yayınlamak için WindowLayoutInfoPublisherRule öğesini kullanın:

Kotlin

@Test
myTest() {
    ...
    publisherRule.overrideWindowLayoutInfo(expected)
    ...
}

Java

@Test
public void myTest() {
    ...
    publisherRule.overrideWindowLayoutInfo(expected);
    ...
}

Son olarak, mevcut Espresso eşleştiricileri kullanarak etkinlik düzeninin beklendiği gibi çalışıp çalışmadığını kontrol edin.

Aşağıdaki örnekte, ekranın ortasındaki HALF_OPENED dikey menteşesi olan bir FoldingFeature simüle edilir, ardından düzenin beklenen şekilde olup olmadığını kontrol etmek için bir eşleştirici kullanır:

Kotlin

@Test
fun testDeviceOpen_Vertical() {
    activityRule.scenario.onActivity { activity ->
        val feature = FoldingFeature(
                          activity = activity,
                          state = HALF_OPENED,
                          orientation = VERTICAL)
        val expected = TestWindowLayoutInfo(listOf(feature))
        publisherRule.overrideWindowLayoutInfo(expected)
    }

    // Checks that start_layout is on the left of end_layout with a vertical folding feature.
    onView(withId(R.id.start_layout))
        .check(isCompletelyLeftOf(withId(R.id.end_layout)))
}

Java

@Test
public void testDeviceOpen_Vertical() {
    activityRule
        .getScenario()
        .onActivity(
            activity -> {
                FoldingFeature feature = createFoldingFeature(
                                             activity,
                                             -1,
                                             0,
                                             HALF_OPENED,
                                             VERTICAL);

                WindowLayoutInfo expected = createWindowLayoutInfo(
                                                Collections.singletonList(feature)
                                            );

                publisherRule.overrideWindowLayoutInfo(expected);
            });

    // Checks that start_layout is on the left of end_layout with a vertical folding feature.
    onView(withId(R.id.start_layout))
        .check(isCompletelyLeftOf(withId(R.id.end_layout)));
}

Yapılandırma değişiklikleri

Uygulamanız, yapılandırma değişikliklerini onConfigurationChanged() geri çağırma yöntemiyle programatik olarak işliyorsa uygulamanın, yapılandırma değişikliklerine (özellikle de dikey ve yatay yönler arasında cihaz rotasyonu) hızlı yanıt verdiğinden emin olun.

Uygulamanıza yön ve görüntü boyutu değişikliklerinin bildirilmesi için activity:configChanges manifest öğesinde aşağıdaki yapılandırma ayarlarını belirtin:

android:configChanges="orientation|screenLayout|screenSize|smallestScreenSize"

Ek kaynaklar