summaryrefslogtreecommitdiff
path: root/src/DisplayApp/Screens/Music.cpp
blob: 9b7d198bcde58788e36f92454b28b30daee61e92 (plain)
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);
        }
    }
}