-
Notifications
You must be signed in to change notification settings - Fork 95
/
Copy pathattrs-powerui.xml
983 lines (823 loc) · 48.2 KB
/
attrs-powerui.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2010-2021 Maksim Petrov
Redistribution and use in source and binary forms, with or without
modification, are permitted for themes, skins, widgets, plugins, applications and other software
which communicate with Poweramp music player or Poweramp Equalizer applications on Android platform.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Used in <include>, if true, no any error happens if android:layout doesn't exist (set to @null for that <include>) -->
<attr name="optional" format="boolean"/>
<!-- Just for Android 8.0, which supports light navigation bar, but doesn't have attribute for that -->
<attr name="windowLightNavigationBar" format="boolean"/>
<!-- Extra state for drawables -->
<attr name="state_toolbar_in_header" format="boolean" /><!-- REVISIT: not used ATM -->
<!-- Styles always applied for activities / dialogs -->
<declare-styleable name="PoweruiStyles">
<!-- Base styles applied for any activity -->
<attr name="BasePoweruiStyles" format="reference"/>
<!-- Styles applied for main activity, includes top list widget, items, navbar, etc. styles -->
<attr name="TopPoweruiStyles" format="reference"/>
<!-- Forced styles for dialogs -->
<attr name="DialogForcedStyle"/>
<!-- Forced style for case when light system ui (navigation/status bar) is needed for light theme.
This usually happens in Settings, where Settings theme differs from main app theme, thus, dialogs may change system ui colors -->
<attr name="DialogForceLightSystemUIStyle"/>
<!-- Forced style for case when dark system ui (navigation/status bar) is needed for light theme.
This usually happens in Settings, where Settings theme differs from main app theme, thus, dialogs may change system ui colors -->
<attr name="DialogForceDarkSystemUIStyle"/>
</declare-styleable>
<!-- Base PowerList attributes. NOTE: main Poweramp list is a ListWidget (derived from PowerList) which has extra attributes (see ListWidget below) -->
<declare-styleable name="PowerList">
<!-- ListScroller view id. PowerList uses separate view as scrollbar -->
<attr name="listScroller" format="reference"/>
<!-- ListIndexer view id. PowerList uses separate indexer view (small popup with character for a-z scrolling) -->
<attr name="listIndexer" format="reference"/>
<attr name="android:colorEdgeEffect"/><!-- Defines overshoot edge effect color -->
</declare-styleable>
<!-- Used internally -->
<declare-styleable name="ViewTag">
<attr name="android:id" />
<attr name="android:value" />
</declare-styleable>
<!-- Used internally -->
<declare-styleable name="Include">
<attr name="android:id" />
<attr name="android:visibility" />
<attr name="android:layout_width"/>
</declare-styleable>
<!-- Used internally -->
<declare-styleable name="TextPropsMin">
<attr name="android:textSize"/>
<attr name="android:textColor"/>
</declare-styleable>
<declare-styleable name="TextSizeMin">
<!--
Some preference key containing float size _multiplier_ id, for example, from skin seekbar preference id.
The multipler is applied to android:textSize set for given textview or other view with the text.
Resulting text size in pixels will be:
android:textSize in dp * textSizePref preference float value
or
android:textSize in sp * user system text size preference * textSizePref preference float value.
Different text or view styles may have different textSizePref values. We use multiplier here instead of the fixed font size value
to allow all the default text sizes (defined by default themes) to be valid without extra configuration.
NOTE: the value should be some id in the format "@id/your_id_name" (you can freely define your ids in some values.xml or ids.xml)
-->
<attr name="textSizeMultiplierPref" format="reference"/>
</declare-styleable>
<!-- Used internally -->
<!-- NOTE: similar to TextProps, but has no android:textAppearance -->
<!-- NOTE: there is already TextAppearance styleable from appcompat, so using own version here with the different name -->
<!-- NOTE: fontPad* properties are important for the pixel accurate text alignment, such as in Track items.
Due to different internal font paddings in different fonts, it may be hard to align text with pixel accuraccy, esp.
a scaled text. Android Framework does not expose detailed font properties, but Poweramp can calculate
them, taking some time during first run/cold start.
As an optimization, the calculated fontPad* values can be defined in the skin XML per font family/style.
Poweramp logs the calculated paddings into logcat when "Always Reload Skin" option is enabled.
NOTE: the fontPad* values are not applied by default to views.
FastLayout (and derived views) layout param layout_alignToContent de
-->
<declare-styleable name="TextAppearanceMin">
<attr name="android:textSize" />
<attr name="android:textColor" />
<attr name="android:textStyle" />
<attr name="android:typeface" />
<attr name="android:fontFamily" />
<attr name="android:textAllCaps"/>
<attr name="textSizeMultiplierPref"/>
<!-- See FontPads below -->
<attr name="fontPads" format="reference"/>
</declare-styleable>
<!-- TODO: remove -->
<declare-styleable name="FontPads">
<!-- Horizontal inner font padding defined as textAdjH = InnerFontHorizontalPadding / fontSize.
If not defined, the value will be calculated automatically with cold start delay ~1-10ms per the unique font.
If "Always Reload Skin" option is enabled, Poweramp also logs the calculated fontPaddings to the logcat,
so these can be specified for the skin xml as an optimization -->
<attr name="fontPadH" format="float"/>
<!-- Top vertical inner font padding defined as textAdjH = InnerFontTopPadding / fontSize.
If not defined, the value will be calculated automatically with cold start delay ~1-10ms per the unique font.
If "Always Reload Skin" option is enabled, Poweramp also logs the calculated fontPaddings to the logcat,
so these can be specified for the skin xml as an optimization -->
<attr name="fontPadTop" format="float"/>
<!-- Bottom vertical inner font padding defined as textAdjH = InnerFontBottomPadding / fontSize.
If not defined, the value will be calculated automatically with cold start delay ~1-10ms per the unique font.
If "Always Reload Skin" option is enabled, Poweramp also logs the calculated fontPaddings to the logcat,
so these can be specified for the skin xml as an optimization -->
<attr name="fontPadBottom" format="float"/>
</declare-styleable>
<declare-styleable name="TextViewFontFamily">
<attr name="android:textAppearance"/>
<attr name="android:fontFamily" />
<attr name="textSizeMultiplierPref"/>
</declare-styleable>
<!-- Simple view which applies disabledAlpha when disabled -->
<declare-styleable name="AlphaDisabledView">
<!-- Defines the disabled alpha value -->
<attr name="android:disabledAlpha"/>
</declare-styleable>
<!-- FastButton is derived from FastTextView -->
<declare-styleable name="FastButton">
<!-- Default=false. If false, ripple animation is cancelled, good for cases when button click causes immediate animation/scene transition, and animated
ripple is not visible anyway, but causes performance drop on some devices -->
<attr name="animOnClick" format="boolean"/>
<attr name="disableClickHandler" format="boolean"/>
<!-- If true, we set this view to "empty" state when it's disabled. This may cause FastLayout to hide it completely. May not
properly work/sync with scenes -->
<attr name="emptyForDisable" format="boolean"/>
</declare-styleable>
<!-- com.maxmpz.widget.base.EditText extension -->
<declare-styleable name="EditText">
<attr name="drawableWidth"/>
<attr name="drawableHeight"/>
<!-- Android 5/5.1 only. Should be duplicated with android:drawableTint for Androids 6+ -->
<attr name="drawableTint"/>
</declare-styleable>
<!-- FastCheckBoxOnly is simplified check box, which is View-based (not TextView based, as standard Android checkbox), thus is much-much faster to layout and render
in cases when no text is needed (as list items are).
Also can be a tristate checkbox
-->
<declare-styleable name="FastCheckBoxOnly">
<attr name="android:drawable"/>
<attr name="drawableTint"/>
<attr name="android:checked"/>
<attr name="tristate" format="boolean"/>
</declare-styleable>
<!-- FastCheckBox is check box with text, based on FastTextView, thus, is faster to layout and render and supports all the FastText additional properties.
NOTE: android:button attribute is the same as FastTextView android:drawable, and android:buttonTint is the same as FastTextView drawableTint
-->
<declare-styleable name="FastCheckBox">
<!-- <attr name="android:button"/> -->
<!-- <attr name="android:buttonTint"/> -->
<attr name="android:checked"/>
</declare-styleable>
<!-- Used internally -->
<declare-styleable name="BgTransSceneParams">
<attr name="android:background"/>
</declare-styleable>
<!-- Used internally in dialogs. Behavior - pseudo-view-tag which attaches to some real view and modifies its behavior in some way -->
<declare-styleable name="RootSceneActivityBehavior">
<attr name="windowIsResizable" format="boolean"/>
</declare-styleable>
<!-- Used internally in dialogs. Behavior - pseudo-view-tag which attaches to some real view and modifies its behavior in some way -->
<declare-styleable name="AdjustToSoftKeyboardBehavior">
<attr name="android:enabled"/>
</declare-styleable>
<!-- Behavior (pseudo-view-tag which attaches to some real view and modifies its behavior in some way)
which is able to load specific layout for one or multiple scenes, and unload it later, if needed.
Similar to Android Stub view, but is not a view (not visible, doesn't participate in layout/rendering/etc.) -->
<declare-styleable name="LoadableBehavior">
<!-- Defines this loadable behavior id. Used by code to find given behavior -->
<attr name="android:id"/>
<!-- Target layout to inject -->
<attr name="android:layout"/>
<!-- Target scene id layout will load for. This is usually not needed and missing, as code decides when to load this behavior instead -->
<!-- NOTE: ensure these attrs are grouped together as we use range >/< attr comparisons to parse the value -->
<attr name="loadForScene" format="reference"/>
<attr name="loadForScene_2" format="reference"/>
<attr name="loadForScene_3" format="reference"/>
<attr name="loadForScene_4" format="reference"/>
<attr name="loadForScene_5" format="reference"/>
<attr name="loadForScene_6" format="reference"/>
<attr name="loadForScene_7" format="reference"/>
<attr name="loadForScene_8" format="reference"/>
<attr name="loadForScene_9" format="reference"/>
<!-- Optional insert position. Default is end (views appended to parent, fastest) -->
<attr name="insertAt" format="integer">
<!-- Insert at position of behavior.
NOTE: position is recorded when behavior is first parsed, thus, subsequent changes to view hierarchy can move this insert point
-->
<enum name="thisPosition" value="-2"/><!-- Sync with LoadableBehavior -->
<!-- Add to the end of parent view (default) -->
<enum name="end" value="-1"/>
<!-- Insert as first child in the parent view -->
<enum name="start" value="0"/>
</attr>
<!-- Default is "onSceneEnd". NOTE: LoadableBehaviors can be loaded/unloaded directly by code.
unload="never" makes LoadableBehavior similar to StubView, but it's not a view and controlled by scenes (or code).
-->
<attr name="unload">
<!-- Unloads when scene moves away from behavior defined loadForScene* sceneId -->
<enum name="onSceneEnd" value="0"/><!-- Sync with LoadableBehavior -->
<!-- Never automatically unloaded (but can be unloaded by code -->
<enum name="never" value="1"/><!-- Sync with LoadableBehavior -->
</attr>
</declare-styleable>
<!-- Behavior (pseudo-view-tag which attaches to some real view and modifies its behavior in some way) which enables sending commands to Poweramp event buses
NOTE: also applied to BusActionButton -->
<declare-styleable name="BusActionBehavior">
<!-- E.g. @id/list (== bus supporting view id) or @id/bus_gui, or parent -> to attach to the first available msg bus up
the views hierarchy -->
<attr name="busId" format="reference|integer">
<enum name="parent" value="0"/>
</attr>
<attr name="msgId" format="reference|integer"/><!-- E.g. @id/cmd_list_select_all -->
<attr name="longPressBusId"/><!-- Optional, busId is used by default -->
<attr name="longPressMsgId" format="reference|integer"/><!-- E.g. @id/cmd_list_select_all. Send on long press and (if repeatLongPressPeriod > 0) periodically -->
<attr name="longPressEndMsgId" format="reference|integer"/><!-- Sent on long press end. Optional. Only valid if longPressMsgId is set -->
<attr name="repeatLongPressPeriod" format="integer"/><!-- If non zero, repeated longPressMsgId events sent each repeatLongPressPeriod ms -->
<attr name="arg1" format="reference|integer|boolean|float|fraction|dimension|color"><!-- Optional argument #1 -->
<enum name="checkedState" value="-1"/><!-- If parent view is Chechable, then arg will have checked state (1==checked)) -->
</attr>
<attr name="arg2" format="reference|integer|boolean|float|fraction|dimension|color"><!-- Optional argument #2 -->
<enum name="checkedState" value="-1"/>
</attr>
<!-- Optional string argument -->
<attr name="string" format="string"/>
<!-- Optional confirmation dialog title. Should be set for dialog to show -->
<attr name="confirmTitle" format="string|reference"/>
<!-- Optional confirmation dialog text -->
<attr name="confirmText" format="string|reference"/>
<!-- Optional confirmation dialog OK button label -->
<attr name="confirmButton" format="string"/>
<!-- Optional confirmation dialog title for long press. Should be set for dialog to show -->
<attr name="longPressConfirmTitle" format="string|reference"/>
<!-- Optional confirmation dialog text for long press -->
<attr name="longPressConfirmText" format="string|reference"/>
<!-- Optional confirmation dialog OK button label for long press -->
<attr name="longConfirmButton" format="string"/>
<!-- Delay for sending message in ms -->
<attr name="clickDelay" format="integer"/>
<attr name="disableForStateBusId" format="reference"><!-- See BusDisabledForStateBehavior -->
<enum name="parent" value="0"/>
</attr>
<attr name="firstPressToast" format="string|reference"/><!-- If set, toast msg will be shown for first ever press on this button. Preference is stored based on view id -->
</declare-styleable>
<!-- Behavior (pseudo-view-tag which attaches to some real view and modifies its behavior in some way) to enable/disable views based on Poweramp state buses
NOTE: also applied to BusActionButton -->
<declare-styleable name="BusDisabledForStateBehavior">
<attr name="disableForStateBusId"/><!-- E.g. @id/list -->
<attr name="disableForStateId" format="reference"/><!-- E.g. @id/state_list_selection_mode -->
<attr name="disableForStateId_2" format="reference"/><!-- Valid only if stateId defined -->
<attr name="enableForStateId" format="reference"/><!-- E.g. @id/state_list_selection_mode -->
<attr name="disableForStateMsgId" format="reference"/><!-- Can match stateIds or can be any other message. When msg received, the appropriate disable/enable ids are checked -->
<attr name="disableForStateMsgId_2" format="reference"/><!-- Can match stateIds or can be any other message. When msg received, the appropriate disable/enable ids are checked -->
</declare-styleable>
<!-- Extends BusDisabledForStateBehavior -->
<declare-styleable name="MorphableBusStateBehavior">
<attr name="morphWhenState" format="reference"/>
<attr name="morphDrawable" format="reference"/>
<attr name="morphMsgId" format="reference"/>
<attr name="morphArg1" format="integer"/>
<attr name="morphArg2" format="integer"/>
<attr name="morphString" format="string"/>
<attr name="morphLongPressMsgId" format="reference"/>
<attr name="morphLongPressEndMsgId" format="reference"/>
<attr name="morphContentDescription" format="string"/>
<!-- Default=true -->
<attr name="morphCrossfade" format="boolean"/>
<attr name="android:drawable"/>
</declare-styleable>
<declare-styleable name="BusSelectablePopupButtonLayout">
<!-- State bus to listen/query to -->
<attr name="stateBusId" format="reference"/>
<!-- State id to set buttons to -->
<attr name="stateId"/>
<!-- Message id to listen from state bus msgbus and set buttons to arg1 -->
<attr name="msgId"/>
<!-- If true, state bus will be queried on message when received instead of using arg1 for msgId message -->
<attr name="getStateOnMsg" format="boolean"/>
<!-- If set, arg1 will be overridden for BusActionButtons inside when clicked NOT in popup mode -->
<attr name="arg1"/>
<!-- If set, arg2 will be overridden for BusActionButtons inside when clicked NOT in popup mode -->
<attr name="arg2"/>
<!-- If set, string will be overridden for BusActionButtons inside when clicked NOT in popup mode -->
<attr name="string"/>
<!-- Buttons message @id - the same command message id is used for all buttons -->
<attr name="buttonsMsgId" format="reference"/>
<!-- Buttons bus id - the same msg bus is used for all buttons -->
<attr name="buttonsBusId" format="reference"/>
<!-- Integer-array of arg1 for each button. If defined, this array is used to remap index for the reported selected index -->
<attr name="buttonsArg1" format="reference"/>
<!-- If defined, BusDisabledForStateBehavior is created for this button layout -->
<attr name="disableForStateBusId"/>
<!-- Disabled alpha will be used for given view + BusDisabledForStateBehavior -->
<attr name="android:disabledAlpha"/>
<!-- Default is false. If true, we're processing click as click, not the button selection change -->
<attr name="clickOnClick" format="boolean"/>
<!-- Bus id to send message on button click when clickOnClick=true -->
<attr name="clickBusId" format="reference"/>
<!-- Msg id to send message on button click when clickOnClick=true. Arg1 matches buttonArg1 set via buttonsArg1 -->
<attr name="clickMsgId" format="reference"/>
<!-- If false (default) each button is a PopupButton view, if true, each button is a DynamicPopupButton (a layout).
buttonStyle then may reference the style for a DynamicPopupButton (layout), which in turns
creates icon (dynamicIconStyle) + label (dynamicLabelStyle) inside -->
<attr name="dynamicButtons" format="boolean"/>
<!-- Optional secondary button labels for the dynamic buttons - string @array -->
<attr name="buttonsLabels2" format="reference"/>
</declare-styleable>
<declare-styleable name="DynamicPopupButton">
<!-- These should be defined either globally or within appropriate buttonStyle -->
<attr name="dynamicIconStyle" format="reference"/>
<attr name="dynamicIconStyle_scene_menu" format="reference"/>
<attr name="dynamicLabelStyle" format="reference"/>
<attr name="dynamicLabelStyle_scene_menu" format="reference"/>
<!-- NOTE: this should be set for label 2 to be activated -->
<attr name="dynamicLabel2Style" format="reference"/>
<attr name="dynamicLabel2Style_scene_menu" format="reference"/>
</declare-styleable>
<!-- Behavior (pseudo-view-tag which attaches to some real view and modifies its behavior in some way) which selectes child view based on Poweramp state/msg bus -->
<declare-styleable name="BusSelectableBehavior">
<!-- State bus to listen/query to -->
<attr name="stateBusId"/>
<!-- State id to set buttons to -->
<attr name="stateId"/>
<!-- Message id to listen from state bus msgbus and set buttons to. arg1 is checked for state. arg1 == -1 is ignored (no changes to buttons) -->
<attr name="msgId"/>
</declare-styleable>
<!-- Behavior (pseudo-view-tag which attaches to some real view and modifies its behavior in some way) which enables left-right swiping scrolling on a layout.
See also AAScrollingBehavior -->
<declare-styleable name="BusAAScrollingBehavior">
<!-- Time to scroll between 2 pages when tab/nav button pressed -->
<attr name="posScrollAnimTime" format="integer"/><!-- ms -->
<!-- Time to settle to page when scrolled manually -->
<attr name="settleAnimTime" format="integer"/><!-- ms -->
<!-- Max overshoot used in normal mode -->
<attr name="maxOvershoot"/>
<!-- Max overshoot used in stretch mode -->
<attr name="maxStretchOvershoot"/>
<!-- State bus to listen/query to -->
<attr name="stateBusId"/>
<!-- State id to set buttons to -->
<attr name="stateId"/>
<!-- Message id to listen from state bus msgbus and set current page to -->
<attr name="msgId"/>
<!-- Message id to send for on pos changed -->
<attr name="onPosChangedMsgId" format="reference"/>
<attr name="android:colorEdgeEffect"/><!-- Defines overshoot edge effect color -->
</declare-styleable>
<!-- Extra attributes for BusStateEnabledBehavior or BusStateActionButton, which manipulate view enabled state based on state -->
<declare-styleable name="BusStateEnabled">
<!-- State bus to listen/query to -->
<attr name="stateBusId"/>
<!-- State to retrieve from StateBus -->
<attr name="stateId" format="reference"/>
<!-- Msg id to listen for state change. If not specified, stateId is used -->
<attr name="stateMsgId"/>
<attr name="enableByState"><!-- Sync with BusStateEnabledHelper.java -->
<!-- View is enabled when stateId is boolean and true -->
<enum name="matchBoolean" value="0"/>
<!-- View is enabled when stateId is boolean and false -->
<enum name="dontMatchBoolean" value="1"/>
<!-- View is enabled when stateId is integer and matches matchArg -->
<enum name="matchInteger" value="2"/>
<!-- View is enabled when stateId is integer and doesn't match matchArg -->
<enum name="dontMatchInteger" value="3"/>
</attr>
<!-- Used to set matching value for stateEnabledLogic=matchInteger/dontMatchInteger -->
<attr name="stateMatchArg" format="reference|integer"/>
<!-- If true, when msg is received we still check stateBus instead of looking into msg arg1 as state -->
<attr name="alwaysCheckState" format="boolean"/>
</declare-styleable>
<!-- Extra options for BusCheckableStateBehavior, BusCheckableStateHelper, BusCheckBox which allow checking/unchecking view based on state -->
<declare-styleable name="BusCheckableStateHelper">
<!-- State bus to listen/query to -->
<attr name="stateBusId"/>
<!-- Boolean state to retrieve from StateBus. May match stateMsgId -->
<attr name="booleanStateId" format="reference"/>
<!-- Msg id with the boolean value in arg1 to listen to -->
<attr name="stateMsgId" format="reference"/>
<!-- If true, true state == checked, otherwise, false state == checked -->
<attr name="checkedIfTrue" format="boolean"/>
<!-- Cmd to issue on check -->
<attr name="checkCmdId" format="reference"/>
<!-- Cmd to issue on uncheck -->
<attr name="uncheckCmdId" format="reference"/>
</declare-styleable>
<!-- Number of attributes to show formatted text based on Poweramp state buses -->
<!-- NOTE: not used anymore, use BusStatusText instead -->
<!-- @Deprecated -->
<declare-styleable name="BusStateFormatValue">
<attr name="android:id"/>
<attr name="busId"/><!-- E.g. @id/list -->
<attr name="stateId"/><!-- E.g. @id/state_list_selection_count -->
<attr name="secondaryStateId" format="reference"/><!-- E.g. @id/state_list_selectable_item_count -->
<!-- String like "Count: %d" or array with multiple values. Array also works with boolean-like values (index=0 - false value, index=1 - true value) -->
<attr name="format" format="string|reference"/>
<attr name="type"><!-- Type of state to format -->
<enum name="integer" value="0"/>
<enum name="string" value="1"/>
</attr>
</declare-styleable>
<!-- Extra options for BusStatusText which update text based on bus msg/state -->
<declare-styleable name="BusText">
<!-- State bus to listen/query to -->
<attr name="stateBusId"/>
<!-- Msg id to listen to -->
<attr name="updateMsgId" format="reference"/>
<!-- Msg id to listen to -->
<attr name="updateMsgId_2" format="reference"/>
<!-- Msg id to listen to -->
<attr name="updateMsgId_3" format="reference"/>
<!-- Msg id to listen to -->
<attr name="updateMsgId_4" format="reference"/>
<!-- Msg id to listen to -->
<attr name="updateMsgId_5" format="reference"/>
<!-- Msg id to listen to -->
<attr name="updateMsgId_6" format="reference"/>
<!-- Msg id to listen to -->
<attr name="updateMsgId_7" format="reference"/>
<!-- Msg id to listen to -->
<attr name="updateMsgId_8" format="reference"/>
<!-- String state for label to format/display -->
<attr name="labelStateId" format="reference"/>
<!-- Secondary string state for label to format/display -->
<attr name="labelStateId_2" format="reference"/>
<!-- Format string like "Count: %d" or array with multiple values. Array works for type=integer and also with the boolean-like values
(index=0 - false value, index=1 - true value) -->
<attr name="labelFormat" format="string|reference"/>
<!-- Int state for icon to display -->
<attr name="iconStateId" format="reference"/>
<!-- Optional scene in which no updates happen. This view should have SceneParams for such scene -->
<attr name="noUpdateInScene" format="reference"/>
<!-- Do not update if transition runs (and view is aware of that, i.e. view is animated by the scene) -->
<attr name="noUpdateInTransition" format="boolean"/>
<!-- Delay in ms to debounce multiple messages. First message is always processed immediately -->
<attr name="debounceDelay" format="integer"/>
<!-- Show the default (android:text) text if state is empty/null -->
<attr name="defaultTextOnNoState" format="boolean"/>
<attr name="stateType"><!-- Type of state to format -->
<enum name="string" value="0"/><!-- Default -->
<enum name="integer" value="1"/>
</attr>
</declare-styleable>
<!-- FastButton which is able to start specified Activity -->
<declare-styleable name="IntentActionButton">
<attr name="android:action"/>
<attr name="android:targetClass"/>
<attr name="string"/><!-- EXTRA_OBJ -->
</declare-styleable>
<!-- Behavior (pseudo-view-tag which attaches to some real view and modifies its behavior in some way) used to implement Poweramp dialogs in a separate activity
NOTE: dialog behavior always have implicit id=@id/behavior_dialog -->
<declare-styleable name="DialogBehavior">
<attr name="dialogAltOutScene"/><!-- REVISIT: this is read from Theme, not from behavior styles/attributes -->
</declare-styleable>
<!-- Empty/invisible view which changes its size depending on params below. Used as anchor for other views -->
<declare-styleable name="SmartSpacer">
<!-- Some view within this view parent, which will be queried for existance and visibility=GONE. When view is missing/GONE, heightWhenMissing is forced
for this view, otherwise, default height is applied -->
<attr name="heightTargetId" format="reference"/>
<!-- The height this view has when heightTargetId is missing/GONE -->
<attr name="heightWhenMissing" format="dimension"/>
<!-- Some view within this view parent, which will be queried for existance and visibility=GONE. When view is missing/GONE, widthtWhenMissing is forced
for this view, otherwise, default width is applied -->
<attr name="widthTargetId" format="reference"/>
<!-- The width this view has when widthTargetId is missing/GONE -->
<attr name="widthWhenMissing" format="dimension"/>
</declare-styleable>
<!-- ListWidget popup menu animation time -->
<attr name="popupEnterAnimTime" format="integer"/><!-- ms -->
<!-- ListWidget popup menu animation time -->
<attr name="popupExitAnimTime" format="integer"/><!-- ms -->
<!-- Some top level MenuHelper-enabled layout (poped-out item transformed into menu and attached there) -->
<attr name="menuPlaceholder" format="reference"/>
<attr name="listItemSize"/>
<!-- Base attributes for poping-out layout, transforming into menu on click/long click -->
<declare-styleable name="PopupLayout">
<!-- Default is false, and popup is opened by long click. If true, popup is opened by short click -->
<attr name="openOnClick" format="boolean"/>
<!-- Default is true. If true, opening popup temporarily hides other popups/top panels/etc. -->
<attr name="modal" format="boolean"/>
<!-- If true, inner scrolling will be activated for popup -->
<attr name="innerScrolling" format="boolean"/>
<!-- If set, forces popup expansion direction (somewhat inverse of the gravity):
- top - expand to top
- right - expand to right
- etc.
This makes sense only if popup size is appropriately defined -->
<attr name="popupExpandDirection">
<flag name="none" value="0x0"/>
<flag name="top" value="0x30" />
<flag name="bottom" value="0x50" />
<flag name="left" value="0x03" />
<flag name="right" value="0x05" />
</attr>
<attr name="popupEnterAnimTime"/><!-- ms -->
<attr name="popupExitAnimTime"/><!-- ms -->
<attr name="menuPlaceholder"/>
<!-- Layout to inflate into popup -->
<attr name="menuItemsLayout" format="reference"/>
<attr name="closeOnClickInside" format="boolean"/>
<!-- True by default. Disables layout passes in parent scene while in popup mode. This is to avoid jumping views around this view, as the view is detached
completely from current parent while in popup mode. Alternatively use private scene layout, or set this to false and not rely on this view layout -->
<attr name="disableParentLayoutForPopup" format="boolean"/>
<!-- If true, intermediate temporary stub view is created and attached in place of PopupLayout button when it's
in popup state. This allows the parent layout handle any changes properly while PopupLayout is detached from
the parent while in popup state.
This is needed when we need relayouts in the app while popup is active, such as for some actions pressed in
the popup, while popup stays.
WARNING: this is dangereous attribute due to the stub view reusing the popup view id, while being
a completely different type of view, so any logic touching the popup view, esp. by id should be aware
of this attribute being used -->
<attr name="keepLayoutForPopup" format="boolean"/>
<attr name="maxOvershoot"/>
<attr name="maxStretchOvershoot"/>
</declare-styleable>
<!-- Layout looking like button, but transformed to a menu on click/long click -->
<declare-styleable name="PopupButtonLayout">
<!-- Default is false, and popup is opened by long click. If true, popup is opened by short click -->
<attr name="openOnClick"/>
<attr name="modal"/>
<attr name="popupEnterAnimTime"/><!-- ms -->
<attr name="popupExitAnimTime"/><!-- ms -->
<attr name="buttonAnimTime" format="integer"/><!-- ms -->
<attr name="menuPlaceholder"/>
<!--<attr name="menuItemsLayout"/>--><!-- NOTE: not supported here ATM -->
<!-- Button labels string @array -->
<attr name="buttonsLabels" format="reference"/>
<!-- Button drawables @array -->
<attr name="buttonsDrawables" format="reference"/>
<!-- Tint is applied to buttons drawables -->
<attr name="drawableTint"/>
<!-- Button style (e.g. ?PopupButton) while in button state -->
<attr name="buttonStyle" format="reference"/>
<!-- Button style (e.g. ?PopupButton_scene_button_menu) while in popup menu state -->
<attr name="menuButtonStyle" format="reference"/>
<!-- Default is true -->
<attr name="closeOnClickInside"/>
<!-- True by default. Disables layout passes in parent scene while in popup mode. This is to avoid jumping views around this view, as the view is detached
completely from current parent while in popup mode. Alternatively use private scene layout, or set this to false and not rely on this view layout -->
<attr name="disableParentLayoutForPopup"/>
<attr name="toastOnPress" format="reference"/>
</declare-styleable>
<!-- Layout for toasts -->
<declare-styleable name="ToastFrameLayout">
<attr name="toastDuration" format="integer"/><!-- ms. This is default value, which is often overridden by code -->
<attr name="cmdId" format="reference"/><!-- By default - cmd_gui_show_toast -->
<!-- If set, this layout will queue and show toasts in order. If queueMinMs == 0, toasts will be shown with their duration, otherwise new toast will reduce
previous toast duration to queueMinMs ms -->
<attr name="queueMinMs" format="integer"/>
</declare-styleable>
<!-- Behavior (pseudo-view-tag which attaches to some real view and modifies its behavior in some way) which enables scrolling in a layout.
Scrolling direction is defined by layout android:scrollbars -->
<declare-styleable name="ScrollingBehavior">
<attr name="maxOvershoot" format="dimension"/>
<attr name="maxStretchOvershoot" format="dimension"/>
<attr name="disallowParentScroll" format="boolean"/>
<attr name="noScrollbars" format="boolean"/><!-- If true, avoid enabling scrollbar drawing -->
<attr name="android:colorEdgeEffect"/><!-- Defines overshoot edge effect color -->
</declare-styleable>
<!-- Behavior (pseudo-view-tag which attaches to some real view and modifies its behavior in some way) which enables aa-like horizontal scrolling in a layout.
See also BusAAScrollingBehavior -->
<declare-styleable name="AAScrollingBehavior">
<attr name="maxOvershoot"/>
<attr name="maxStretchOvershoot"/>
</declare-styleable>
<!-- Poping-out button which is transformed into a PowerList -->
<declare-styleable name="PopupListLayout">
<!-- Default is true. If true, opening popup temporarily hides other popups/top panels/etc. -->
<attr name="modal"/>
<attr name="popupEnterAnimTime"/><!-- ms -->
<attr name="popupExitAnimTime"/><!-- ms -->
<attr name="menuPlaceholder"/>
<!-- PowerList style for list used in popup. Default is @style/PopupListLayoutList -->
<attr name="popupListStyle" format="reference"/>
<!-- True by default. Disables layout passes in parent scene while in popup mode. This is to avoid jumping views around this view, as the view is detached
completely from current parent while in popup mode. Alternatively use private scene layout, or set this to false and not rely on this view layout -->
<attr name="disableParentLayoutForPopup"/>
<!-- State bus id for label and messages to listen to -->
<attr name="stateBusId"/>
<!-- Optional long state to listen to/retrieve from StateBus to change selectedItemStateId -->
<attr name="selectedItemStateId" format="reference"/>
<!-- Msg id to listen for state change (both selected item and label) -->
<attr name="stateMsgId"/>
<!-- String state for label to display. If not set, label text is not changed/updated -->
<attr name="labelStateId"/>
<!-- Optional format string like "Preset: %s". NOTE: only strings supported here -->
<attr name="labelFormat"/>
<!-- Height of list row -->
<attr name="listItemSize"/>
<!-- Smaller zoomed out height of list row. ATM applied to MediaRouter list only -->
<attr name="smallerListItemSize" format="dimension"/>
</declare-styleable>
<!-- FastLayout with an animated line background, which animates view resize -->
<declare-styleable name="BgAnim">
<!-- lineBackground animation duration -->
<attr name="lineAnimTime" format="integer"/>
<!-- Line background drawable -->
<attr name="lineBackground"/>
<!-- Default false. If private, child views are not processed by scenes, initiated outside of this view -->
<attr name="privateScene"/>
</declare-styleable>
<!-- Additional attributes for selection menu -->
<declare-styleable name="SelectionMenuBehavior">
<attr name="animTime"/><!-- In animation duration -->
<attr name="animExitTime"/><!-- Optional out animation duration (if not specified, animTime is used for both enter and exit) -->
</declare-styleable>
<declare-styleable name="RatingBar">
<attr name="android:enabled"/>
<!-- The star drawble to use -->
<attr name="android:drawable"/>
<!-- The off version of star drawable -->
<attr name="drawableOff" format="reference"/>
<attr name="drawableWidth"/>
<attr name="drawableHeight"/>
<attr name="drawableTint"/>
<!-- The animated background -->
<attr name="lineBackground"/>
<!-- Can be left (default) / right. Defines horizontal position for stars within rating bar -->
<attr name="android:gravity"/>
<attr name="busId"/>
<attr name="msgId"/>
<!-- Default true. If true we change background line bounsd and clip unselected stars,
if false - all stars are visible all the time -->
<attr name="doClip" format="boolean"/>
<attr name="transformPivotX_percent"/>
<attr name="transformPivotY_percent"/>
</declare-styleable>
<!-- Special top-level layout for poping-out menus. Poping out views are transformed into menu and attached to this layout for a popup duration -->
<declare-styleable name="PopupMenuHelper">
<!--
Color used to shade contents of the list when some popup menu is shown.
Used for both color and blue shade types.
For color - it's just a color.
For blur - it's additional color which is also applied before blur.
-->
<attr name="shadeColor" format="color|reference"/>
<!-- <attr name="shadeType"/> -->
<!-- <attr name="shadeBlurSubsample"/> --><!-- Subsample scale to improve performance. 0.1 recommended -->
<!-- <attr name="shadeBlurRadius"/> --><!-- Blur radius -->
<!-- Defines popup overscan area, e.g. set this when popup menu placeholder layout is placed under status bar (overscan=top),
android navigation bar (overscan=bottom) or both (overscan=top|bottom).
This is used for additional vertical alignment accounting for overscans
-->
<!-- Sync with PopupMenuHelper.java -->
<!-- NOTE: not used ATM
<attr name="overscan">
<flag name="none" value="0"/>
<flag name="top" value="0x1"/>
<flag name="bottom" value="0x2"/>
</attr>
-->
</declare-styleable>
<!-- Poping out character shown when user actively scrolls in az mode -->
<declare-styleable name="ListIndexerPopupView">
<attr name="indexerPopupMode">
<enum name="fixed" value="0"/><!-- Popup stays as specified by layout -->
<enum name="moveWithThumb" value="1"/><!-- Popup translationY is modified to match scrolling thumb. Appropriate layout should be given in xml (e.g. popup should be on top, aligned right to scrollbar -->
</attr>
<!-- Additional margin to apply in moveWithThumb + moving thumb mode. NOTE: applied as translationX -->
<attr name="thumbModeOffsetX" format="dimension"/>
</declare-styleable>
<!-- Scroller for main Poweramp list with 2 modes - az chars or standard draggable thumb. PowerList switches modes depending on data it's showing -->
<declare-styleable name="ListScrollerView">
<!-- Drawable for thumb. Can have enter/exit animation -->
<attr name="android:thumb"/>
<!-- Track drawable. Enter/exit animation is ignored. Instead, StateAnim is applied -->
<attr name="android:track"/>
<!-- Like standard android transformPivotX/Y, but expressed as percent -->
<attr name="transformPivotX_percent" format="fraction"/>
<attr name="transformPivotY_percent" format="fraction"/>
<!-- Background to use in az scrolling mode -->
<attr name="azBackground" format="reference|color"/>
<!-- Touched background to use in az scrolling mode -->
<attr name="azTouchedBackground" format="reference|color"/>
<!-- Text scale to use in az scrolling mode -->
<attr name="azTextScale" format="float"/>
<!-- If exists, scroll up small drawable will be drawn on top of az -->
<attr name="azScrollUp" format="reference"/>
<!-- Not used anymore -->
<attr name="azChars" format="string"/>
<!-- Padding for az scrolling mode -->
<attr name="azPaddingLeft" format="dimension"/>
<!-- Padding for az scrolling mode -->
<attr name="azPaddingRight" format="dimension"/>
<!-- Padding for az scrolling mode -->
<attr name="azPaddingTop" format="dimension"/><!-- NOTE: is azSize is used (valid not @null/@empty value, > 0), then azPaddingTop/azPaddingBottom are ignored, AZ centered -->
<!-- Padding for az scrolling mode -->
<attr name="azPaddingBottom" format="dimension"/>
<!-- Optional size (height) for az scrolling mode. Can be a percentage of available height or direct fixed size -->
<attr name="azSize" format="dimension|fraction"/>
<!-- Color of the line between A-Z chars. Can be #0000 to avoid separators -->
<attr name="azSeparatorLineColor" format="color"/>
<!-- Also, android:text* attributes are supported -->
<!-- NOTE: font size is automatically selected depending on space available in the cells -->
<attr name="android:textAppearance"/>
<attr name="android:textSize"/>
<attr name="android:textColor"/>
<attr name="android:textStyle"/>
<attr name="android:fontFamily" />
<attr name="android:typeface" />
<attr name="textSizeMultiplierPref"/>
<attr name="fontPads"/>
</declare-styleable>
<declare-styleable name="RatingBarSceneParams">
<attr name="android:background"/>
<attr name="drawableTint"/>
<!-- NOTE: limited support for drawable transitions. For new drawable to appear, default scene should have some default drawable set
Basically, that means we can transition between drawables, but we can't transition between no-drawable and drawable and vice-versa -->
<attr name="android:drawable"/>
<attr name="drawableOff"/>
<attr name="lineBackground"/>
<attr name="android:gravity"/>
<attr name="doClip"/>
<attr name="transformPivotX_percent"/>
<attr name="transformPivotY_percent"/>
</declare-styleable>
<declare-styleable name="Waveseek">
<!-- Defines waveseek layout -->
<attr name="waveLayout" format="integer">
<enum name="scrollable" value="0"/><!-- Waveseek can be dragged with swipes -->
<enum name="fixed" value="1"/><!-- Waveseek can't be dragged, progress follows touch -->
</attr>
<!-- Used only in layout=scrollable mode. Ignored in layout=fixed mode -->
<attr name="barWidth" format="dimension|enum">
<enum name="auto" value="-1"/><!-- If auto, matches barBitmap bitmap width -->
</attr>
<!-- Used for both layout modes. Can be a percentage of barWidth for layut=scrollable -->
<attr name="barSpacing" format="dimension|fraction"/>
<!--
Defines number of bars in waveseek. The actual wave data set to the Waveseek by Poweramp may be of different size. Waveseek resamples
incoming data to match numBars.
For layout=fixed mode, this together with barSpacing defines width of bars.
-->
<attr name="numBars" format="integer"/>
<!-- Minumum bar height. NOTE: min bar height can't be less than largest *barBitmap* width -->
<attr name="minBarHeight" format="dimension"/>
<!--
Waveseek can draw either simple and fast bars with background and border or drawables
To the left is elapsedBar* bars/drawables, to the right - just bar*.
If divisor is >=0%, then 2 bars/drawables are drawn - top and bottom.
Bottom bar is drawn with barColor2/elapsedBarColor2/barDrawable2/elapsedBarDrawable2.
Center bar is split under cursor (even if cursor doesn't exist) - indicating the seek position.
-->
<!-- The divisor (empty space) position between top and bottom bars. If < 0%, then just one set of bars drawn -->
<attr name="divisor" format="fraction"/>
<!-- The divisor size (size of the empty space between top and bottom bars) -->
<attr name="divisorSize" format="dimension"/>
<!-- NOTE: bar/elapsedBarColor*, bar/elapsedBarDrawable* / stroke are not used now due to issues on some Android devices. Instead raw bitmaps are used.
See bar/elaspedBarBitmap* for details -->
<attr name="barColor" format="color|reference"/><!-- NOTE: not used -->
<attr name="barColor2" format="color|reference"/><!-- NOTE: not used -->
<attr name="elapsedBarColor" format="color|reference"/><!-- NOTE: not used -->
<attr name="elapsedBarColor2" format="color|reference"/><!-- NOTE: not used -->
<attr name="barStrokeColor" format="color|reference"/><!-- NOTE: not used -->
<attr name="elapsedBarStrokeColor" format="color|reference"/><!-- NOTE: not used -->
<!-- If both barDrawable & elapsedBarDrawable are defined, then drawables are drawn, otherwise - bars -->
<attr name="barDrawable" format="reference"/><!-- NOTE: not used -->
<attr name="elapsedBarDrawable" format="reference"/><!-- NOTE: not used -->
<attr name="barDrawable2" format="reference"/><!-- NOTE: not used -->
<attr name="elapsedBarDrawable2" format="reference"/><!-- NOTE: not used -->
<!-- If non-zero, rounded corners applied to bars -->
<attr name="barRoundedCorners" format="dimension"/><!-- NOTE: not used -->
<attr name="stroke" format="dimension"/><!-- NOTE: not used -->
<!-- NOTE: barBitmap/elapsedBarBitmap/barBitmap2/elapsedBarBitmap2 are specifically crafted bitmaps. Height of the bitmap should be >= width of the bitmap.
Bitmap is stretched in a way similar to 9-patch images, but only 3 "patches" used - top, middle, bottom.
Top is unstretched, height=width*0.5, bottom is unstretched, height=width*0.5 and reset is stretched middle.
This is required as accross Android devices, many can't render 9-patch images reliable and fast, others can't reliable
render e.g. RoundRect shapes or other Drawables, thus, the approach with the raw Bitmaps is used here -->
<!-- Non-yet-elapsed bar (to the right of playing point) -->
<attr name="barBitmap" format="reference"/>
<!-- Elapsed bar (to the left of playing point) -->
<attr name="elapsedBarBitmap" format="reference"/>
<!-- Optiponal non-yet-elapsed bar (to the right of playing point) - bottom part -->
<attr name="barBitmap2" format="reference"/>
<!-- Optiponal elapsed bar (to the left of playing point) - bottom part -->
<attr name="elapsedBarBitmap2" format="reference"/>
<!-- The tint color to apply for the bars -->
<attr name="barTint" format="color"/>
<!-- Default is src_atop -->
<attr name="barTintMode">
<enum name="src_over" value="3" />
<enum name="src_in" value="5" />
<enum name="src_atop" value="9" />
<enum name="multiply" value="14" />
<enum name="screen" value="15" />
<enum name="add" value="16" />
</attr>
<!-- Used only in layout=fixed mode. Cursor position in percent of Waveseek width. 50%=center -->
<attr name="cursorPosition" format="fraction"/>
<!-- Used only in layout=fixed mode. Cursor absolute offset from cursorPosition -->
<attr name="cursorOffset" format="dimension"/>
<!-- Cursor activation animation -->
<attr name="cursorAnimator" format="reference"/>
<!-- Used only in layout=fixed mode. Default=true. If true, elapsed bars are redrawn immediately on any scroll, otherwise they delayed until scroll is finished -->
<attr name="cursorBgFastTracking" format="boolean"/><!-- NOTE: not used -->
<!-- If set, all bars will have this value. Useful for emulating "usual" seekbar -->
<attr name="forceValue" format="float"/>
<!-- Used only for layout=scroll. Default=true. If true, leftmost/rightmost bars are gradually faded out/in -->
<attr name="fadeSidebars" format="boolean"/>
<!-- Time for data change animation in ms -->
<attr name="dataAnimTime" format="integer"/>
<!-- Time for data change animation when no incoming data exists (to small line) in ms -->
<attr name="noDataAnimTime" format="integer"/>
<!-- Waveseek supports style "enabled" attribute (not supported by Android views by default). If set to false, waveseek functionality will be completely disabled -->
<attr name="android:enabled"/>
</declare-styleable>
<declare-styleable name="PaddedCheckBox">
<attr name="drawablePaddingStart"/>
<!-- Padding between drawable and text. Basically it's added to paddingLeft when drawable exists -->
<attr name="android:drawablePadding"/>
</declare-styleable>
</resources>