InfiniTime.git

ref: 9d43eff43a5984dfb368445d3428560dae9269da

src/displayapp/screens/Music.cpp


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <libs/lvgl/lvgl.h>
#include "Music.h"

using namespace Pinetime::Applications::Screens;
extern lv_font_t jetbrains_mono_extrabold_compressed;
extern lv_font_t jetbrains_mono_bold_20;

static void event_handler(lv_obj_t * obj, lv_event_t event)
{
  Music* screen = static_cast<Music *>(obj->user_data);
  screen->OnObjectEvent(obj, event);
}

Music::Music(Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::MusicService &music) : Screen(app), musicService(music) {
    lv_obj_t * label;

    btnVolDown = lv_btn_create(lv_scr_act(), NULL);
    btnVolDown->user_data = this;
    lv_obj_set_event_cb(btnVolDown, event_handler);
    lv_obj_align(btnVolDown, NULL, LV_ALIGN_IN_TOP_LEFT, 10, 10);
    label = lv_label_create(btnVolDown, NULL);
    lv_label_set_text(label, "v-");

    btnVolUp = lv_btn_create(lv_scr_act(), NULL);
    btnVolUp->user_data = this;
    lv_obj_set_event_cb(btnVolUp, event_handler);
    lv_obj_align(btnVolUp, NULL, LV_ALIGN_IN_TOP_RIGHT, -10, 10);
    label = lv_label_create(btnVolUp, NULL);
    lv_label_set_text(label, "v+");

    btnPrev = lv_btn_create(lv_scr_act(), NULL);
    btnPrev->user_data = this;
    lv_obj_set_event_cb(btnPrev, event_handler);
    lv_obj_set_size(btnPrev, LV_HOR_RES / 4, LV_VER_RES / 4);
    lv_obj_align(btnPrev, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 10,-10);
    label = lv_label_create(btnPrev, NULL);
    lv_label_set_text(label, "<<");

    btnPlayPause = lv_btn_create(lv_scr_act(), NULL);
    btnPlayPause->user_data = this;
    lv_obj_set_event_cb(btnPlayPause, event_handler);
    lv_obj_set_size(btnPlayPause, LV_HOR_RES / 4, LV_VER_RES / 4);
    lv_obj_align(btnPlayPause, NULL, LV_ALIGN_IN_BOTTOM_MID, 0,-10);
    txtPlayPause = lv_label_create(btnPlayPause, NULL);
    lv_label_set_text(txtPlayPause, ">");

    btnNext = lv_btn_create(lv_scr_act(), NULL);
    btnNext->user_data = this;
    lv_obj_set_event_cb(btnNext, event_handler);
    lv_obj_set_size(btnNext, LV_HOR_RES / 4, LV_VER_RES / 4);
    lv_obj_align(btnNext, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10,-10);
    label = lv_label_create(btnNext, NULL);
    lv_label_set_text(label, ">>");

    txtArtist = lv_label_create(lv_scr_act(), NULL);
    lv_label_set_long_mode(txtArtist, LV_LABEL_LONG_SROLL);
    lv_obj_align(txtArtist, NULL, LV_ALIGN_IN_LEFT_MID, 0,-20);
    lv_label_set_text(txtArtist, "Artist Name");
    lv_label_set_align(txtArtist, LV_LABEL_ALIGN_CENTER);
    lv_obj_set_width(txtArtist, LV_HOR_RES);

    txtTrack = lv_label_create(lv_scr_act(), NULL);
    lv_label_set_long_mode(txtTrack, LV_LABEL_LONG_DOT);
    lv_obj_align(txtTrack, NULL, LV_ALIGN_IN_LEFT_MID, 0,20);
    lv_label_set_text(txtTrack, "This is a very long track name");
    lv_label_set_align(txtTrack, LV_LABEL_ALIGN_CENTER);
    lv_obj_set_width(txtTrack, LV_HOR_RES);

    musicService.event(Controllers::MusicService::EVENT_MUSIC_OPEN);
}

Music::~Music() {
  lv_obj_clean(lv_scr_act());
}

bool Music::OnButtonPushed() {
  running = false;
  return true;
}

bool Music::Refresh() {

    if (m_artist != musicService.artist()) {
        m_artist = musicService.artist();
        lv_label_set_text(txtArtist, m_artist.data());
    }
    if (m_track != musicService.track()) {
        m_track = musicService.track();
        lv_label_set_text(txtTrack, m_track.data());
    }
    if (m_album != musicService.album()) {
        m_album = musicService.album();
    }
    if (m_status != musicService.status()) {
        m_status = musicService.status();
    }
    if (m_status == Pinetime::Controllers::MusicService::STATUS_MUSIC_PLAYING) {
        lv_label_set_text(txtPlayPause, "||");
    } else {
        lv_label_set_text(txtPlayPause, ">");
    }

  return running;
}

void Music::OnObjectEvent(lv_obj_t* obj, lv_event_t event)
{
    if (event == LV_EVENT_CLICKED) {
        if (obj == btnVolDown) {
            musicService.event(Controllers::MusicService::EVENT_MUSIC_VOLDOWN);
        } else if (obj == btnVolUp) {
            musicService.event(Controllers::MusicService::EVENT_MUSIC_VOLUP);
        } else if (obj == btnPrev) {
            musicService.event(Controllers::MusicService::EVENT_MUSIC_PREV);
        } else if (obj == btnPlayPause) {
            if (m_status == Pinetime::Controllers::MusicService::STATUS_MUSIC_PLAYING) {
                musicService.event(Controllers::MusicService::EVENT_MUSIC_PAUSE);
            } else {
                musicService.event(Controllers::MusicService::EVENT_MUSIC_PLAY);
            }
        } else if (obj == btnNext) {
            musicService.event(Controllers::MusicService::EVENT_MUSIC_NEXT);
        }
    }
}