├── settings.gradle ├── app ├── gradle.properties ├── multidex-config.pro └── src │ ├── main │ ├── java │ │ └── net │ │ │ └── programmierecke │ │ │ └── radiodroid2 │ │ │ ├── ActivityRadioStationDetail.java │ │ │ ├── interfaces │ │ │ ├── IChanged.java │ │ │ ├── IFragmentRefreshable.java │ │ │ ├── IAdapterRefreshable.java │ │ │ ├── IApplicationSelected.java │ │ │ └── IFragmentSearchable.java │ │ │ ├── cast │ │ │ └── CastAwareActivity.java │ │ │ ├── utils │ │ │ ├── SwipeableViewHolder.java │ │ │ └── RateLimiter.java │ │ │ ├── recording │ │ │ ├── DataRecording.java │ │ │ ├── RecordableListener.java │ │ │ ├── Recordable.java │ │ │ └── RunningRecordingInfo.java │ │ │ ├── HttpClient.java │ │ │ ├── station │ │ │ └── live │ │ │ │ └── metadata │ │ │ │ ├── TrackMetadataCallback.java │ │ │ │ ├── lastfm │ │ │ │ └── data │ │ │ │ │ ├── LfmTrackMetadata.java │ │ │ │ │ ├── Toptags.java │ │ │ │ │ ├── Tag.java │ │ │ │ │ ├── Image.java │ │ │ │ │ ├── Streamable.java │ │ │ │ │ ├── Artist.java │ │ │ │ │ └── Album.java │ │ │ │ └── TrackMetadataSearcher.java │ │ │ ├── alarm │ │ │ └── DataRadioStationAlarm.java │ │ │ ├── database │ │ │ └── Converters.java │ │ │ ├── BootReceiver.java │ │ │ ├── players │ │ │ ├── mediaplayer │ │ │ │ └── StreamProxyListener.java │ │ │ ├── mpd │ │ │ │ └── tasks │ │ │ │ │ ├── MPDResumeTask.java │ │ │ │ │ ├── MPDStopTask.java │ │ │ │ │ └── MPDPauseTask.java │ │ │ ├── PlayState.java │ │ │ ├── selector │ │ │ │ └── PlayerType.java │ │ │ └── PlayerWrapper.java │ │ │ ├── FallbackStationsManager.kt │ │ │ ├── history │ │ │ └── TrackHistoryViewModel.java │ │ │ ├── service │ │ │ ├── BecomingNoisyReceiver.java │ │ │ └── PauseReason.java │ │ │ ├── proxy │ │ │ └── ProxySettings.java │ │ │ ├── CountryFlagsLoader.java │ │ │ ├── HistoryManager.java │ │ │ ├── FragmentAbout.java │ │ │ └── data │ │ │ └── DataStatistics.java │ ├── res │ │ ├── drawable │ │ │ ├── mpd.png │ │ │ ├── mpd_nok.png │ │ │ ├── mpd_ok.png │ │ │ ├── ic_launcher.png │ │ │ ├── flags │ │ │ │ └── drawable │ │ │ │ │ ├── flag_ac.png │ │ │ │ │ ├── flag_ad.png │ │ │ │ │ ├── flag_ae.png │ │ │ │ │ ├── flag_af.png │ │ │ │ │ ├── flag_ag.png │ │ │ │ │ ├── flag_ai.png │ │ │ │ │ ├── flag_al.png │ │ │ │ │ ├── flag_am.png │ │ │ │ │ ├── flag_ao.png │ │ │ │ │ ├── flag_aq.png │ │ │ │ │ ├── flag_ar.png │ │ │ │ │ ├── flag_as.png │ │ │ │ │ ├── flag_at.png │ │ │ │ │ ├── flag_au.png │ │ │ │ │ ├── flag_aw.png │ │ │ │ │ ├── flag_ax.png │ │ │ │ │ ├── flag_az.png │ │ │ │ │ ├── flag_ba.png │ │ │ │ │ ├── flag_bb.png │ │ │ │ │ ├── flag_bd.png │ │ │ │ │ ├── flag_be.png │ │ │ │ │ ├── flag_bf.png │ │ │ │ │ ├── flag_bg.png │ │ │ │ │ ├── flag_bh.png │ │ │ │ │ ├── flag_bi.png │ │ │ │ │ ├── flag_bj.png │ │ │ │ │ ├── flag_bl.png │ │ │ │ │ ├── flag_bm.png │ │ │ │ │ ├── flag_bn.png │ │ │ │ │ ├── flag_bo.png │ │ │ │ │ ├── flag_bq.png │ │ │ │ │ ├── flag_br.png │ │ │ │ │ ├── flag_bs.png │ │ │ │ │ ├── flag_bt.png │ │ │ │ │ ├── flag_bv.png │ │ │ │ │ ├── flag_bw.png │ │ │ │ │ ├── flag_by.png │ │ │ │ │ ├── flag_bz.png │ │ │ │ │ ├── flag_ca.png │ │ │ │ │ ├── flag_cc.png │ │ │ │ │ ├── flag_cd.png │ │ │ │ │ ├── flag_cf.png │ │ │ │ │ ├── flag_cg.png │ │ │ │ │ ├── flag_ch.png │ │ │ │ │ ├── flag_ci.png │ │ │ │ │ ├── flag_ck.png │ │ │ │ │ ├── flag_cl.png │ │ │ │ │ ├── flag_cm.png │ │ │ │ │ ├── flag_cn.png │ │ │ │ │ ├── flag_co.png │ │ │ │ │ ├── flag_cp.png │ │ │ │ │ ├── flag_cr.png │ │ │ │ │ ├── flag_cu.png │ │ │ │ │ ├── flag_cv.png │ │ │ │ │ ├── flag_cw.png │ │ │ │ │ ├── flag_cx.png │ │ │ │ │ ├── flag_cy.png │ │ │ │ │ ├── flag_cz.png │ │ │ │ │ ├── flag_de.png │ │ │ │ │ ├── flag_dg.png │ │ │ │ │ ├── flag_dj.png │ │ │ │ │ ├── flag_dk.png │ │ │ │ │ ├── flag_dm.png │ │ │ │ │ ├── flag_do.png │ │ │ │ │ ├── flag_dz.png │ │ │ │ │ ├── flag_ea.png │ │ │ │ │ ├── flag_ec.png │ │ │ │ │ ├── flag_ee.png │ │ │ │ │ ├── flag_eg.png │ │ │ │ │ ├── flag_eh.png │ │ │ │ │ ├── flag_er.png │ │ │ │ │ ├── flag_es.png │ │ │ │ │ ├── flag_et.png │ │ │ │ │ ├── flag_eu.png │ │ │ │ │ ├── flag_fi.png │ │ │ │ │ ├── flag_fj.png │ │ │ │ │ ├── flag_fk.png │ │ │ │ │ ├── flag_fm.png │ │ │ │ │ ├── flag_fo.png │ │ │ │ │ ├── flag_fr.png │ │ │ │ │ ├── flag_ga.png │ │ │ │ │ ├── flag_gb.png │ │ │ │ │ ├── flag_gd.png │ │ │ │ │ ├── flag_ge.png │ │ │ │ │ ├── flag_gf.png │ │ │ │ │ ├── flag_gg.png │ │ │ │ │ ├── flag_gh.png │ │ │ │ │ ├── flag_gi.png │ │ │ │ │ ├── flag_gl.png │ │ │ │ │ ├── flag_gm.png │ │ │ │ │ ├── flag_gn.png │ │ │ │ │ ├── flag_gp.png │ │ │ │ │ ├── flag_gq.png │ │ │ │ │ ├── flag_gr.png │ │ │ │ │ ├── flag_gs.png │ │ │ │ │ ├── flag_gt.png │ │ │ │ │ ├── flag_gu.png │ │ │ │ │ ├── flag_gw.png │ │ │ │ │ ├── flag_gy.png │ │ │ │ │ ├── flag_hk.png │ │ │ │ │ ├── flag_hm.png │ │ │ │ │ ├── flag_hn.png │ │ │ │ │ ├── flag_hr.png │ │ │ │ │ ├── flag_ht.png │ │ │ │ │ ├── flag_hu.png │ │ │ │ │ ├── flag_ic.png │ │ │ │ │ ├── flag_id.png │ │ │ │ │ ├── flag_ie.png │ │ │ │ │ ├── flag_il.png │ │ │ │ │ ├── flag_im.png │ │ │ │ │ ├── flag_in.png │ │ │ │ │ ├── flag_io.png │ │ │ │ │ ├── flag_iq.png │ │ │ │ │ ├── flag_ir.png │ │ │ │ │ ├── flag_is.png │ │ │ │ │ ├── flag_it.png │ │ │ │ │ ├── flag_je.png │ │ │ │ │ ├── flag_jm.png │ │ │ │ │ ├── flag_jo.png │ │ │ │ │ ├── flag_jp.png │ │ │ │ │ ├── flag_ke.png │ │ │ │ │ ├── flag_kg.png │ │ │ │ │ ├── flag_kh.png │ │ │ │ │ ├── flag_ki.png │ │ │ │ │ ├── flag_km.png │ │ │ │ │ ├── flag_kn.png │ │ │ │ │ ├── flag_kp.png │ │ │ │ │ ├── flag_kr.png │ │ │ │ │ ├── flag_kw.png │ │ │ │ │ ├── flag_ky.png │ │ │ │ │ ├── flag_kz.png │ │ │ │ │ ├── flag_la.png │ │ │ │ │ ├── flag_lb.png │ │ │ │ │ ├── flag_lc.png │ │ │ │ │ ├── flag_li.png │ │ │ │ │ ├── flag_lk.png │ │ │ │ │ ├── flag_lr.png │ │ │ │ │ ├── flag_ls.png │ │ │ │ │ ├── flag_lt.png │ │ │ │ │ ├── flag_lu.png │ │ │ │ │ ├── flag_lv.png │ │ │ │ │ ├── flag_ly.png │ │ │ │ │ ├── flag_ma.png │ │ │ │ │ ├── flag_mc.png │ │ │ │ │ ├── flag_md.png │ │ │ │ │ ├── flag_me.png │ │ │ │ │ ├── flag_mf.png │ │ │ │ │ ├── flag_mg.png │ │ │ │ │ ├── flag_mh.png │ │ │ │ │ ├── flag_mk.png │ │ │ │ │ ├── flag_ml.png │ │ │ │ │ ├── flag_mm.png │ │ │ │ │ ├── flag_mn.png │ │ │ │ │ ├── flag_mo.png │ │ │ │ │ ├── flag_mp.png │ │ │ │ │ ├── flag_mq.png │ │ │ │ │ ├── flag_mr.png │ │ │ │ │ ├── flag_ms.png │ │ │ │ │ ├── flag_mt.png │ │ │ │ │ ├── flag_mu.png │ │ │ │ │ ├── flag_mv.png │ │ │ │ │ ├── flag_mw.png │ │ │ │ │ ├── flag_mx.png │ │ │ │ │ ├── flag_my.png │ │ │ │ │ ├── flag_mz.png │ │ │ │ │ ├── flag_na.png │ │ │ │ │ ├── flag_nc.png │ │ │ │ │ ├── flag_ne.png │ │ │ │ │ ├── flag_nf.png │ │ │ │ │ ├── flag_ng.png │ │ │ │ │ ├── flag_ni.png │ │ │ │ │ ├── flag_nl.png │ │ │ │ │ ├── flag_no.png │ │ │ │ │ ├── flag_np.png │ │ │ │ │ ├── flag_nr.png │ │ │ │ │ ├── flag_nu.png │ │ │ │ │ ├── flag_nz.png │ │ │ │ │ ├── flag_om.png │ │ │ │ │ ├── flag_pa.png │ │ │ │ │ ├── flag_pe.png │ │ │ │ │ ├── flag_pf.png │ │ │ │ │ ├── flag_pg.png │ │ │ │ │ ├── flag_ph.png │ │ │ │ │ ├── flag_pk.png │ │ │ │ │ ├── flag_pl.png │ │ │ │ │ ├── flag_pm.png │ │ │ │ │ ├── flag_pn.png │ │ │ │ │ ├── flag_pr.png │ │ │ │ │ ├── flag_ps.png │ │ │ │ │ ├── flag_pt.png │ │ │ │ │ ├── flag_pw.png │ │ │ │ │ ├── flag_py.png │ │ │ │ │ ├── flag_qa.png │ │ │ │ │ ├── flag_re.png │ │ │ │ │ ├── flag_ro.png │ │ │ │ │ ├── flag_rs.png │ │ │ │ │ ├── flag_ru.png │ │ │ │ │ ├── flag_rw.png │ │ │ │ │ ├── flag_sa.png │ │ │ │ │ ├── flag_sb.png │ │ │ │ │ ├── flag_sc.png │ │ │ │ │ ├── flag_sd.png │ │ │ │ │ ├── flag_se.png │ │ │ │ │ ├── flag_sg.png │ │ │ │ │ ├── flag_sh.png │ │ │ │ │ ├── flag_si.png │ │ │ │ │ ├── flag_sj.png │ │ │ │ │ ├── flag_sk.png │ │ │ │ │ ├── flag_sl.png │ │ │ │ │ ├── flag_sm.png │ │ │ │ │ ├── flag_sn.png │ │ │ │ │ ├── flag_so.png │ │ │ │ │ ├── flag_sr.png │ │ │ │ │ ├── flag_ss.png │ │ │ │ │ ├── flag_st.png │ │ │ │ │ ├── flag_sv.png │ │ │ │ │ ├── flag_sx.png │ │ │ │ │ ├── flag_sy.png │ │ │ │ │ ├── flag_sz.png │ │ │ │ │ ├── flag_ta.png │ │ │ │ │ ├── flag_tc.png │ │ │ │ │ ├── flag_td.png │ │ │ │ │ ├── flag_tf.png │ │ │ │ │ ├── flag_tg.png │ │ │ │ │ ├── flag_th.png │ │ │ │ │ ├── flag_tj.png │ │ │ │ │ ├── flag_tk.png │ │ │ │ │ ├── flag_tl.png │ │ │ │ │ ├── flag_tm.png │ │ │ │ │ ├── flag_tn.png │ │ │ │ │ ├── flag_to.png │ │ │ │ │ ├── flag_tr.png │ │ │ │ │ ├── flag_tt.png │ │ │ │ │ ├── flag_tv.png │ │ │ │ │ ├── flag_tw.png │ │ │ │ │ ├── flag_tz.png │ │ │ │ │ ├── flag_ua.png │ │ │ │ │ ├── flag_ug.png │ │ │ │ │ ├── flag_um.png │ │ │ │ │ ├── flag_un.png │ │ │ │ │ ├── flag_us.png │ │ │ │ │ ├── flag_uy.png │ │ │ │ │ ├── flag_uz.png │ │ │ │ │ ├── flag_va.png │ │ │ │ │ ├── flag_vc.png │ │ │ │ │ ├── flag_ve.png │ │ │ │ │ ├── flag_vg.png │ │ │ │ │ ├── flag_vi.png │ │ │ │ │ ├── flag_vn.png │ │ │ │ │ ├── flag_vu.png │ │ │ │ │ ├── flag_wf.png │ │ │ │ │ ├── flag_ws.png │ │ │ │ │ ├── flag_xk.png │ │ │ │ │ ├── flag_ye.png │ │ │ │ │ ├── flag_yt.png │ │ │ │ │ ├── flag_za.png │ │ │ │ │ ├── flag_zm.png │ │ │ │ │ └── flag_zw.png │ │ │ ├── icon_button_ripple.xml │ │ │ ├── ic_skip_previous_circle.xml │ │ │ ├── ic_stop_24dp.xml │ │ │ ├── ic_pause_24dp.xml │ │ │ ├── ic_play_arrow_24dp.xml │ │ │ ├── ic_skip_next_circle.xml │ │ │ ├── ic_stop_black_60dp.xml │ │ │ ├── ic_expand_less_black_24dp.xml │ │ │ ├── ic_mpd_connected_24dp.xml │ │ │ ├── ic_expand_more_black_24dp.xml │ │ │ ├── ic_fiber_manual_record_red_50dp.xml │ │ │ ├── ic_star_white_24.xml │ │ │ ├── ic_fiber_manual_record_black_24dp.xml │ │ │ ├── ic_fiber_manual_record_black_50dp.xml │ │ │ ├── ic_fiber_manual_record_green_50dp.xml │ │ │ ├── ic_expand_more_white_24dp.xml │ │ │ ├── ic_load_playlist_24dp.xml │ │ │ ├── ic_delete_black_24dp.xml │ │ │ ├── ic_delete_white_24dp.xml │ │ │ ├── ic_list_24dp.xml │ │ │ ├── ic_volume_down_24dp.xml │ │ │ ├── ic_star_24dp.xml │ │ │ ├── ic_star_black_24dp.xml │ │ │ ├── ic_store_black_24dp.xml │ │ │ ├── ic_delete_black_55dp.xml │ │ │ ├── ic_stop.xml │ │ │ ├── ic_photo_24dp.xml │ │ │ ├── ic_tune_24dp.xml │ │ │ ├── ic_poll_24dp.xml │ │ │ ├── ic_save_black_24dp.xml │ │ │ ├── ic_edit_24dp.xml │ │ │ ├── ic_hourglass_empty_black_24dp.xml │ │ │ ├── ic_mpd_disconnected_24dp.xml │ │ │ ├── ic_start_recording.xml │ │ │ ├── ic_back_arrow_24dp.xml │ │ │ ├── ic_volume_up_24dp.xml │ │ │ ├── ic_more_vert_black_24dp.xml │ │ │ ├── ic_trending_flat_black_24dp.xml │ │ │ ├── ic_access_alarms_black_24dp.xml │ │ │ ├── ic_query_builder_black_24dp.xml │ │ │ ├── ic_star_border_24dp.xml │ │ │ ├── ic_star_border_black_24dp.xml │ │ │ ├── ic_refresh_black_24dp.xml │ │ │ ├── ic_more.xml │ │ │ ├── ic_play_circle.xml │ │ │ ├── ic_restore_white_24.xml │ │ │ ├── ic_pause_circle.xml │ │ │ ├── ic_trending_down_black_24dp.xml │ │ │ ├── ic_trending_up_black_24dp.xml │ │ │ ├── ic_search_24dp.xml │ │ │ ├── ic_sync_black_24dp.xml │ │ │ ├── ic_restore_black_24dp.xml │ │ │ ├── ic_star_transparent_with_border_24dp.xml │ │ │ ├── ic_add_alarm_black_24dp.xml │ │ │ ├── ic_transparent_circle.xml │ │ │ ├── ic_live_help_24dp.xml │ │ │ ├── ic_share_24dp.xml │ │ │ └── ic_stop_recording.xml │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_background.png │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_background.png │ │ ├── mipmap-xhdpi │ │ │ ├── ic_banner.png │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_background.png │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_background.png │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_round.png │ │ │ └── ic_launcher_background.png │ │ ├── xml │ │ │ ├── automotive_app_desc.xml │ │ │ ├── file_paths.xml │ │ │ └── network_security_config.xml │ │ ├── drawable-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_pause_white_24dp.png │ │ │ ├── ic_stop_white_24dp.png │ │ │ └── ic_play_arrow_white_24dp.png │ │ ├── drawable-hdpi │ │ │ ├── ic_skip_next_24dp.png │ │ │ ├── ic_view_list_24dp.png │ │ │ ├── ic_pause_white_24dp.png │ │ │ ├── ic_stop_white_24dp.png │ │ │ ├── ic_view_icons_24dp.png │ │ │ ├── ic_skip_previous_24dp.png │ │ │ └── ic_play_arrow_white_24dp.png │ │ ├── drawable-mdpi │ │ │ ├── ic_skip_next_24dp.png │ │ │ ├── ic_view_list_24dp.png │ │ │ ├── ic_pause_white_24dp.png │ │ │ ├── ic_stop_white_24dp.png │ │ │ ├── ic_view_icons_24dp.png │ │ │ ├── ic_skip_previous_24dp.png │ │ │ └── ic_play_arrow_white_24dp.png │ │ ├── drawable-xhdpi │ │ │ ├── ic_pause_white_24dp.png │ │ │ ├── ic_skip_next_24dp.png │ │ │ ├── ic_stop_white_24dp.png │ │ │ ├── ic_view_icons_24dp.png │ │ │ ├── ic_view_list_24dp.png │ │ │ ├── ic_skip_previous_24dp.png │ │ │ └── ic_play_arrow_white_24dp.png │ │ ├── drawable-xxhdpi │ │ │ ├── ic_skip_next_24dp.png │ │ │ ├── ic_stop_white_24dp.png │ │ │ ├── ic_view_icons_24dp.png │ │ │ ├── ic_view_list_24dp.png │ │ │ ├── ic_pause_white_24dp.png │ │ │ ├── ic_skip_previous_24dp.png │ │ │ └── ic_play_arrow_white_24dp.png │ │ ├── color │ │ │ ├── toggle_color.xml │ │ │ ├── menu_text_color.xml │ │ │ └── menu_bottom_text_color.xml │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_banner.xml │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── drawable-anydpi │ │ │ ├── ic_skip_next_24dp.xml │ │ │ ├── ic_skip_previous_24dp.xml │ │ │ ├── ic_view_icons_24dp.xml │ │ │ └── ic_view_list_24dp.xml │ │ ├── values-sw360dp-v13 │ │ │ └── values-preference.xml │ │ ├── values │ │ │ ├── dimen.xml │ │ │ ├── attrs_tags_view.xml │ │ │ └── attrs_theme.xml │ │ ├── anim │ │ │ └── blink_recording.xml │ │ ├── layout │ │ │ ├── dialog_generic_item.xml │ │ │ ├── dialog_generic_item_list.xml │ │ │ ├── day_button.xml │ │ │ ├── layout_statistics.xml │ │ │ ├── layout_alarms.xml │ │ │ ├── layout_tabs.xml │ │ │ ├── fragment_stations.xml │ │ │ ├── page_player_history.xml │ │ │ ├── page_player_recordings.xml │ │ │ ├── page_player_album_art.xml │ │ │ ├── list_item_recording.xml │ │ │ ├── layout_timer_chooser.xml │ │ │ ├── layout_player_bottom_sheet.xml │ │ │ ├── layout_about.xml │ │ │ ├── list_item_statistic.xml │ │ │ ├── page_player_station_info.xml │ │ │ └── list_item_category.xml │ │ ├── drawable-v21 │ │ │ └── icon_button_ripple.xml │ │ ├── menu │ │ │ ├── menu_player.xml │ │ │ ├── menu_mpd_server.xml │ │ │ ├── menu_drawer.xml │ │ │ └── menu_station_detail.xml │ │ └── drawable-v24 │ │ │ └── ic_launcher_background.xml │ ├── ic_launcher-playstore.png │ └── aidl │ │ └── net │ │ └── programmierecke │ │ └── radiodroid2 │ │ ├── players │ │ ├── PlayState.aidl │ │ └── selector │ │ │ └── PlayerType.aidl │ │ ├── service │ │ └── PauseReason.aidl │ │ └── station │ │ ├── DataRadioStation.aidl │ │ └── live │ │ ├── ShoutcastInfo.aidl │ │ └── StreamLiveInfo.aidl │ ├── androidTest │ ├── resources │ │ ├── test.mp3 │ │ ├── station_url.json │ │ └── stations_search_list.json │ ├── AndroidManifest.xml │ └── java │ │ └── net │ │ └── programmierecke │ │ └── radiodroid2 │ │ └── tests │ │ └── utils │ │ ├── http │ │ ├── IcyStreamGenerator.java │ │ └── HttpToMockInterceptor.java │ │ ├── conditionwatcher │ │ └── IsMusicPlayingCondition.java │ │ ├── FirstViewMatcher.java │ │ ├── ScrollToRecyclerItemAction.java │ │ ├── ViewPagerIdlingResource.java │ │ └── RecyclerRecyclingMatcher.java │ ├── free │ └── java │ │ └── net │ │ └── programmierecke │ │ └── radiodroid2 │ │ ├── GoogleProviderHelper.java │ │ └── CastHandler.java │ ├── play │ ├── AndroidManifest.xml │ └── java │ │ └── net │ │ └── programmierecke │ │ └── radiodroid2 │ │ └── GoogleProviderHelper.java │ └── test │ └── java │ └── net │ └── programmierecke │ └── radiodroid2 │ └── UtilsTest.kt ├── google ├── icon.png ├── logo.png ├── fanart.jpg ├── function.png ├── icon_big.png ├── Screenshot_tags.png ├── Screenshot_clicks.png ├── Screenshot_drawer.png ├── Screenshot_station.png └── Screenshot_stations.png ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── .github └── workflows │ └── android-ci.yml └── README.md /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /app/gradle.properties: -------------------------------------------------------------------------------- 1 | android.useAndroidX=true 2 | android.enableJetifier=true -------------------------------------------------------------------------------- /app/multidex-config.pro: -------------------------------------------------------------------------------- 1 | -keep class net.programmierecke.radiodroid2.tests.** { *; } -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/ActivityRadioStationDetail.java: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /google/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/icon.png -------------------------------------------------------------------------------- /google/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/logo.png -------------------------------------------------------------------------------- /google/fanart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/fanart.jpg -------------------------------------------------------------------------------- /google/function.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/function.png -------------------------------------------------------------------------------- /google/icon_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/icon_big.png -------------------------------------------------------------------------------- /google/Screenshot_tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/Screenshot_tags.png -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | android.enableJetifier=true 2 | android.useAndroidX=true 3 | org.gradle.jvmargs=-Xmx4096M 4 | -------------------------------------------------------------------------------- /google/Screenshot_clicks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/Screenshot_clicks.png -------------------------------------------------------------------------------- /google/Screenshot_drawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/Screenshot_drawer.png -------------------------------------------------------------------------------- /google/Screenshot_station.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/Screenshot_station.png -------------------------------------------------------------------------------- /google/Screenshot_stations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/google/Screenshot_stations.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/mpd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/mpd.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/drawable/mpd_nok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/mpd_nok.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/mpd_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/mpd_ok.png -------------------------------------------------------------------------------- /app/src/androidTest/resources/test.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/androidTest/resources/test.mp3 -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xhdpi/ic_banner.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/aidl/net/programmierecke/radiodroid2/players/PlayState.aidl: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.players; 2 | 3 | parcelable PlayState; -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/xml/automotive_app_desc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/aidl/net/programmierecke/radiodroid2/service/PauseReason.aidl: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.service; 2 | 3 | parcelable PauseReason; -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_skip_next_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-hdpi/ic_skip_next_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_view_list_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-hdpi/ic_view_list_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_skip_next_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-mdpi/ic_skip_next_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_view_list_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-mdpi/ic_view_list_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ac.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ad.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ae.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_af.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_af.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ag.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ai.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_al.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_al.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_am.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_am.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_aq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_aq.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_as.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_at.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_at.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_au.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_au.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_aw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_aw.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ax.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_az.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_az.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ba.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bb.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bd.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_be.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_be.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bf.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bj.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bq.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_br.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_br.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bs.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bv.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bw.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_by.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_by.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_bz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_bz.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ca.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cd.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cf.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ch.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ci.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ci.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ck.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_co.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_co.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cv.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cw.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cx.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_cz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_cz.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_de.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_dg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_dg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_dj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_dj.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_dk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_dk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_dm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_dm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_do.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_do.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_dz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_dz.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ea.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ec.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ee.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_eg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_eg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_eh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_eh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_er.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_er.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_es.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_et.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_et.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_eu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_eu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_fi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_fi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_fj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_fj.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_fk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_fk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_fm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_fm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_fo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_fo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_fr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_fr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ga.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ga.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gb.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gd.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ge.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gf.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gq.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gs.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gw.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_gy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_gy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_hk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_hk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_hm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_hm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_hn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_hn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_hr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_hr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ht.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ht.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_hu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_hu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ic.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_id.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ie.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_il.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_il.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_im.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_im.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_in.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_io.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_iq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_iq.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ir.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_is.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_is.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_it.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_it.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_je.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_je.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_jm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_jm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_jo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_jo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_jp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_jp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ke.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ke.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_kg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_kg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_kh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_kh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ki.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ki.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_km.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_km.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_kn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_kn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_kp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_kp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_kr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_kr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_kw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_kw.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ky.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_kz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_kz.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_la.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_la.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_lb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_lb.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_lc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_lc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_li.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_li.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_lk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_lk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_lr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_lr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ls.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_lt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_lt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_lu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_lu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_lv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_lv.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ly.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ma.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ma.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_md.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_md.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_me.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mf.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ml.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mq.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ms.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mv.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mw.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mx.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_my.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_my.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_mz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_mz.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_na.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_na.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_nc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_nc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ne.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_nf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_nf.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ng.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ni.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_nl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_nl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_no.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_np.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_np.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_nr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_nr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_nu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_nu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_nz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_nz.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_om.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_om.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pa.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pe.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pf.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ph.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ps.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_pw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_pw.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_py.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_py.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_qa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_qa.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_re.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_re.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ro.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_rs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_rs.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ru.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_rw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_rw.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sa.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sb.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sd.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_se.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_si.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_si.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sj.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_so.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_so.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ss.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_st.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_st.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sv.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sx.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_sz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_sz.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ta.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_td.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_td.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tf.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_th.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_th.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tj.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_to.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_to.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tr.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tv.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tw.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_tz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_tz.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ua.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ug.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_um.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_um.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_un.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_un.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_us.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_uy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_uy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_uz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_uz.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_va.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_va.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_vc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_vc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ve.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_vg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_vg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_vi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_vn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_vn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_vu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_vu.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_wf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_wf.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ws.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_xk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_xk.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_ye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_ye.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_yt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_yt.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_za.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_za.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_zm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_zm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/flags/drawable/flag_zw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable/flags/drawable/flag_zw.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-hdpi/ic_pause_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_stop_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-hdpi/ic_stop_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_view_icons_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-hdpi/ic_view_icons_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-mdpi/ic_pause_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_stop_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-mdpi/ic_stop_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_view_icons_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-mdpi/ic_view_icons_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xhdpi/ic_pause_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_skip_next_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xhdpi/ic_skip_next_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_stop_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xhdpi/ic_stop_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_view_icons_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xhdpi/ic_view_icons_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xhdpi/ic_view_list_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_skip_next_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_skip_next_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_stop_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_stop_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_view_icons_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_view_icons_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_view_list_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_view_list_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/aidl/net/programmierecke/radiodroid2/players/selector/PlayerType.aidl: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.players.selector; 2 | 3 | parcelable PlayerType; -------------------------------------------------------------------------------- /app/src/main/aidl/net/programmierecke/radiodroid2/station/DataRadioStation.aidl: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.station; 2 | 3 | parcelable DataRadioStation; 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_skip_previous_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-hdpi/ic_skip_previous_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_skip_previous_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-mdpi/ic_skip_previous_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_skip_previous_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xhdpi/ic_skip_previous_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_pause_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_pause_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxxhdpi/ic_pause_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_stop_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxxhdpi/ic_stop_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/aidl/net/programmierecke/radiodroid2/station/live/ShoutcastInfo.aidl: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.station.live; 2 | 3 | parcelable ShoutcastInfo; 4 | -------------------------------------------------------------------------------- /app/src/main/aidl/net/programmierecke/radiodroid2/station/live/StreamLiveInfo.aidl: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.station.live; 2 | 3 | parcelable StreamLiveInfo; 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-hdpi/ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-mdpi/ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xhdpi/ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_skip_previous_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_skip_previous_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/segler-alex/RadioDroid/HEAD/app/src/main/res/drawable-xxxhdpi/ic_play_arrow_white_24dp.png -------------------------------------------------------------------------------- /app/src/androidTest/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/interfaces/IChanged.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.interfaces; 2 | 3 | public interface IChanged { 4 | void onChanged(); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/interfaces/IFragmentRefreshable.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.interfaces; 2 | 3 | public interface IFragmentRefreshable { 4 | void Refresh(); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/cast/CastAwareActivity.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.cast; 2 | 3 | public interface CastAwareActivity { 4 | void invalidateOptionsMenuForCast(); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/interfaces/IAdapterRefreshable.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.interfaces; 2 | 3 | public interface IAdapterRefreshable { 4 | void RefreshListGui(); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/androidTest/resources/station_url.json: -------------------------------------------------------------------------------- 1 | { 2 | "ok": "true", 3 | "message": "retrieved station url", 4 | "stationuuid": "9617a958-0601-11e8-ae97-52543be04c81", 5 | "name": "Dummy name", 6 | "url": "http://localhost:8888/audio.mp3" 7 | } -------------------------------------------------------------------------------- /app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/utils/SwipeableViewHolder.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.utils; 2 | 3 | import android.view.View; 4 | 5 | public interface SwipeableViewHolder { 6 | View getForegroundView(); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/interfaces/IApplicationSelected.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.interfaces; 2 | 3 | public interface IApplicationSelected { 4 | void onAppSelected(String packageName, String activityName); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/recording/DataRecording.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.recording; 2 | 3 | import java.util.Date; 4 | 5 | public class DataRecording { 6 | public String Name = ""; 7 | public Date Time; 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/recording/RecordableListener.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.recording; 2 | 3 | public interface RecordableListener { 4 | void onBytesAvailable(byte[] buffer, int offset, int length); 5 | void onRecordingEnded(); 6 | } 7 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Sep 30 15:28:55 CEST 2022 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /app/src/main/res/color/toggle_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_banner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_button_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/interfaces/IFragmentSearchable.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.interfaces; 2 | 3 | import net.programmierecke.radiodroid2.station.StationsFilter; 4 | 5 | public interface IFragmentSearchable { 6 | void Search(StationsFilter.SearchStyle searchStyle, String query); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/res/color/menu_text_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/menu_bottom_text_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/free/java/net/programmierecke/radiodroid2/GoogleProviderHelper.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2; 2 | 3 | import android.content.Context; 4 | import android.util.Log; 5 | 6 | public class GoogleProviderHelper{ 7 | public static void use(Context ctx){ 8 | Log.i("HLP","Google helper not installed because compiled as FREE version."); 9 | } 10 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_skip_previous_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_stop_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pause_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play_arrow_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_skip_next_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_stop_black_60dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_expand_less_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_mpd_connected_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_expand_more_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/HttpClient.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2; 2 | 3 | 4 | import okhttp3.OkHttpClient; 5 | 6 | public class HttpClient { 7 | private static final OkHttpClient clientInstance = new OkHttpClient(); 8 | 9 | public static OkHttpClient getInstance() { 10 | return clientInstance; 11 | } 12 | 13 | private HttpClient() { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_skip_next_24dp.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fiber_manual_record_red_50dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_white_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-sw360dp-v13/values-preference.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | 0dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_skip_previous_24dp.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fiber_manual_record_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fiber_manual_record_black_50dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fiber_manual_record_green_50dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 40dp 4 | 40dp 5 | 50dp 6 | 60dp 7 | 90dp 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_expand_more_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_load_playlist_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/blink_recording.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_list_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_volume_down_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/play/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_store_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs_tags_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete_black_55dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_stop.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_generic_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_photo_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tune_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/station/live/metadata/TrackMetadataCallback.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.station.live.metadata; 2 | 3 | 4 | import androidx.annotation.NonNull; 5 | 6 | public interface TrackMetadataCallback { 7 | enum FailureType { 8 | RECOVERABLE, 9 | UNRECOVERABLE, 10 | } 11 | 12 | void onFailure(@NonNull FailureType failureType); 13 | void onSuccess(@NonNull TrackMetadata trackMetadata); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_view_icons_24dp.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi/ic_view_list_24dp.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_poll_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_save_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_edit_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_generic_item_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/icon_button_ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_hourglass_empty_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/day_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_mpd_disconnected_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_start_recording.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/alarm/DataRadioStationAlarm.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.alarm; 2 | 3 | import net.programmierecke.radiodroid2.station.DataRadioStation; 4 | 5 | import java.util.ArrayList; 6 | 7 | public class DataRadioStationAlarm { 8 | public DataRadioStation station; 9 | public int id; 10 | public int hour; 11 | public int minute; 12 | public boolean repeating; 13 | public ArrayList weekDays; 14 | public boolean enabled; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_statistics.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/recording/Recordable.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.recording; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import java.util.Map; 6 | 7 | public interface Recordable { 8 | 9 | boolean canRecord(); 10 | 11 | void startRecording(@NonNull RecordableListener recordableListener); 12 | 13 | void stopRecording(); 14 | 15 | boolean isRecording(); 16 | 17 | Map getRecordNameFormattingArgs(); 18 | String getExtension(); 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back_arrow_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/database/Converters.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.database; 2 | 3 | import androidx.room.TypeConverter; 4 | 5 | import java.util.Date; 6 | 7 | public class Converters { 8 | @TypeConverter 9 | public static Date fromTimestamp(Long value) { 10 | return value == null ? null : new Date(value); 11 | } 12 | 13 | @TypeConverter 14 | public static Long dateToTimestamp(Date date) { 15 | return date == null ? null : date.getTime(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_alarms.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_volume_up_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more_vert_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_trending_flat_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_access_alarms_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_query_builder_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_border_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_border_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_restore_white_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pause_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/station/live/metadata/lastfm/data/LfmTrackMetadata.java: -------------------------------------------------------------------------------- 1 | 2 | package net.programmierecke.radiodroid2.station.live.metadata.lastfm.data; 3 | 4 | import com.google.gson.annotations.Expose; 5 | import com.google.gson.annotations.SerializedName; 6 | 7 | public class LfmTrackMetadata { 8 | 9 | @SerializedName("track") 10 | @Expose 11 | private Track track; 12 | 13 | public Track getTrack() { 14 | return track; 15 | } 16 | 17 | public void setTrack(Track track) { 18 | this.track = track; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_trending_down_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_trending_up_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/station/live/metadata/lastfm/data/Toptags.java: -------------------------------------------------------------------------------- 1 | 2 | package net.programmierecke.radiodroid2.station.live.metadata.lastfm.data; 3 | 4 | import java.util.List; 5 | import com.google.gson.annotations.Expose; 6 | import com.google.gson.annotations.SerializedName; 7 | 8 | public class Toptags { 9 | 10 | @SerializedName("tag") 11 | @Expose 12 | private List tag = null; 13 | 14 | public List getTag() { 15 | return tag; 16 | } 17 | 18 | public void setTag(List tag) { 19 | this.tag = tag; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/BootReceiver.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | 7 | import net.programmierecke.radiodroid2.alarm.RadioAlarmManager; 8 | 9 | public class BootReceiver extends BroadcastReceiver{ 10 | @Override 11 | public void onReceive(Context context, Intent intent) { 12 | RadioDroidApp radioDroidApp = (RadioDroidApp)context.getApplicationContext(); 13 | radioDroidApp.getAlarmManager().resetAllAlarms(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_sync_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_restore_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star_transparent_with_border_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/players/mediaplayer/StreamProxyListener.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.players.mediaplayer; 2 | 3 | import net.programmierecke.radiodroid2.station.live.ShoutcastInfo; 4 | import net.programmierecke.radiodroid2.station.live.StreamLiveInfo; 5 | 6 | interface StreamProxyListener { 7 | void onFoundShoutcastStream(ShoutcastInfo bitrate, boolean isHls); 8 | void onFoundLiveStreamInfo(StreamLiveInfo liveInfo); 9 | void onStreamCreated(String proxyConnection); 10 | void onStreamStopped(); 11 | void onBytesRead(byte[] buffer, int offset, int length); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_alarm_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/FallbackStationsManager.kt: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2 2 | 3 | import android.content.Context 4 | import net.programmierecke.radiodroid2.station.DataRadioStation 5 | 6 | class FallbackStationsManager(ctx: Context?) : StationSaveManager(ctx) { 7 | override fun Load() { 8 | listStations.clear() 9 | val str = context.resources 10 | .openRawResource(R.raw.fallback_stations) 11 | .bufferedReader() 12 | .use { it.readText() } 13 | val arr = DataRadioStation.DecodeJson(str) 14 | listStations.addAll(arr) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # files for the dex VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # generated files 12 | bin/ 13 | gen/ 14 | 15 | # Local configuration file (sdk path, etc) 16 | local.properties 17 | 18 | # Eclipse project files 19 | .classpath 20 | .project 21 | 22 | # idea IDE 23 | .idea* 24 | *.iml 25 | captures/ 26 | 27 | # Built application files 28 | /*/build/ 29 | /*/play/ 30 | 31 | # Local configuration file (sdk path, etc) 32 | local.properties 33 | 34 | # Gradle generated files 35 | .gradle/ 36 | gradle/ 37 | 38 | # Signing files 39 | .signing/ 40 | 41 | build/* 42 | .DS_Store 43 | 44 | *.aab 45 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_transparent_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_tabs.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_stations.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_live_help_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_player_history.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_player_recordings.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.github/workflows/android-ci.yml: -------------------------------------------------------------------------------- 1 | name: RadioDroid CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - '*' 7 | pull_request: 8 | branches: 9 | - master 10 | # Also trigger on page_build, as well as release created events 11 | page_build: 12 | release: 13 | types: # This configuration does not affect the page_build event above 14 | - created 15 | 16 | jobs: 17 | test: 18 | name: Run Tests 19 | runs-on: ubuntu-latest 20 | 21 | steps: 22 | - uses: actions/checkout@v3 23 | - name: set up JDK 11 24 | uses: actions/setup-java@v3 25 | with: 26 | distribution: 'zulu' 27 | java-version: 11 28 | - name: Tests 29 | run: bash ./gradlew build --stacktrace 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_player.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 13 | 17 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/station/live/metadata/lastfm/data/Tag.java: -------------------------------------------------------------------------------- 1 | 2 | package net.programmierecke.radiodroid2.station.live.metadata.lastfm.data; 3 | 4 | import com.google.gson.annotations.Expose; 5 | import com.google.gson.annotations.SerializedName; 6 | 7 | public class Tag { 8 | 9 | @SerializedName("name") 10 | @Expose 11 | private String name; 12 | @SerializedName("url") 13 | @Expose 14 | private String url; 15 | 16 | public String getName() { 17 | return name; 18 | } 19 | 20 | public void setName(String name) { 21 | this.name = name; 22 | } 23 | 24 | public String getUrl() { 25 | return url; 26 | } 27 | 28 | public void setUrl(String url) { 29 | this.url = url; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_stop_recording.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 11 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/station/live/metadata/lastfm/data/Image.java: -------------------------------------------------------------------------------- 1 | 2 | package net.programmierecke.radiodroid2.station.live.metadata.lastfm.data; 3 | 4 | import com.google.gson.annotations.Expose; 5 | import com.google.gson.annotations.SerializedName; 6 | 7 | public class Image { 8 | 9 | @SerializedName("#text") 10 | @Expose 11 | private String text; 12 | @SerializedName("size") 13 | @Expose 14 | private String size; 15 | 16 | public String getText() { 17 | return text; 18 | } 19 | 20 | public void setText(String text) { 21 | this.text = text; 22 | } 23 | 24 | public String getSize() { 25 | return size; 26 | } 27 | 28 | public void setSize(String size) { 29 | this.size = size; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_player_album_art.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/station/live/metadata/lastfm/data/Streamable.java: -------------------------------------------------------------------------------- 1 | 2 | package net.programmierecke.radiodroid2.station.live.metadata.lastfm.data; 3 | 4 | import com.google.gson.annotations.Expose; 5 | import com.google.gson.annotations.SerializedName; 6 | 7 | public class Streamable { 8 | 9 | @SerializedName("#text") 10 | @Expose 11 | private String text; 12 | @SerializedName("fulltrack") 13 | @Expose 14 | private String fulltrack; 15 | 16 | public String getText() { 17 | return text; 18 | } 19 | 20 | public void setText(String text) { 21 | this.text = text; 22 | } 23 | 24 | public String getFulltrack() { 25 | return fulltrack; 26 | } 27 | 28 | public void setFulltrack(String fulltrack) { 29 | this.fulltrack = fulltrack; 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/station/live/metadata/TrackMetadataSearcher.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.station.live.metadata; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import net.programmierecke.radiodroid2.station.live.metadata.lastfm.LfmMetadataSearcher; 6 | 7 | import okhttp3.OkHttpClient; 8 | 9 | public class TrackMetadataSearcher { 10 | private LfmMetadataSearcher lfmMetadataSearcher; 11 | 12 | public TrackMetadataSearcher(OkHttpClient httpClient) { 13 | lfmMetadataSearcher = new LfmMetadataSearcher(httpClient); 14 | } 15 | 16 | 17 | public void fetchTrackMetadata(String LastFMApiKey, String artist, @NonNull String track, @NonNull TrackMetadataCallback trackMetadataCallback) { 18 | lfmMetadataSearcher.fetchTrackMetadata(LastFMApiKey, artist, track, trackMetadataCallback); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/players/mpd/tasks/MPDResumeTask.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.players.mpd.tasks; 2 | 3 | import androidx.annotation.Nullable; 4 | 5 | import net.programmierecke.radiodroid2.players.mpd.MPDAsyncTask; 6 | 7 | public class MPDResumeTask extends MPDAsyncTask { 8 | public MPDResumeTask(@Nullable FailureCallback failureCallback) { 9 | setStages( 10 | new ReadStage[]{ 11 | okReadStage(), 12 | statusReadStage(false) 13 | }, 14 | new WriteStage[]{ 15 | (task, bufferedWriter) -> { 16 | bufferedWriter.write("command_list_begin\npause 0\nstatus\ncommand_list_end\n"); 17 | return true; 18 | }}, failureCallback); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/history/TrackHistoryViewModel.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.history; 2 | 3 | import android.app.Application; 4 | 5 | import androidx.lifecycle.AndroidViewModel; 6 | import androidx.lifecycle.LiveData; 7 | import androidx.paging.PagedList; 8 | 9 | import net.programmierecke.radiodroid2.RadioDroidApp; 10 | 11 | public class TrackHistoryViewModel extends AndroidViewModel { 12 | private final TrackHistoryRepository repository; 13 | 14 | public TrackHistoryViewModel(Application application) { 15 | super(application); 16 | 17 | RadioDroidApp radioDroidApp = getApplication(); 18 | repository = radioDroidApp.getTrackHistoryRepository(); 19 | } 20 | 21 | public LiveData> getAllHistoryPaged() { 22 | return repository.getAllHistoryPaged(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_mpd_server.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 13 | 17 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/players/mpd/tasks/MPDStopTask.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.players.mpd.tasks; 2 | 3 | import androidx.annotation.Nullable; 4 | 5 | import net.programmierecke.radiodroid2.players.mpd.MPDAsyncTask; 6 | 7 | public class MPDStopTask extends MPDAsyncTask { 8 | public MPDStopTask(@Nullable FailureCallback failureCallback) { 9 | setStages( 10 | new MPDAsyncTask.ReadStage[]{ 11 | okReadStage(), 12 | statusReadStage(false) 13 | }, 14 | new MPDAsyncTask.WriteStage[]{ 15 | (task, bufferedWriter) -> { 16 | bufferedWriter.write("command_list_begin\nstop\nstatus\ncommand_list_end\n"); 17 | return true; 18 | }}, failureCallback); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/players/mpd/tasks/MPDPauseTask.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.players.mpd.tasks; 2 | 3 | import androidx.annotation.Nullable; 4 | 5 | import net.programmierecke.radiodroid2.players.mpd.MPDAsyncTask; 6 | 7 | public class MPDPauseTask extends MPDAsyncTask { 8 | public MPDPauseTask(@Nullable FailureCallback failureCallback) { 9 | setStages( 10 | new MPDAsyncTask.ReadStage[]{ 11 | okReadStage(), 12 | statusReadStage(false) 13 | }, 14 | new MPDAsyncTask.WriteStage[]{ 15 | (task, bufferedWriter) -> { 16 | bufferedWriter.write("command_list_begin\npause 1\nstatus\ncommand_list_end\n"); 17 | return true; 18 | }}, failureCallback); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/players/PlayState.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.players; 2 | 3 | import android.os.Parcel; 4 | import android.os.Parcelable; 5 | 6 | public enum PlayState implements Parcelable { 7 | Idle, 8 | PrePlaying, 9 | Playing, 10 | Paused; 11 | 12 | @Override 13 | public void writeToParcel(Parcel dest, int flags) { 14 | dest.writeInt(ordinal()); 15 | } 16 | 17 | @Override 18 | public int describeContents() { 19 | return 0; 20 | } 21 | 22 | public static final Creator CREATOR = new Creator() { 23 | @Override 24 | public PlayState createFromParcel(Parcel in) { 25 | return PlayState.values()[in.readInt()]; 26 | } 27 | 28 | @Override 29 | public PlayState[] newArray(int size) { 30 | return new PlayState[size]; 31 | } 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /app/src/androidTest/java/net/programmierecke/radiodroid2/tests/utils/http/IcyStreamGenerator.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.tests.utils.http; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | 6 | import javax.annotation.Nonnull; 7 | 8 | import okhttp3.mockwebserver.MockResponse; 9 | import okio.Buffer; 10 | 11 | public class IcyStreamGenerator { 12 | public class MetadataInfo { 13 | 14 | } 15 | 16 | public static MockResponse generateIcyStream(@Nonnull Class clazz, @Nonnull String sourceFile) { 17 | InputStream is = clazz.getResourceAsStream(sourceFile); 18 | try { 19 | return new MockResponse() 20 | .setResponseCode(200) 21 | .setHeader("Content-Type", "audio/mpeg") 22 | .setBody(new Buffer().readFrom(is)); 23 | } catch (IOException e) { 24 | throw new RuntimeException(e); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/service/BecomingNoisyReceiver.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.service; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.content.SharedPreferences; 7 | import android.media.AudioManager; 8 | 9 | import androidx.preference.PreferenceManager; 10 | 11 | public class BecomingNoisyReceiver extends BroadcastReceiver { 12 | 13 | @Override 14 | public void onReceive(Context context, Intent intent) { 15 | if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction()) && PlayerServiceUtil.isPlaying()) { 16 | SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context); 17 | if (sharedPref.getBoolean("pause_when_noisy", true)) { 18 | PlayerServiceUtil.pause(PauseReason.BECAME_NOISY); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs_theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/androidTest/java/net/programmierecke/radiodroid2/tests/utils/conditionwatcher/IsMusicPlayingCondition.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.tests.utils.conditionwatcher; 2 | 3 | import android.content.Context; 4 | import android.media.AudioManager; 5 | 6 | import androidx.test.core.app.ApplicationProvider; 7 | 8 | import javax.annotation.Nonnull; 9 | 10 | public class IsMusicPlayingCondition implements ConditionWatcher.Condition { 11 | private boolean expectPlaying; 12 | 13 | public IsMusicPlayingCondition(boolean expectPlaying) { 14 | this.expectPlaying = expectPlaying; 15 | } 16 | 17 | @Override 18 | public boolean testCondition() { 19 | AudioManager manager = (AudioManager) ApplicationProvider.getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 20 | return manager.isMusicActive() == expectPlaying; 21 | } 22 | 23 | @Nonnull 24 | @Override 25 | public String getDescription() { 26 | return ""; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/proxy/ProxySettings.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.proxy; 2 | 3 | import android.content.SharedPreferences; 4 | 5 | import com.google.gson.Gson; 6 | 7 | import java.net.Proxy; 8 | 9 | public class ProxySettings { 10 | private final static String PREFERENCES_KEY = "proxySettings"; 11 | 12 | public String host; 13 | public int port; 14 | public String login; 15 | public String password; 16 | public Proxy.Type type; 17 | 18 | public static ProxySettings fromPreferences(SharedPreferences sharedPref) { 19 | Gson gson = new Gson(); 20 | String jsonStr = sharedPref.getString(PREFERENCES_KEY, ""); 21 | 22 | return gson.fromJson(jsonStr, ProxySettings.class); 23 | } 24 | 25 | public void toPreferences(SharedPreferences.Editor sharedPrefEditor) { 26 | Gson gson = new Gson(); 27 | String jsonStr = gson.toJson(this); 28 | sharedPrefEditor.putString(PREFERENCES_KEY, jsonStr); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_item_recording.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/service/PauseReason.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.service; 2 | 3 | import android.os.Parcel; 4 | import android.os.Parcelable; 5 | 6 | public enum PauseReason implements Parcelable { 7 | 8 | NONE, 9 | BECAME_NOISY, 10 | FOCUS_LOSS, 11 | FOCUS_LOSS_TRANSIENT, 12 | METERED_CONNECTION, 13 | USER; 14 | 15 | @Override 16 | public void writeToParcel(Parcel dest, int flags) { 17 | dest.writeInt(ordinal()); 18 | } 19 | 20 | @Override 21 | public int describeContents() { 22 | return 0; 23 | } 24 | 25 | public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 26 | @Override 27 | public PauseReason createFromParcel(Parcel in) { 28 | return PauseReason.values()[in.readInt()]; 29 | } 30 | 31 | @Override 32 | public PauseReason[] newArray(int size) { 33 | return new PauseReason[size]; 34 | } 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/station/live/metadata/lastfm/data/Artist.java: -------------------------------------------------------------------------------- 1 | 2 | package net.programmierecke.radiodroid2.station.live.metadata.lastfm.data; 3 | 4 | import com.google.gson.annotations.Expose; 5 | import com.google.gson.annotations.SerializedName; 6 | 7 | public class Artist { 8 | 9 | @SerializedName("name") 10 | @Expose 11 | private String name; 12 | @SerializedName("mbid") 13 | @Expose 14 | private String mbid; 15 | @SerializedName("url") 16 | @Expose 17 | private String url; 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | 27 | public String getMbid() { 28 | return mbid; 29 | } 30 | 31 | public void setMbid(String mbid) { 32 | this.mbid = mbid; 33 | } 34 | 35 | public String getUrl() { 36 | return url; 37 | } 38 | 39 | public void setUrl(String url) { 40 | this.url = url; 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /app/src/free/java/net/programmierecke/radiodroid2/CastHandler.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2; 2 | 3 | import android.content.Context; 4 | import android.view.Menu; 5 | import android.view.MenuItem; 6 | 7 | import net.programmierecke.radiodroid2.cast.CastAwareActivity; 8 | 9 | public class CastHandler { 10 | 11 | public boolean isReal() { 12 | return false; 13 | } 14 | 15 | public boolean isCastAvailable() { 16 | return false; 17 | } 18 | 19 | public void setActivity(CastAwareActivity activity) { 20 | 21 | } 22 | 23 | public void onCreate(ActivityMain activity) { 24 | 25 | } 26 | 27 | public void onPause() { 28 | 29 | } 30 | 31 | public void onResume() { 32 | 33 | } 34 | 35 | public MenuItem getRouteItem(Context context, Menu menu) { 36 | return null; 37 | } 38 | 39 | public boolean isCastSessionAvailable() { 40 | return false; 41 | } 42 | 43 | public void playRemote(String title, String url, String iconurl) { 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/androidTest/resources/stations_search_list.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "87600", 4 | "changeuuid": "b7a499c8-440a-11e8-b74d-52543be04c81", 5 | "stationuuid": "9617a958-0601-11e8-ae97-52543be04c81", 6 | "name": "Radio Paradise (320k)", 7 | "url": "http://stream.station.test/audio.mp3", 8 | "homepage": "https:\/\/www.radioparadise.com\/", 9 | "favicon": "https:\/\/www.radioparadise.com\/favicon.ico", 10 | "tags": "eclectic,radio,paradise,california,internet,free,non-commercial", 11 | "country": "United States of America", 12 | "countrycode": "US", 13 | "state": "California", 14 | "language": "English", 15 | "votes": "11664", 16 | "negativevotes": "0", 17 | "lastchangetime": "2018-04-19 23:22:50", 18 | "ip": "", 19 | "codec": "AAC", 20 | "bitrate": "320", 21 | "hls": "0", 22 | "lastcheckok": "1", 23 | "lastchecktime": "2020-01-10 21:39:41", 24 | "lastcheckoktime": "2020-01-10 21:39:41", 25 | "clicktimestamp": "2020-01-11 21:06:45", 26 | "clickcount": "315", 27 | "clicktrend": "-43" 28 | } 29 | ] -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_timer_chooser.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_player_bottom_sheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 19 | 20 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/CountryFlagsLoader.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2; 2 | 3 | import android.content.Context; 4 | import android.content.res.Resources; 5 | import android.graphics.drawable.Drawable; 6 | 7 | import java.util.Locale; 8 | 9 | public class CountryFlagsLoader { 10 | private static final CountryFlagsLoader ourInstance = new CountryFlagsLoader(); 11 | 12 | public static CountryFlagsLoader getInstance() { 13 | return ourInstance; 14 | } 15 | 16 | private CountryFlagsLoader() { 17 | } 18 | 19 | public Drawable getFlag(Context context, String countryCode) { 20 | if (countryCode != null) { 21 | Resources resources = context.getResources(); 22 | final String resourceName = "flag_" + countryCode.toLowerCase(); 23 | final int resourceId = resources.getIdentifier(resourceName, "drawable", 24 | context.getPackageName()); 25 | if (resourceId != 0) { 26 | return resources.getDrawable(resourceId); 27 | } 28 | } 29 | return null; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/play/java/net/programmierecke/radiodroid2/GoogleProviderHelper.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2; 2 | 3 | import android.content.Context; 4 | import android.util.Log; 5 | 6 | import com.google.android.gms.common.GooglePlayServicesNotAvailableException; 7 | import com.google.android.gms.common.GooglePlayServicesRepairableException; 8 | import com.google.android.gms.security.ProviderInstaller; 9 | 10 | public class GoogleProviderHelper{ 11 | public static void use(Context ctx){ 12 | try { 13 | Log.i("HLP","Try to install google helper for higher TLS support.."); 14 | ProviderInstaller.installIfNeeded(ctx); 15 | Log.i("HLP","Google helper was installed OK."); 16 | } catch (GooglePlayServicesRepairableException e) { 17 | Log.e("HLP","Google helper was not installed because services not repairable!"); 18 | e.printStackTrace(); 19 | } catch (GooglePlayServicesNotAvailableException e) { 20 | Log.e("HLP","Google helper was not installed because services not available!"); 21 | e.printStackTrace(); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/utils/RateLimiter.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.utils; 2 | 3 | import android.util.Log; 4 | 5 | import net.programmierecke.radiodroid2.BuildConfig; 6 | 7 | public class RateLimiter { 8 | private int limit; 9 | private long fullReplenishTime; 10 | 11 | private double available = 0; 12 | 13 | private long lastTime; 14 | 15 | public RateLimiter(int limit, long fullReplenishTime) { 16 | this.limit = limit; 17 | this.fullReplenishTime = fullReplenishTime; 18 | 19 | available = limit; 20 | lastTime = System.currentTimeMillis(); 21 | } 22 | 23 | public boolean allowed() { 24 | final long now = System.currentTimeMillis(); 25 | 26 | available += Math.abs(now - lastTime) * (1.0 / fullReplenishTime) * limit; 27 | if (available > limit) { 28 | available = limit; 29 | } 30 | 31 | if (available < 1.0) { 32 | return false; 33 | } else { 34 | available--; 35 | lastTime = now; 36 | return true; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 14 | 15 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/androidTest/java/net/programmierecke/radiodroid2/tests/utils/FirstViewMatcher.java: -------------------------------------------------------------------------------- 1 | // https://stackoverflow.com/questions/29378552/in-espresso-how-to-avoid-ambiguousviewmatcherexception-when-multiple-views-matc 2 | 3 | package net.programmierecke.radiodroid2.tests.utils; 4 | 5 | import android.view.View; 6 | 7 | import org.hamcrest.BaseMatcher; 8 | import org.hamcrest.Description; 9 | import org.hamcrest.Matcher; 10 | 11 | public class FirstViewMatcher extends BaseMatcher { 12 | 13 | 14 | public static boolean matchedBefore = false; 15 | 16 | public FirstViewMatcher() { 17 | matchedBefore = false; 18 | } 19 | 20 | public static Matcher firstView() { 21 | return new FirstViewMatcher(); 22 | } 23 | 24 | @Override 25 | public boolean matches(Object o) { 26 | if (matchedBefore) { 27 | return false; 28 | } else { 29 | matchedBefore = true; 30 | return true; 31 | } 32 | } 33 | 34 | @Override 35 | public void describeTo(Description description) { 36 | description.appendText(" is the first view that comes along "); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/HistoryManager.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2; 2 | 3 | import android.content.Context; 4 | 5 | import net.programmierecke.radiodroid2.station.DataRadioStation; 6 | 7 | public class HistoryManager extends StationSaveManager{ 8 | private static final int MAXSIZE = 25; 9 | 10 | @Override 11 | protected String getSaveId(){ 12 | return "history"; 13 | } 14 | 15 | public HistoryManager(Context ctx) { 16 | super(ctx); 17 | } 18 | 19 | @Override 20 | public void add(DataRadioStation station){ 21 | DataRadioStation stationFromHistory = getById(station.StationUuid); 22 | if (stationFromHistory != null) { 23 | listStations.remove(stationFromHistory); 24 | listStations.add(0, stationFromHistory); 25 | Save(); 26 | return; 27 | } 28 | 29 | cutList(MAXSIZE - 1); 30 | super.addFront(station); 31 | } 32 | 33 | private void cutList(int count){ 34 | if (listStations.size() > count){ 35 | listStations = listStations.subList(0,count); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | #
Android radio streaming app based on Radio Browser
4 | 5 | 9 | 10 | 11 | 12 | ###
Please add issues or feature requests on github under issues.
13 | ###
Download releases here https://github.com/segler-alex/RadioDroid/releases
14 | 15 | 17 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/players/selector/PlayerType.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.players.selector; 2 | 3 | import android.os.Parcel; 4 | import android.os.Parcelable; 5 | 6 | public enum PlayerType implements Parcelable { 7 | MPD_SERVER(0), 8 | RADIODROID(1), 9 | EXTERNAL(2), 10 | CAST(3); 11 | 12 | private final int value; 13 | 14 | PlayerType(final int value) { 15 | this.value = value; 16 | } 17 | 18 | public int getValue() { 19 | return value; 20 | } 21 | 22 | @Override 23 | public void writeToParcel(Parcel dest, int flags) { 24 | dest.writeInt(ordinal()); 25 | } 26 | 27 | @Override 28 | public int describeContents() { 29 | return 0; 30 | } 31 | 32 | public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 33 | @Override 34 | public PlayerType createFromParcel(Parcel in) { 35 | return PlayerType.values()[in.readInt()]; 36 | } 37 | 38 | @Override 39 | public PlayerType[] newArray(int size) { 40 | return new PlayerType[size]; 41 | } 42 | }; 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 16 | 17 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_item_statistic.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 21 | 22 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_player_station_info.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 18 | 19 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_drawer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | 23 | 24 | 25 | 28 | 29 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/androidTest/java/net/programmierecke/radiodroid2/tests/utils/http/HttpToMockInterceptor.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.tests.utils.http; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | import java.io.IOException; 6 | import java.net.InetSocketAddress; 7 | 8 | import okhttp3.HttpUrl; 9 | import okhttp3.Interceptor; 10 | import okhttp3.Request; 11 | import okhttp3.Response; 12 | import okhttp3.mockwebserver.MockWebServer; 13 | 14 | public class HttpToMockInterceptor implements Interceptor { 15 | 16 | private InetSocketAddress address; 17 | 18 | public HttpToMockInterceptor(MockWebServer mockWebServer) { 19 | address = new InetSocketAddress(mockWebServer.getHostName(), mockWebServer.getPort()); 20 | } 21 | 22 | @NonNull 23 | @Override 24 | public Response intercept(Chain chain) throws IOException { 25 | Request request = chain.request(); 26 | 27 | HttpUrl httpUrl = new HttpUrl.Builder().scheme("http") 28 | .host(address.getHostName()) 29 | .port(address.getPort()) 30 | .addQueryParameter("url", request.url().toString()) 31 | .build(); 32 | 33 | request = request.newBuilder() 34 | .url(httpUrl) 35 | .build(); 36 | 37 | return chain.proceed(request); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/test/java/net/programmierecke/radiodroid2/UtilsTest.kt: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2 2 | 3 | import org.junit.jupiter.api.Assertions.assertFalse 4 | import org.junit.jupiter.api.Test 5 | 6 | internal class UtilsTest { 7 | @Test 8 | fun testUrlIndicatesHlsStream() { 9 | assert(Utils.urlIndicatesHlsStream("http://www.example.org/playlist.m3u8")) 10 | assert(Utils.urlIndicatesHlsStream("http://www.example.org/playlist.m3u8 # cool")) 11 | assert(Utils.urlIndicatesHlsStream("http://www.example.org/playlist.m3u8\n")) 12 | assert(Utils.urlIndicatesHlsStream("https://stream.revma.ihrhls.com/zc5260/hls.m3u8?streamid=5260")) 13 | assert(Utils.urlIndicatesHlsStream("http://www.example.org/playlist.m3u8?bitrate=256&z=43")) 14 | assert(Utils.urlIndicatesHlsStream("http://www.example.org/playlist.m3u8#0100")) 15 | assert(Utils.urlIndicatesHlsStream("http://www.example.org/playlist.m3u8#START")) 16 | assert(Utils.urlIndicatesHlsStream("http://www.example.org/m3u8playlist.m3u8")) 17 | 18 | assertFalse(Utils.urlIndicatesHlsStream("http://www.example.org/no.m3u8.m3u")) 19 | assertFalse(Utils.urlIndicatesHlsStream("http://www.example.org/playlist.m3u85")) 20 | assertFalse(Utils.urlIndicatesHlsStream("http://www.example.org/playlist.m3united")) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/station/live/metadata/lastfm/data/Album.java: -------------------------------------------------------------------------------- 1 | 2 | package net.programmierecke.radiodroid2.station.live.metadata.lastfm.data; 3 | 4 | import java.util.List; 5 | import com.google.gson.annotations.Expose; 6 | import com.google.gson.annotations.SerializedName; 7 | 8 | public class Album { 9 | 10 | @SerializedName("artist") 11 | @Expose 12 | private String artist; 13 | @SerializedName("title") 14 | @Expose 15 | private String title; 16 | @SerializedName("url") 17 | @Expose 18 | private String url; 19 | @SerializedName("image") 20 | @Expose 21 | private List image = null; 22 | 23 | public String getArtist() { 24 | return artist; 25 | } 26 | 27 | public void setArtist(String artist) { 28 | this.artist = artist; 29 | } 30 | 31 | public String getTitle() { 32 | return title; 33 | } 34 | 35 | public void setTitle(String title) { 36 | this.title = title; 37 | } 38 | 39 | public String getUrl() { 40 | return url; 41 | } 42 | 43 | public void setUrl(String url) { 44 | this.url = url; 45 | } 46 | 47 | public List getImage() { 48 | return image; 49 | } 50 | 51 | public void setImage(List image) { 52 | this.image = image; 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_item_category.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 26 | 27 | 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/FragmentAbout.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2; 2 | 3 | import android.content.res.Resources; 4 | import android.os.Bundle; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.TextView; 9 | 10 | import androidx.annotation.NonNull; 11 | import androidx.annotation.Nullable; 12 | import androidx.fragment.app.Fragment; 13 | 14 | public class FragmentAbout extends Fragment { 15 | @Nullable 16 | @Override 17 | public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 18 | View view = inflater.inflate(R.layout.layout_about,null); 19 | 20 | TextView aTextVersion = (TextView) view.findViewById(R.id.about_version); 21 | if (aTextVersion != null) { 22 | 23 | String version = BuildConfig.VERSION_NAME; 24 | String gitHash = getString(R.string.GIT_HASH); 25 | String buildDate = getString(R.string.BUILD_DATE); 26 | 27 | 28 | if (!gitHash.isEmpty()) { 29 | version += " (git " + gitHash + ")"; 30 | } 31 | 32 | Resources resources = getResources(); 33 | aTextVersion.setText(resources.getString(R.string.about_version, version+" "+buildDate)); 34 | 35 | } 36 | 37 | return view; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/data/DataStatistics.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.data; 2 | 3 | import android.text.TextUtils; 4 | 5 | import org.json.JSONException; 6 | import org.json.JSONObject; 7 | 8 | import java.util.ArrayList; 9 | import java.util.Iterator; 10 | import java.util.List; 11 | 12 | public class DataStatistics { 13 | public String Name = ""; 14 | public String Value = ""; 15 | 16 | public static DataStatistics[] DecodeJson(String result) { 17 | List aList = new ArrayList(); 18 | if (result != null) { 19 | if (TextUtils.isGraphic(result)) { 20 | try { 21 | JSONObject jsonObject = new JSONObject(result); 22 | 23 | Iterator keys = jsonObject.keys(); 24 | while( keys.hasNext() ) { 25 | String key = (String)keys.next(); 26 | 27 | DataStatistics aData = new DataStatistics(); 28 | aData.Name = key; 29 | aData.Value = jsonObject.getString(key); 30 | 31 | aList.add(aData); 32 | } 33 | } catch (JSONException e) { 34 | e.printStackTrace(); 35 | } 36 | 37 | } 38 | } 39 | return aList.toArray(new DataStatistics[0]); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/recording/RunningRecordingInfo.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.recording; 2 | 3 | import java.io.FileOutputStream; 4 | 5 | public class RunningRecordingInfo { 6 | private Recordable recordable; 7 | private String title; 8 | private String fileName; 9 | private FileOutputStream outputStream; 10 | private long bytesWritten; 11 | 12 | public Recordable getRecordable() { 13 | return recordable; 14 | } 15 | 16 | protected void setRecordable(Recordable recordable) { 17 | this.recordable = recordable; 18 | } 19 | 20 | public String getTitle() { 21 | return title; 22 | } 23 | 24 | protected void setTitle(String title) { 25 | this.title = title; 26 | } 27 | 28 | public String getFileName() { 29 | return fileName; 30 | } 31 | 32 | protected void setFileName(String fileName) { 33 | this.fileName = fileName; 34 | } 35 | 36 | public FileOutputStream getOutputStream() { 37 | return outputStream; 38 | } 39 | 40 | protected void setOutputStream(FileOutputStream outputStream) { 41 | this.outputStream = outputStream; 42 | } 43 | 44 | public long getBytesWritten() { 45 | return bytesWritten; 46 | } 47 | 48 | protected void setBytesWritten(long bytesWritten) { 49 | this.bytesWritten = bytesWritten; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/net/programmierecke/radiodroid2/players/PlayerWrapper.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.players; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.annotation.NonNull; 6 | 7 | import net.programmierecke.radiodroid2.station.live.ShoutcastInfo; 8 | import net.programmierecke.radiodroid2.station.live.StreamLiveInfo; 9 | import net.programmierecke.radiodroid2.recording.Recordable; 10 | 11 | import okhttp3.OkHttpClient; 12 | 13 | public interface PlayerWrapper extends Recordable { 14 | interface PlayListener { 15 | void onStateChanged(PlayState state); 16 | 17 | void onPlayerWarning(final int messageId); 18 | 19 | void onPlayerError(final int messageId); 20 | 21 | void onDataSourceShoutcastInfo(ShoutcastInfo shoutcastInfo, boolean isHls); 22 | 23 | void onDataSourceStreamLiveInfo(StreamLiveInfo liveInfo); 24 | } 25 | 26 | void playRemote(@NonNull OkHttpClient httpClient, @NonNull String streamUrl, @NonNull Context context, boolean isAlarm); 27 | 28 | void pause(); 29 | 30 | void stop(); 31 | 32 | boolean isPlaying(); 33 | 34 | long getBufferedMs(); 35 | 36 | int getAudioSessionId(); 37 | 38 | long getTotalTransferredBytes(); 39 | 40 | long getCurrentPlaybackTransferredBytes(); 41 | 42 | boolean isLocal(); 43 | 44 | void setVolume(float newVolume); 45 | 46 | void setStateListener(PlayListener listener); 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_station_detail.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 14 | 19 | 24 | 29 | 34 | -------------------------------------------------------------------------------- /app/src/androidTest/java/net/programmierecke/radiodroid2/tests/utils/ScrollToRecyclerItemAction.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.tests.utils; 2 | 3 | import android.view.View; 4 | 5 | import androidx.recyclerview.widget.RecyclerView; 6 | import androidx.test.espresso.UiController; 7 | import androidx.test.espresso.ViewAction; 8 | 9 | import org.hamcrest.Matcher; 10 | 11 | import static androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast; 12 | 13 | public class ScrollToRecyclerItemAction implements ViewAction { 14 | private static final int VIEW_DISPLAY_PERCENTAGE = 50; 15 | 16 | private int itemIdx; 17 | 18 | public static ScrollToRecyclerItemAction scrollToRecyclerItem(int itemIdx) { 19 | return new ScrollToRecyclerItemAction(itemIdx); 20 | } 21 | 22 | public ScrollToRecyclerItemAction(int itemIdx) { 23 | this.itemIdx = itemIdx; 24 | } 25 | 26 | @Override 27 | public Matcher getConstraints() { 28 | return isDisplayingAtLeast(VIEW_DISPLAY_PERCENTAGE); 29 | } 30 | 31 | @Override 32 | public String getDescription() { 33 | return String.format("scroll to item %d in recycler", itemIdx); 34 | } 35 | 36 | @Override 37 | public void perform(UiController uiController, View view) { 38 | RecyclerView recyclerView = (RecyclerView) view; 39 | TestUtils.centerItemInRecycler(uiController, recyclerView, itemIdx); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/androidTest/java/net/programmierecke/radiodroid2/tests/utils/ViewPagerIdlingResource.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.tests.utils; 2 | 3 | import androidx.test.espresso.IdlingResource; 4 | import androidx.viewpager.widget.ViewPager; 5 | 6 | public class ViewPagerIdlingResource implements IdlingResource { 7 | private final String resourceName; 8 | 9 | private boolean isIdle = true; 10 | 11 | private ResourceCallback resourceCallback; 12 | 13 | public ViewPagerIdlingResource(ViewPager viewPager, String name) { 14 | viewPager.addOnPageChangeListener(new ViewPagerListener()); 15 | resourceName = name; 16 | } 17 | 18 | @Override 19 | public String getName() { 20 | return resourceName; 21 | } 22 | 23 | @Override 24 | public boolean isIdleNow() { 25 | return isIdle; 26 | } 27 | 28 | @Override 29 | public void registerIdleTransitionCallback(ResourceCallback resourceCallback) { 30 | this.resourceCallback = resourceCallback; 31 | } 32 | 33 | private class ViewPagerListener extends ViewPager.SimpleOnPageChangeListener { 34 | 35 | @Override 36 | public void onPageScrollStateChanged(int state) { 37 | isIdle = (state == ViewPager.SCROLL_STATE_IDLE); 38 | if (isIdle && resourceCallback != null) { 39 | resourceCallback.onTransitionToIdle(); 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/androidTest/java/net/programmierecke/radiodroid2/tests/utils/RecyclerRecyclingMatcher.java: -------------------------------------------------------------------------------- 1 | package net.programmierecke.radiodroid2.tests.utils; 2 | 3 | import android.util.DisplayMetrics; 4 | import android.view.View; 5 | 6 | import androidx.recyclerview.widget.RecyclerView; 7 | import androidx.test.platform.app.InstrumentationRegistry; 8 | 9 | import org.hamcrest.Description; 10 | import org.hamcrest.Matcher; 11 | import org.hamcrest.TypeSafeMatcher; 12 | 13 | public class RecyclerRecyclingMatcher { 14 | private static float MAX_SIZE_K = 1.25f; 15 | 16 | public static Matcher recyclerRecycles() { 17 | return new TypeSafeMatcher(RecyclerView.class) { 18 | @Override 19 | protected boolean matchesSafely(View recyclerView) { 20 | DisplayMetrics displayMetrics = InstrumentationRegistry.getInstrumentation() 21 | .getTargetContext().getResources() 22 | .getDisplayMetrics(); 23 | 24 | return !(recyclerView.getMeasuredHeight() > displayMetrics.heightPixels * MAX_SIZE_K) && 25 | !(recyclerView.getMeasuredWidth() > displayMetrics.widthPixels * MAX_SIZE_K); 26 | } 27 | 28 | @Override 29 | public void describeTo(Description description) { 30 | description.appendText("as a Recycler does recycling of elements"); 31 | } 32 | }; 33 | } 34 | } 35 | --------------------------------------------------------------------------------