Search in sources :

Example 1 with MprisControlBinding

use of org.kde.kdeconnect_tp.databinding.MprisControlBinding in project kdeconnect-android by KDE.

the class MprisNowPlayingFragment method onCreateView.

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    if (activityMprisBinding == null) {
        activityMprisBinding = MprisNowPlayingBinding.inflate(inflater);
        mprisControlBinding = activityMprisBinding.mprisControl;
        String targetPlayerName = "";
        Intent activityIntent = requireActivity().getIntent();
        activityIntent.getStringExtra("player");
        activityIntent.removeExtra("player");
        if (TextUtils.isEmpty(targetPlayerName)) {
            if (savedInstanceState != null) {
                targetPlayerName = savedInstanceState.getString("targetPlayer");
            }
        }
        deviceId = requireArguments().getString(MprisPlugin.DEVICE_ID_KEY);
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(requireContext());
        String interval_time_str = prefs.getString(getString(R.string.mpris_time_key), getString(R.string.mpris_time_default));
        final int interval_time = Integer.parseInt(interval_time_str);
        BackgroundService.RunCommand(requireContext(), service -> service.addConnectionListener(connectionReceiver));
        connectToPlugin(targetPlayerName);
        performActionOnClick(mprisControlBinding.loopButton, p -> {
            switch(p.getLoopStatus()) {
                case "None":
                    p.setLoopStatus("Track");
                    break;
                case "Track":
                    p.setLoopStatus("Playlist");
                    break;
                case "Playlist":
                    p.setLoopStatus("None");
                    break;
            }
        });
        performActionOnClick(mprisControlBinding.playButton, MprisPlugin.MprisPlayer::playPause);
        performActionOnClick(mprisControlBinding.shuffleButton, p -> p.setShuffle(!p.getShuffle()));
        performActionOnClick(mprisControlBinding.prevButton, MprisPlugin.MprisPlayer::previous);
        performActionOnClick(mprisControlBinding.rewButton, p -> targetPlayer.seek(interval_time * -1));
        performActionOnClick(mprisControlBinding.ffButton, p -> p.seek(interval_time));
        performActionOnClick(mprisControlBinding.nextButton, MprisPlugin.MprisPlayer::next);
        performActionOnClick(mprisControlBinding.stopButton, MprisPlugin.MprisPlayer::stop);
        mprisControlBinding.volumeSeek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStopTrackingTouch(final SeekBar seekBar) {
                BackgroundService.RunCommand(requireContext(), service -> {
                    if (targetPlayer == null)
                        return;
                    targetPlayer.setVolume(seekBar.getProgress());
                });
            }
        });
        positionSeekUpdateRunnable = () -> {
            Context context = getContext();
            // Fragment was already detached
            if (context == null)
                return;
            BackgroundService.RunCommand(context, service -> {
                if (targetPlayer != null) {
                    mprisControlBinding.positionSeek.setProgress((int) (targetPlayer.getPosition()));
                }
                positionSeekUpdateHandler.removeCallbacks(positionSeekUpdateRunnable);
                positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 1000);
            });
        };
        positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200);
        mprisControlBinding.positionSeek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean byUser) {
                mprisControlBinding.progressTextview.setText(milisToProgress(progress));
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                positionSeekUpdateHandler.removeCallbacks(positionSeekUpdateRunnable);
            }

            @Override
            public void onStopTrackingTouch(final SeekBar seekBar) {
                BackgroundService.RunCommand(requireContext(), service -> {
                    if (targetPlayer != null) {
                        targetPlayer.setPosition(seekBar.getProgress());
                    }
                    positionSeekUpdateHandler.postDelayed(positionSeekUpdateRunnable, 200);
                });
            }
        });
        mprisControlBinding.nowPlayingTextview.setSelected(true);
    }
    return activityMprisBinding.getRoot();
}
Also used : Context(android.content.Context) Bundle(android.os.Bundle) NonNull(androidx.annotation.NonNull) MprisNowPlayingBinding(org.kde.kdeconnect_tp.databinding.MprisNowPlayingBinding) Uri(android.net.Uri) Intent(android.content.Intent) ArrayUtils(org.apache.commons.lang3.ArrayUtils) DrawableCompat(androidx.core.graphics.drawable.DrawableCompat) Drawable(android.graphics.drawable.Drawable) MenuItem(android.view.MenuItem) R(org.kde.kdeconnect_tp.R) SeekBar(android.widget.SeekBar) Handler(android.os.Handler) Toast(android.widget.Toast) Menu(android.view.Menu) Fragment(androidx.fragment.app.Fragment) View(android.view.View) AdapterView(android.widget.AdapterView) PreferenceManager(android.preference.PreferenceManager) ContextCompat(androidx.core.content.ContextCompat) NetworkPacket(org.kde.kdeconnect.NetworkPacket) Log(android.util.Log) MalformedURLException(java.net.MalformedURLException) LayoutInflater(android.view.LayoutInflater) TextUtils(android.text.TextUtils) MprisControlBinding(org.kde.kdeconnect_tp.databinding.MprisControlBinding) ViewGroup(android.view.ViewGroup) BackgroundService(org.kde.kdeconnect.BackgroundService) ArrayAdapter(android.widget.ArrayAdapter) List(java.util.List) Nullable(androidx.annotation.Nullable) SharedPreferences(android.content.SharedPreferences) Message(android.os.Message) ActivityNotFoundException(android.content.ActivityNotFoundException) Bitmap(android.graphics.Bitmap) BaseLinkProvider(org.kde.kdeconnect.Backends.BaseLinkProvider) VideoUrlsHelper(org.kde.kdeconnect.Helpers.VideoUrlsHelper) BaseLink(org.kde.kdeconnect.Backends.BaseLink) Context(android.content.Context) SeekBar(android.widget.SeekBar) SharedPreferences(android.content.SharedPreferences) Intent(android.content.Intent) Nullable(androidx.annotation.Nullable)

Aggregations

ActivityNotFoundException (android.content.ActivityNotFoundException)1 Context (android.content.Context)1 Intent (android.content.Intent)1 SharedPreferences (android.content.SharedPreferences)1 Bitmap (android.graphics.Bitmap)1 Drawable (android.graphics.drawable.Drawable)1 Uri (android.net.Uri)1 Bundle (android.os.Bundle)1 Handler (android.os.Handler)1 Message (android.os.Message)1 PreferenceManager (android.preference.PreferenceManager)1 TextUtils (android.text.TextUtils)1 Log (android.util.Log)1 LayoutInflater (android.view.LayoutInflater)1 Menu (android.view.Menu)1 MenuItem (android.view.MenuItem)1 View (android.view.View)1 ViewGroup (android.view.ViewGroup)1 AdapterView (android.widget.AdapterView)1 ArrayAdapter (android.widget.ArrayAdapter)1