diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index e139de488..4c45e3cca 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -1,6 +1,7 @@ package protect.card_locker; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.robolectric.Shadows.shadowOf; @@ -22,6 +23,7 @@ import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; import android.widget.TextView; import androidx.core.widget.TextViewCompat; import com.google.zxing.BarcodeFormat; @@ -35,7 +37,6 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.android.controller.ActivityController; import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowPackageManager; import org.robolectric.shadows.ShadowActivity; import org.robolectric.shadows.ShadowLog; @@ -686,6 +687,69 @@ public class LoyaltyCardViewActivityTest } } + @Test + public void checkBarcodeFullscreenWorkflow() + { + ActivityController activityController = createActivityWithLoyaltyCard(false); + + Activity activity = (Activity)activityController.get(); + DBHelper db = new DBHelper(activity); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE); + + activityController.start(); + activityController.visible(); + activityController.resume(); + + assertEquals(false, activity.isFinishing()); + + ImageView barcodeImage = activity.findViewById(R.id.barcode); + View collapsingToolbarLayout = activity.findViewById(R.id.collapsingToolbarLayout); + + // Android should not be in fullscreen mode + int uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + + // Elements should be visible + assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility()); + + // Click barcode to toggle fullscreen + barcodeImage.performClick(); + + // Android should be in fullscreen mode + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + + // Elements should not be visible + assertEquals(View.GONE, collapsingToolbarLayout.getVisibility()); + + // Clicking barcode again should deactivate fullscreen mode + barcodeImage.performClick(); + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility()); + + // Another click back to fullscreen + barcodeImage.performClick(); + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + assertEquals(View.GONE, collapsingToolbarLayout.getVisibility()); + + // In full screen mode, back button should disable fullscreen + activity.onBackPressed(); + uiOptions = activity.getWindow().getDecorView().getSystemUiVisibility(); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, uiOptions); + assertNotEquals(uiOptions | View.SYSTEM_UI_FLAG_FULLSCREEN, uiOptions); + assertEquals(View.VISIBLE, collapsingToolbarLayout.getVisibility()); + + // Pressing back when not in full screen should finish activity + activity.onBackPressed(); + assertEquals(true, activity.isFinishing()); + } + @Test public void importCard() {