{ "output": "\nIMPORTANT: The file content has been truncated.\nStatus: Showing lines 115-160 of 742 total lines.\nAction: To read more of the file, you can use the 'start_line' and 'end_line' parameters in a subsequent 'read_file' call. For example, to read the next section of the file, use start_line: 161.\n\n--- FILE CONTENT (truncated) ---\n\n // -------------------------------------------------------------------------\n // Lifecycle\n // -------------------------------------------------------------------------\n\n @Before\n fun setUp() {\n step(\"setUp\", \"start\")\n val context = InstrumentationRegistry.getInstrumentation().targetContext\n tmpVaultDir =\n File(context.filesDir, \"smoke_vault\").apply {\n deleteRecursively()\n mkdirs()\n }\n fixtureUri = null\n\n // Activity is at SetupScreen (ClearAppStateRule cleared vault before launch).\n awaitText(composeTestRule.activity.getString(R.string.setup_title), timeoutMs = 15_000)\n }\n\n @After\n fun tearDown() {\n step(\"tearDown\", \"start\")\n if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n deleteDownloadsFixture()\n }\n tmpVaultDir.deleteRecursively()\n val app = composeTestRule.activity.application as ServiceBookApplication\n CrashReporter.clear(app)\n runBlocking { app.preferences.setVaultUri(null) }\n }\n\n // -------------------------------------------------------------------------\n // Logging / wait helpers\n // -------------------------------------------------------------------------\n\n /** Logs a step marker; failures interleaved with these in logcat are easier to attribute. */\n private fun step(\n scenario: String,\n message: String,\n ) = Log.d(TAG, \"$scenario: $message\")\n\n private fun awaitText(\n text: String,\n substring: Boolean = false,\n timeoutMs: Long = 10_000," }