diff --git a/examples/virtual-device-app/android/App/core/common/src/main/java/com/matter/virtual/device/app/core/common/DeepLink.kt b/examples/virtual-device-app/android/App/core/common/src/main/java/com/matter/virtual/device/app/core/common/DeepLink.kt
index 1a84f4a6840cd2..78e6649de44b43 100644
--- a/examples/virtual-device-app/android/App/core/common/src/main/java/com/matter/virtual/device/app/core/common/DeepLink.kt
+++ b/examples/virtual-device-app/android/App/core/common/src/main/java/com/matter/virtual/device/app/core/common/DeepLink.kt
@@ -18,4 +18,12 @@ object DeepLink {
)
.build()
}
+
+ fun getDeepLinkRequestForLoadingFragment(setting: String): NavDeepLinkRequest {
+ return NavDeepLinkRequest.Builder.fromUri(
+ "android-app://com.matter.virtual.device.app.feature.main/loadingFragment/${setting}"
+ .toUri()
+ )
+ .build()
+ }
}
diff --git a/examples/virtual-device-app/android/App/feature/main/src/main/java/com/matter/virtual/device/app/feature/main/LoadingFragment.kt b/examples/virtual-device-app/android/App/feature/main/src/main/java/com/matter/virtual/device/app/feature/main/LoadingFragment.kt
new file mode 100644
index 00000000000000..8c81bd26429433
--- /dev/null
+++ b/examples/virtual-device-app/android/App/feature/main/src/main/java/com/matter/virtual/device/app/feature/main/LoadingFragment.kt
@@ -0,0 +1,95 @@
+package com.matter.virtual.device.app.feature.main
+
+import android.content.Context
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.activity.OnBackPressedCallback
+import androidx.appcompat.app.AppCompatActivity
+import androidx.databinding.DataBindingUtil
+import androidx.fragment.app.Fragment
+import androidx.navigation.fragment.findNavController
+import androidx.navigation.fragment.navArgs
+import com.matter.virtual.device.app.core.common.MatterSettings
+import com.matter.virtual.device.app.feature.main.databinding.FragmentLoadingBinding
+import dagger.hilt.android.AndroidEntryPoint
+import kotlin.math.abs
+import kotlinx.serialization.ExperimentalSerializationApi
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
+import timber.log.Timber
+
+@AndroidEntryPoint
+class LoadingFragment : Fragment() {
+
+ private lateinit var binding: FragmentLoadingBinding
+
+ private lateinit var matterSettings: MatterSettings
+ private lateinit var onBackPressedCallback: OnBackPressedCallback
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ Timber.d("Hit")
+ binding = DataBindingUtil.inflate(inflater, R.layout.fragment_loading, container, false)
+ binding.lifecycleOwner = viewLifecycleOwner
+
+ return binding.root
+ }
+
+ @OptIn(ExperimentalSerializationApi::class)
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ Timber.d("Hit")
+ super.onViewCreated(view, savedInstanceState)
+
+ (activity as AppCompatActivity).setSupportActionBar(binding.toolbar)
+ (activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(true)
+
+ binding.appBarLayout.addOnOffsetChangedListener { appBarLayout, verticalOffset ->
+ var ratio = 0F
+ if (abs(verticalOffset) != 0) {
+ ratio = abs(verticalOffset).toFloat() / appBarLayout.totalScrollRange.toFloat()
+ }
+
+ binding.collapseTitle.alpha = 1f - ratio * 2f + 0.1f
+ binding.toolbarTitle.alpha = (ratio - 0.5f) * 2f + 0.1f
+ }
+
+ val args: LoadingFragmentArgs by navArgs()
+ this.matterSettings = Json.decodeFromString(args.setting)
+ }
+
+ override fun onResume() {
+ Timber.d("Hit")
+ super.onResume()
+ }
+
+ override fun onAttach(context: Context) {
+ Timber.d("Hit")
+ super.onAttach(context)
+
+ onBackPressedCallback =
+ object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ Timber.d("handleOnBackPressed()")
+ findNavController().popBackStack()
+ }
+ }
+
+ requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
+ }
+
+ override fun onDetach() {
+ Timber.d("Hit")
+ super.onDetach()
+ onBackPressedCallback.remove()
+ }
+
+ override fun onDestroy() {
+ Timber.d("Hit")
+ super.onDestroy()
+ }
+}
diff --git a/examples/virtual-device-app/android/App/feature/main/src/main/res/layout/fragment_loading.xml b/examples/virtual-device-app/android/App/feature/main/src/main/res/layout/fragment_loading.xml
new file mode 100644
index 00000000000000..852207c49e1b6f
--- /dev/null
+++ b/examples/virtual-device-app/android/App/feature/main/src/main/res/layout/fragment_loading.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/virtual-device-app/android/App/feature/main/src/main/res/navigation/main_nav_graph.xml b/examples/virtual-device-app/android/App/feature/main/src/main/res/navigation/main_nav_graph.xml
index c3f66c3f7c5bbe..81cbc65fbec062 100644
--- a/examples/virtual-device-app/android/App/feature/main/src/main/res/navigation/main_nav_graph.xml
+++ b/examples/virtual-device-app/android/App/feature/main/src/main/res/navigation/main_nav_graph.xml
@@ -10,4 +10,15 @@
android:name="com.matter.virtual.device.app.feature.main.MainFragment"
android:label="MainFragment"
tools:layout="@layout/fragment_main" />
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/virtual-device-app/android/App/feature/main/src/main/res/values/strings.xml b/examples/virtual-device-app/android/App/feature/main/src/main/res/values/strings.xml
index 22caae70477e41..23e5916e74f482 100644
--- a/examples/virtual-device-app/android/App/feature/main/src/main/res/values/strings.xml
+++ b/examples/virtual-device-app/android/App/feature/main/src/main/res/values/strings.xml
@@ -1,4 +1,6 @@
Matter Virtual Device
+ Loading
+ Commissioning in process.
\ No newline at end of file