Changeset View
Changeset View
Standalone View
Standalone View
src/org/kde/kdeconnect/Plugins/MprisPlugin/MprisActivity.java
Show First 20 Lines • Show All 71 Lines • ▼ Show 20 Line(s) | 60 | private static String milisToProgress(long milis) { | |||
---|---|---|---|---|---|
72 | if (seconds < 10) | 72 | if (seconds < 10) | ||
73 | text.append('0'); // needed to show length properly (eg 4:05 instead of 4:5) | 73 | text.append('0'); // needed to show length properly (eg 4:05 instead of 4:5) | ||
74 | text.append(seconds); | 74 | text.append(seconds); | ||
75 | return text.toString(); | 75 | return text.toString(); | ||
76 | } | 76 | } | ||
77 | 77 | | |||
78 | protected void connectToPlugin(final String targetPlayerName) { | 78 | protected void connectToPlugin(final String targetPlayerName) { | ||
79 | 79 | | |||
80 | BackgroundService.RunCommand(this, new BackgroundService.InstanceCallback() { | 80 | BackgroundService.RunCommand(this, service -> { | ||
81 | @Override | | |||
82 | public void onServiceStart(BackgroundService service) { | | |||
83 | 81 | | |||
84 | final Device device = service.getDevice(deviceId); | 82 | final Device device = service.getDevice(deviceId); | ||
85 | final MprisPlugin mpris = device.getPlugin(MprisPlugin.class); | 83 | final MprisPlugin mpris = device.getPlugin(MprisPlugin.class); | ||
86 | if (mpris == null) { | 84 | if (mpris == null) { | ||
87 | Log.e("MprisActivity", "device has no mpris plugin!"); | 85 | Log.e("MprisActivity", "device has no mpris plugin!"); | ||
88 | return; | 86 | return; | ||
89 | } | 87 | } | ||
90 | targetPlayer = mpris.getPlayerStatus(targetPlayerName); | 88 | targetPlayer = mpris.getPlayerStatus(targetPlayerName); | ||
91 | 89 | | |||
92 | mpris.setPlayerStatusUpdatedHandler("activity", new Handler() { | 90 | mpris.setPlayerStatusUpdatedHandler("activity", new Handler() { | ||
93 | @Override | 91 | @Override | ||
94 | public void handleMessage(Message msg) { | 92 | public void handleMessage(Message msg) { | ||
95 | runOnUiThread(new Runnable() { | 93 | runOnUiThread(() -> updatePlayerStatus(mpris)); | ||
96 | @Override | | |||
97 | public void run() { | | |||
98 | updatePlayerStatus(mpris); | | |||
99 | } | | |||
100 | }); | | |||
101 | } | 94 | } | ||
102 | }); | 95 | }); | ||
103 | 96 | | |||
104 | mpris.setPlayerListUpdatedHandler("activity", new Handler() { | 97 | mpris.setPlayerListUpdatedHandler("activity", new Handler() { | ||
105 | @Override | 98 | @Override | ||
106 | public void handleMessage(Message msg) { | 99 | public void handleMessage(Message msg) { | ||
107 | final List<String> playerList = mpris.getPlayerList(); | 100 | final List<String> playerList = mpris.getPlayerList(); | ||
108 | final ArrayAdapter<String> adapter = new ArrayAdapter<>(MprisActivity.this, | 101 | final ArrayAdapter<String> adapter = new ArrayAdapter<>(MprisActivity.this, | ||
109 | android.R.layout.simple_spinner_item, | 102 | android.R.layout.simple_spinner_item, | ||
110 | playerList.toArray(new String[playerList.size()]) | 103 | playerList.toArray(new String[playerList.size()]) | ||
111 | ); | 104 | ); | ||
112 | 105 | | |||
113 | adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); | 106 | adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); | ||
114 | runOnUiThread(new Runnable() { | 107 | runOnUiThread(() -> { | ||
115 | @Override | | |||
116 | public void run() { | | |||
117 | Spinner spinner = (Spinner) findViewById(R.id.player_spinner); | 108 | Spinner spinner = (Spinner) findViewById(R.id.player_spinner); | ||
118 | //String prevPlayer = (String)spinner.getSelectedItem(); | 109 | //String prevPlayer = (String)spinner.getSelectedItem(); | ||
119 | spinner.setAdapter(adapter); | 110 | spinner.setAdapter(adapter); | ||
120 | 111 | | |||
121 | if (playerList.isEmpty()) { | 112 | if (playerList.isEmpty()) { | ||
122 | findViewById(R.id.no_players).setVisibility(View.VISIBLE); | 113 | findViewById(R.id.no_players).setVisibility(View.VISIBLE); | ||
123 | spinner.setVisibility(View.GONE); | 114 | spinner.setVisibility(View.GONE); | ||
124 | ((TextView) findViewById(R.id.now_playing_textview)).setText(""); | 115 | ((TextView) findViewById(R.id.now_playing_textview)).setText(""); | ||
Show All 40 Lines | 150 | if (targetPlayer != null) { | |||
165 | } | 156 | } | ||
166 | } | 157 | } | ||
167 | //If no player selected, select the first one (if any) | 158 | //If no player selected, select the first one (if any) | ||
168 | if (targetPlayer == null && !playerList.isEmpty()) { | 159 | if (targetPlayer == null && !playerList.isEmpty()) { | ||
169 | targetPlayer = mpris.getPlayerStatus(playerList.get(0)); | 160 | targetPlayer = mpris.getPlayerStatus(playerList.get(0)); | ||
170 | spinner.setSelection(0); | 161 | spinner.setSelection(0); | ||
171 | } | 162 | } | ||
172 | updatePlayerStatus(mpris); | 163 | updatePlayerStatus(mpris); | ||
173 | } | | |||
174 | }); | 164 | }); | ||
175 | } | 165 | } | ||
176 | }); | 166 | }); | ||
177 | 167 | | |||
178 | } | | |||
179 | }); | 168 | }); | ||
180 | 169 | | |||
181 | } | 170 | } | ||
182 | 171 | | |||
183 | private final BaseLinkProvider.ConnectionReceiver connectionReceiver = new BaseLinkProvider.ConnectionReceiver() { | 172 | private final BaseLinkProvider.ConnectionReceiver connectionReceiver = new BaseLinkProvider.ConnectionReceiver() { | ||
184 | @Override | 173 | @Override | ||
185 | public void onConnectionReceived(NetworkPacket identityPacket, BaseLink link) { | 174 | public void onConnectionReceived(NetworkPacket identityPacket, BaseLink link) { | ||
186 | connectToPlugin(null); | 175 | connectToPlugin(null); | ||
187 | } | 176 | } | ||
188 | 177 | | |||
189 | @Override | 178 | @Override | ||
190 | public void onConnectionLost(BaseLink link) { | 179 | public void onConnectionLost(BaseLink link) { | ||
191 | 180 | | |||
192 | } | 181 | } | ||
193 | }; | 182 | }; | ||
194 | 183 | | |||
195 | @Override | 184 | @Override | ||
196 | protected void onDestroy() { | 185 | protected void onDestroy() { | ||
197 | super.onDestroy(); | 186 | super.onDestroy(); | ||
198 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | 187 | BackgroundService.RunCommand(MprisActivity.this, service -> service.removeConnectionListener(connectionReceiver)); | ||
199 | @Override | | |||
200 | public void onServiceStart(BackgroundService service) { | | |||
201 | service.removeConnectionListener(connectionReceiver); | | |||
202 | } | | |||
203 | }); | | |||
204 | } | 188 | } | ||
205 | 189 | | |||
206 | private void updatePlayerStatus(MprisPlugin mpris) { | 190 | private void updatePlayerStatus(MprisPlugin mpris) { | ||
207 | MprisPlugin.MprisPlayer playerStatus = targetPlayer; | 191 | MprisPlugin.MprisPlayer playerStatus = targetPlayer; | ||
208 | if (playerStatus == null) { | 192 | if (playerStatus == null) { | ||
209 | //No player with that name found, just display "empty" data | 193 | //No player with that name found, just display "empty" data | ||
210 | playerStatus = mpris.getEmptyPlayer(); | 194 | playerStatus = mpris.getEmptyPlayer(); | ||
211 | } | 195 | } | ||
▲ Show 20 Lines • Show All 108 Lines • ▼ Show 20 Line(s) | 299 | protected void onCreate(Bundle savedInstanceState) { | |||
320 | getIntent().removeExtra("player"); | 304 | getIntent().removeExtra("player"); | ||
321 | deviceId = getIntent().getStringExtra("deviceId"); | 305 | deviceId = getIntent().getStringExtra("deviceId"); | ||
322 | 306 | | |||
323 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); | 307 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); | ||
324 | String interval_time_str = prefs.getString(getString(R.string.mpris_time_key), | 308 | String interval_time_str = prefs.getString(getString(R.string.mpris_time_key), | ||
325 | getString(R.string.mpris_time_default)); | 309 | getString(R.string.mpris_time_default)); | ||
326 | final int interval_time = Integer.parseInt(interval_time_str); | 310 | final int interval_time = Integer.parseInt(interval_time_str); | ||
327 | 311 | | |||
328 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | 312 | BackgroundService.RunCommand(MprisActivity.this, service -> service.addConnectionListener(connectionReceiver)); | ||
329 | @Override | | |||
330 | public void onServiceStart(BackgroundService service) { | | |||
331 | service.addConnectionListener(connectionReceiver); | | |||
332 | } | | |||
333 | }); | | |||
334 | connectToPlugin(targetPlayerName); | 313 | connectToPlugin(targetPlayerName); | ||
335 | 314 | | |||
336 | findViewById(R.id.play_button).setOnClickListener(new View.OnClickListener() { | 315 | findViewById(R.id.play_button).setOnClickListener(view -> BackgroundService.RunCommand(MprisActivity.this, service -> { | ||
337 | @Override | | |||
338 | public void onClick(View view) { | | |||
339 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | | |||
340 | @Override | | |||
341 | public void onServiceStart(BackgroundService service) { | | |||
342 | if (targetPlayer == null) return; | 316 | if (targetPlayer == null) return; | ||
343 | targetPlayer.playPause(); | 317 | targetPlayer.playPause(); | ||
344 | } | 318 | })); | ||
345 | }); | | |||
346 | } | | |||
347 | }); | | |||
348 | 319 | | |||
349 | findViewById(R.id.prev_button).setOnClickListener(new View.OnClickListener() { | 320 | findViewById(R.id.prev_button).setOnClickListener(view -> BackgroundService.RunCommand(MprisActivity.this, service -> { | ||
350 | @Override | | |||
351 | public void onClick(View view) { | | |||
352 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | | |||
353 | @Override | | |||
354 | public void onServiceStart(BackgroundService service) { | | |||
355 | if (targetPlayer == null) return; | 321 | if (targetPlayer == null) return; | ||
356 | targetPlayer.previous(); | 322 | targetPlayer.previous(); | ||
357 | } | 323 | })); | ||
358 | }); | | |||
359 | } | | |||
360 | }); | | |||
361 | 324 | | |||
362 | findViewById(R.id.rew_button).setOnClickListener(new View.OnClickListener() { | 325 | findViewById(R.id.rew_button).setOnClickListener(view -> BackgroundService.RunCommand(MprisActivity.this, service -> { | ||
363 | @Override | | |||
364 | public void onClick(View view) { | | |||
365 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | | |||
366 | @Override | | |||
367 | public void onServiceStart(BackgroundService service) { | | |||
368 | if (targetPlayer == null) return; | 326 | if (targetPlayer == null) return; | ||
369 | targetPlayer.seek(interval_time * -1); | 327 | targetPlayer.seek(interval_time * -1); | ||
370 | } | 328 | })); | ||
371 | }); | | |||
372 | } | | |||
373 | }); | | |||
374 | 329 | | |||
375 | findViewById(R.id.ff_button).setOnClickListener(new View.OnClickListener() { | 330 | findViewById(R.id.ff_button).setOnClickListener(view -> BackgroundService.RunCommand(MprisActivity.this, service -> { | ||
376 | @Override | | |||
377 | public void onClick(View view) { | | |||
378 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | | |||
379 | @Override | | |||
380 | public void onServiceStart(BackgroundService service) { | | |||
381 | if (targetPlayer == null) return; | 331 | if (targetPlayer == null) return; | ||
382 | targetPlayer.seek(interval_time); | 332 | targetPlayer.seek(interval_time); | ||
383 | } | 333 | })); | ||
384 | }); | | |||
385 | } | | |||
386 | }); | | |||
387 | 334 | | |||
388 | findViewById(R.id.next_button).setOnClickListener(new View.OnClickListener() { | 335 | findViewById(R.id.next_button).setOnClickListener(view -> BackgroundService.RunCommand(MprisActivity.this, service -> { | ||
389 | @Override | | |||
390 | public void onClick(View view) { | | |||
391 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | | |||
392 | @Override | | |||
393 | public void onServiceStart(BackgroundService service) { | | |||
394 | if (targetPlayer == null) return; | 336 | if (targetPlayer == null) return; | ||
395 | targetPlayer.next(); | 337 | targetPlayer.next(); | ||
396 | } | 338 | })); | ||
397 | }); | | |||
398 | } | | |||
399 | }); | | |||
400 | 339 | | |||
401 | ((SeekBar) findViewById(R.id.volume_seek)).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { | 340 | ((SeekBar) findViewById(R.id.volume_seek)).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { | ||
402 | @Override | 341 | @Override | ||
403 | public void onProgressChanged(SeekBar seekBar, int i, boolean b) { | 342 | public void onProgressChanged(SeekBar seekBar, int i, boolean b) { | ||
404 | } | 343 | } | ||
405 | 344 | | |||
406 | @Override | 345 | @Override | ||
407 | public void onStartTrackingTouch(SeekBar seekBar) { | 346 | public void onStartTrackingTouch(SeekBar seekBar) { | ||
408 | } | 347 | } | ||
409 | 348 | | |||
410 | @Override | 349 | @Override | ||
411 | public void onStopTrackingTouch(final SeekBar seekBar) { | 350 | public void onStopTrackingTouch(final SeekBar seekBar) { | ||
412 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | 351 | BackgroundService.RunCommand(MprisActivity.this, service -> { | ||
413 | @Override | | |||
414 | public void onServiceStart(BackgroundService service) { | | |||
415 | if (targetPlayer == null) return; | 352 | if (targetPlayer == null) return; | ||
416 | targetPlayer.setVolume(seekBar.getProgress()); | 353 | targetPlayer.setVolume(seekBar.getProgress()); | ||
417 | } | | |||
418 | }); | 354 | }); | ||
419 | } | 355 | } | ||
420 | 356 | | |||
421 | }); | 357 | }); | ||
422 | 358 | | |||
423 | positionSeekUpdateRunnable = new Runnable() { | 359 | positionSeekUpdateRunnable = () -> { | ||
424 | @Override | | |||
425 | public void run() { | | |||
426 | final SeekBar positionSeek = (SeekBar) findViewById(R.id.positionSeek); | 360 | final SeekBar positionSeek = (SeekBar) findViewById(R.id.positionSeek); | ||
427 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | 361 | BackgroundService.RunCommand(MprisActivity.this, service -> { | ||
428 | @Override | | |||
429 | public void onServiceStart(BackgroundService service) { | | |||
430 | if (targetPlayer != null) { | 362 | if (targetPlayer != null) { | ||
431 | positionSeek.setProgress((int) (targetPlayer.getPosition())); | 363 | positionSeek.setProgress((int) (targetPlayer.getPosition())); | ||
432 | } | 364 | } | ||
433 | positionSeekUpdateHandler.removeCallbacks(positionSeekUpdateRunnable); | 365 | positionSeekUpdateHandler.removeCallbacks(positionSeekUpdateRunnable); | ||
434 | positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 1000); | 366 | positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 1000); | ||
435 | } | | |||
436 | }); | 367 | }); | ||
437 | } | | |||
438 | | ||||
439 | }; | 368 | }; | ||
440 | positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200); | 369 | positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200); | ||
441 | 370 | | |||
442 | ((SeekBar) findViewById(R.id.positionSeek)).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { | 371 | ((SeekBar) findViewById(R.id.positionSeek)).setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { | ||
443 | @Override | 372 | @Override | ||
444 | public void onProgressChanged(SeekBar seekBar, int progress, boolean byUser) { | 373 | public void onProgressChanged(SeekBar seekBar, int progress, boolean byUser) { | ||
445 | ((TextView) findViewById(R.id.progress_textview)).setText(milisToProgress(progress)); | 374 | ((TextView) findViewById(R.id.progress_textview)).setText(milisToProgress(progress)); | ||
446 | } | 375 | } | ||
447 | 376 | | |||
448 | @Override | 377 | @Override | ||
449 | public void onStartTrackingTouch(SeekBar seekBar) { | 378 | public void onStartTrackingTouch(SeekBar seekBar) { | ||
450 | positionSeekUpdateHandler.removeCallbacks(positionSeekUpdateRunnable); | 379 | positionSeekUpdateHandler.removeCallbacks(positionSeekUpdateRunnable); | ||
451 | } | 380 | } | ||
452 | 381 | | |||
453 | @Override | 382 | @Override | ||
454 | public void onStopTrackingTouch(final SeekBar seekBar) { | 383 | public void onStopTrackingTouch(final SeekBar seekBar) { | ||
455 | BackgroundService.RunCommand(MprisActivity.this, new BackgroundService.InstanceCallback() { | 384 | BackgroundService.RunCommand(MprisActivity.this, service -> { | ||
456 | @Override | | |||
457 | public void onServiceStart(BackgroundService service) { | | |||
458 | if (targetPlayer != null) { | 385 | if (targetPlayer != null) { | ||
459 | targetPlayer.setPosition(seekBar.getProgress()); | 386 | targetPlayer.setPosition(seekBar.getProgress()); | ||
460 | } | 387 | } | ||
461 | positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200); | 388 | positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200); | ||
462 | } | | |||
463 | }); | 389 | }); | ||
464 | } | 390 | } | ||
465 | 391 | | |||
466 | }); | 392 | }); | ||
467 | 393 | | |||
468 | findViewById(R.id.now_playing_textview).setSelected(true); | 394 | findViewById(R.id.now_playing_textview).setSelected(true); | ||
469 | } | 395 | } | ||
470 | 396 | | |||
Show All 13 Lines |