2222import android .content .SharedPreferences ;
2323import android .graphics .drawable .Drawable ;
2424import android .os .Bundle ;
25- import de .yaacc .util .YaaccLogger ;
2625import android .view .LayoutInflater ;
2726import android .view .View ;
2827import android .view .ViewGroup ;
5352import de .yaacc .util .FormatHelper ;
5453import de .yaacc .util .ShutdownTimerListener ;
5554import de .yaacc .util .ThemeHelper ;
55+ import de .yaacc .util .YaaccLogger ;
5656
5757/**
5858 * Activity for browsing devices and folders. Represents the entrypoint for the whole application.
@@ -81,7 +81,7 @@ private SharedPreferences getPreferences() {
8181 @ Override
8282 public void onCreate (Bundle savedInstanceState ) {
8383 super .onCreate (savedInstanceState );
84-
84+
8585 // Register callback for MediaProjection stop events
8686 if (android .os .Build .VERSION .SDK_INT >= android .os .Build .VERSION_CODES .Q ) {
8787 de .yaacc .upnp .server .media .MediaProjectionHelper .setStopCallback (() -> {
@@ -90,17 +90,17 @@ public void onCreate(Bundle savedInstanceState) {
9090 getActivity ().runOnUiThread (() -> {
9191 android .content .SharedPreferences prefs = androidx .preference .PreferenceManager .getDefaultSharedPreferences (requireContext ());
9292 prefs .edit ()
93- .putBoolean (getString (R .string .settings_local_server_serve_system_audio_chkbx ), false )
94- .putBoolean (getString (R .string .settings_local_server_serve_screen_cast_chkbx ), false )
95- .apply ();
96-
93+ .putBoolean (getString (R .string .settings_local_server_serve_system_audio_chkbx ), false )
94+ .putBoolean (getString (R .string .settings_local_server_serve_screen_cast_chkbx ), false )
95+ .apply ();
96+
9797 de .yaacc .browser .BrowseDeviceAdapter .setAudioStreaming (false );
9898 de .yaacc .browser .BrowseDeviceAdapter .setVideoStreaming (false );
99-
99+
100100 if (bDeviceAdapter != null ) {
101101 bDeviceAdapter .notifyDataSetChanged ();
102102 }
103-
103+
104104 YaaccLogger .i (getClass ().getName (), "Streaming disabled - MediaProjection stopped" );
105105 });
106106 }
@@ -192,6 +192,10 @@ public void receiverDeviceAdded(Device<?, ?, ?> device) {
192192 @ Override
193193 public void onResume () {
194194 super .onResume ();
195+ // Trigger UPnP discovery to find new devices
196+ if (upnpClient != null && upnpClient .isInitialized ()) {
197+ upnpClient .searchDevices ();
198+ }
195199 //refresh device list
196200 Thread thread = new Thread (this ::populateDeviceList );
197201 thread .start ();
@@ -345,21 +349,21 @@ public void setShutdownTimerRemainingTime(String s) {
345349 public void onTick (long millisUntilFinished ) {
346350 setShutdownTimerRemainingTime (FormatHelper .parseMillisToTimeStringTo (millisUntilFinished ));
347351 }
348-
352+
349353 @ Override
350354 public void onActivityResult (int requestCode , int resultCode , android .content .Intent data ) {
351355 super .onActivityResult (requestCode , resultCode , data );
352-
356+
353357 if (android .os .Build .VERSION .SDK_INT >= android .os .Build .VERSION_CODES .Q &&
354- requestCode == de .yaacc .upnp .server .media .MediaProjectionHelper .REQUEST_CODE_MEDIA_PROJECTION ) {
355-
358+ requestCode == de .yaacc .upnp .server .media .MediaProjectionHelper .REQUEST_CODE_MEDIA_PROJECTION ) {
359+
356360 if (de .yaacc .upnp .server .media .MediaProjectionHelper .handlePermissionResult (requireContext (), resultCode , data )) {
357361 // Permission granted - enable only the button that requested it
358362 YaaccLogger .i (getClass ().getName (), "MediaProjection permission granted" );
359-
363+
360364 android .content .SharedPreferences prefs = androidx .preference .PreferenceManager .getDefaultSharedPreferences (requireContext ());
361365 android .content .SharedPreferences .Editor editor = prefs .edit ();
362-
366+
363367 // Enable only the button that requested permission
364368 if (de .yaacc .browser .BrowseDeviceAdapter .isPendingAudioRequest ()) {
365369 editor .putBoolean (getString (R .string .settings_local_server_serve_system_audio_chkbx ), true );
@@ -370,26 +374,26 @@ public void onActivityResult(int requestCode, int resultCode, android.content.In
370374 de .yaacc .browser .BrowseDeviceAdapter .setVideoStreaming (true );
371375 }
372376 editor .apply ();
373-
377+
374378 // Clear pending flags
375379 de .yaacc .browser .BrowseDeviceAdapter .clearPendingRequests ();
376-
380+
377381 // Refresh the adapter to update button states
378382 if (bDeviceAdapter != null ) {
379383 bDeviceAdapter .notifyDataSetChanged ();
380384 }
381385 } else {
382386 // Permission denied - disable both and clear pending
383387 YaaccLogger .w (getClass ().getName (), "MediaProjection permission denied" );
384-
388+
385389 de .yaacc .browser .BrowseDeviceAdapter .clearPendingRequests ();
386-
390+
387391 android .content .SharedPreferences prefs = androidx .preference .PreferenceManager .getDefaultSharedPreferences (requireContext ());
388392 prefs .edit ()
389- .putBoolean (getString (R .string .settings_local_server_serve_system_audio_chkbx ), false )
390- .putBoolean (getString (R .string .settings_local_server_serve_screen_cast_chkbx ), false )
391- .apply ();
392-
393+ .putBoolean (getString (R .string .settings_local_server_serve_system_audio_chkbx ), false )
394+ .putBoolean (getString (R .string .settings_local_server_serve_screen_cast_chkbx ), false )
395+ .apply ();
396+
393397 // Update adapter state
394398 if (bDeviceAdapter != null ) {
395399 de .yaacc .browser .BrowseDeviceAdapter .setAudioStreaming (false );
0 commit comments